在clickhouse中select count(*) from s3(…, format=’Parquet’)如果是很小的文件会出现拉取完整文件而不是获取parquet metadata来计算行数。在我的测试中这个阈值大约是1MB,然而根据默认设置 应该是10MB。max_download_buffer_size
虽不清楚为什么在我的环境中>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
发表回复