212 字
1 分钟
Clickhouse select count of parquet files from s3 not utilizing metadata when file is small
在clickhouse中select count(*) from s3(…, format=‘Parquet’)如果是很小的文件会出现拉取完整文件而不是获取parquet metadata来计算行数。在我的测试中这个阈值大约是1MB,然而根据默认设置 max_download_buffer_size 应该是10MB。
虽不清楚为什么在我的环境中>1MB的文件就会只读取metadata,但是经过和clickhouse member的讨论学习到了一些settings能强制停止prefetch行为。
注:关闭prefetch总体来说会导致查询性能下降。之所以在我的use case中需要关闭prefetch是因为存在gcs inter region data transfer cost。为了减少select count(*)的费用需要关闭prefetch
方法一:
SETTINGS max_download_buffer_size = 1
方法二:
SETTINGS remote_filesystem_read_prefetch = 0
另外补充一点,在clickhouse client中调试时可通过添加 send_logs_level = 'trace'来获取query对应的trace log
Clickhouse select count of parquet files from s3 not utilizing metadata when file is small
https://notes.ezworker.cc/posts/clickhouse-select-count-of-parquet-files-from-s3-not-utilizing-metadata-when-file-is-small/