为 httpfs 提供读取缓存文件系统
安装和加载
INSTALL cache_httpfs FROM community;
LOAD cache_httpfs;
示例
SELECT cache_httpfs_get_cache_size();
关于 cache_httpfs
此扩展为 DuckDB 添加了一个读取缓存文件系统,作为 httpfs 扩展的封装器。它支持以下几个关键特性
- 支持文件元数据、glob、文件句柄和数据块缓存
- 支持数据块的磁盘缓存和内存缓存,块大小和缓存模式可调
- 支持基于访问时间戳的磁盘缓存文件驱逐,允许可调的磁盘空间保留
- 支持并行 IO 请求,请求大小和并行度可调
- 支持对一些操作(如打开、读取、glob)的 IO 延迟和缓存命中/未命中率进行分析,从而深入了解工作负载特征
- 公开用于获取缓存大小和清理缓存的函数
- 提供禁用/启用缓存的选项,可以作为 httpfs 的直接替代品
新增函数
函数名 | 函数类型 | 描述 | 注释 | 示例 |
---|---|---|---|---|
cache_httpfs_cache_access_info_query | 表 | NULL | NULL | |
cache_httpfs_cache_status_query | 表 | NULL | NULL | |
cache_httpfs_clear_cache | 标量 | NULL | NULL | |
cache_httpfs_clear_cache_for_file | 标量 | NULL | NULL | |
cache_httpfs_clear_profile | 标量 | NULL | NULL | |
cache_httpfs_get_cache_filesystems | 表 | NULL | NULL | |
cache_httpfs_get_ondisk_data_cache_size | 标量 | NULL | NULL | |
cache_httpfs_get_profile | 标量 | NULL | NULL | |
cache_httpfs_wrap_cache_filesystem | 标量 | NULL | NULL |
新增设置
名称 | 描述 | 输入类型 | 范围 |
---|---|---|---|
ca_cert_file | 自定义证书文件的路径,用于自签名证书。 | VARCHAR | GLOBAL(全局) |
cache_httpfs_cache_block_size | 缓存的块大小,适用于内存缓存文件系统和磁盘缓存文件系统。值得注意的是,对于磁盘文件系统,配置更新后所有现有缓存文件都将失效。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_cache_directory | 存储缓存数据的磁盘缓存目录 | VARCHAR | GLOBAL(全局) |
cache_httpfs_enable_file_handle_cache | 是否为缓存文件系统启用文件句柄缓存。默认启用。 | BOOLEAN | GLOBAL(全局) |
cache_httpfs_enable_glob_cache | 是否为缓存文件系统启用 glob 缓存。默认启用。 | BOOLEAN | GLOBAL(全局) |
cache_httpfs_enable_metadata_cache | 是否为缓存文件系统启用元数据缓存。默认启用。 | BOOLEAN | GLOBAL(全局) |
cache_httpfs_file_handle_cache_entry_size | 文件句柄缓存的最大缓存大小。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_file_handle_cache_entry_timeout_millisec | 文件句柄缓存的缓存条目超时时间(毫秒)。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_glob_cache_entry_size | glob 缓存的最大缓存大小。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_glob_cache_entry_timeout_millisec | glob 缓存的缓存条目超时时间(毫秒)。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_ignore_sigpipe | 是否忽略扩展的 SIGPIPE。默认不忽略。一旦忽略,则无法恢复。 | BOOLEAN | GLOBAL(全局) |
cache_httpfs_in_mem_cache_block_timeout_millisec | 数据块缓存条目的超时时间(毫秒)。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_max_fanout_subrequest | 缓存的 httpfs 通过将请求拆分为小请求来执行并行请求,请求大小由配置 [cache_httpfs_cache_block_size] 决定。 此设置限制了为单个文件系统读取请求发出的最大请求数。 0 表示没有限制,默认情况下我们不设置限制。 | BIGINT | GLOBAL(全局) |
cache_httpfs_max_in_mem_cache_block_count | 所有缓存文件系统的内存缓存的最大内存块计数,因此用户可以配置最大内存消耗。 值得注意的是,它应该在所有文件系统访问之前设置一次,否则没有影响。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_metadata_cache_entry_size | 元数据 LRU 缓存的最大缓存大小。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_metadata_cache_entry_timeout_millisec | 元数据 LRU 缓存的缓存条目超时时间(毫秒)。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_min_disk_bytes_for_cache | 磁盘上缓存文件系统启用磁盘缓存所需的最小字节数; 如果剩余字节数小于阈值,将执行基于 LRU 的缓存文件驱逐。默认情况下,5% 的磁盘空间将保留用于其他用途。 当使用正值指定最小磁盘字节数时,默认值将被覆盖。 | UBIGINT | GLOBAL(全局) |
cache_httpfs_profile_type | 缓存文件系统的分析类型。 有三个选项可用:noop 、temp 和 duckdb 。 temp 选项存储最新的 IO 操作分析结果,这可能会受到并发更新的影响; duckdb 将 IO 操作分析结果存储到 duckdb 表中,从而解锁高级分析。 |
VARCHAR | GLOBAL(全局) |
cache_httpfs_type | 缓存文件系统的类型。 目前有两种类型可用,一种是 in_mem ,另一种是 on_disk 。 默认情况下,我们使用磁盘缓存。 设置为 noop 以禁用,其行为与 httpfs 扩展完全相同。 |
VARCHAR | GLOBAL(全局) |
enable_server_cert_verification | 启用服务器端证书验证。 | BOOLEAN | GLOBAL(全局) |
force_download | 强制预先下载文件 | BOOLEAN | GLOBAL(全局) |
hf_max_per_page | 调试选项,用于限制列表请求中返回的项目数 | UBIGINT | GLOBAL(全局) |
http_keep_alive | 保持连接。 将此设置为 false 可以在遇到连接故障时提供帮助 | BOOLEAN | GLOBAL(全局) |
http_retries | I/O 错误时的 HTTP 重试 | UBIGINT | GLOBAL(全局) |
http_retry_backoff | 用于指数增加重试等待时间的退避因子 | FLOAT | GLOBAL(全局) |
http_retry_wait_ms | 重试之间的时间 | UBIGINT | GLOBAL(全局) |
http_timeout | HTTP 超时读取/写入/连接/重试(以秒为单位) | UBIGINT | GLOBAL(全局) |
s3_access_key_id | S3 访问密钥 ID | VARCHAR | GLOBAL(全局) |
s3_endpoint | S3 端点 | VARCHAR | GLOBAL(全局) |
s3_kms_key_id | S3 KMS 密钥 ID | VARCHAR | GLOBAL(全局) |
s3_region | S3 区域 | VARCHAR | GLOBAL(全局) |
s3_secret_access_key | S3 访问密钥 | VARCHAR | GLOBAL(全局) |
s3_session_token | S3 会话令牌 | VARCHAR | GLOBAL(全局) |
s3_uploader_max_filesize | S3 上传器最大文件大小(介于 50GB 和 5TB 之间) | VARCHAR | GLOBAL(全局) |
s3_uploader_max_parts_per_file | S3 上传器每个文件的最大分片数(介于 1 和 10000 之间) | UBIGINT | GLOBAL(全局) |
s3_uploader_thread_limit | S3 上传器全局线程限制 | UBIGINT | GLOBAL(全局) |
s3_url_compatibility_mode | 禁用 S3 URL 上的 Globs 和查询参数 | BOOLEAN | GLOBAL(全局) |
s3_url_style | S3 URL 样式 | VARCHAR | GLOBAL(全局) |
s3_use_ssl | S3 使用 SSL | BOOLEAN | GLOBAL(全局) |