2.0 文档中有哪些新内容
本页追踪 DuckDB 2.0 中引入功能的文档,围绕 DuckDB v2.0 亮点博客文章的主题组织。每个部分链接到相关文档。
DuckDB 作为服务器:Quack 和 CONNECT
DuckDB 2.0 可以作为服务器运行,让多个客户端通过网络连接到一个共享实例。quack 扩展提供远程协议,新的 CONNECT 和 DISCONNECT 语句从 SQL 打开和关闭连接。命令行客户端可以直接启动服务器并连接到它。
- Quack 扩展
- CONNECT 和 DISCONNECT 语句
- CLI -serve 和 -connect 参数
VARIANT 成为一等公民
VARIANT 类型存储半结构化、无 schema 的数据,如 JSON,同时保持列式执行的性能。一族 variant_* 函数构造和检查 variant 值。
- Variant 类型
- Variant 函数
触发器
DuckDB 2.0 添加了触发器支持,所以你可以自动响应表变化运行操作。这对于构建审计表和执行不变量很有用。
- CREATE TRIGGER 语句
SQL 方言新增内容
DuckDB 2.0 在几个方向扩展了 SQL 方言,从新的连接类型到数据修改 CTE 和更友好的变量语法。
- 显式连接类型语法,包括最近邻(NEAREST)连接
- 数据修改 CTE,包括 CTE 中的 COPY ... 块
- 嵌套 schema
- $⟨variable⟩ 变量简写,包括会话变量作为默认参数值
- JSON 变更函数
- 按 UNNEST 分组
- SQL 标准的 FETCH FIRST 语法
- SECURE VIEW
- SHOW 语句
- 设置序列值
- regexp_extract 新增内容
异步 I/O
DuckDB 2.0 在后台发出读取并保持多个请求在途,这加快了从 S3 等对象存储读取的查询。该行为由 async_threads 和 read-ahead 设置控制。
- 异步 I/O 概述
- 线程池和预读
- 异步 I/O 配置设置
全面更快的查询
DuckDB 2.0 包含优化器和引擎改进,包括更快的递归 CTE 和更好的行组裁剪。
存储格式 v2.0
新的数据库文件默认使用 v2.0.0 存储格式。该格式增加了惰性元数据加载、更好的压缩和损坏验证。由于该格式不向后兼容,有一份迁移指南涵盖升级现有部署。
- 默认存储版本
- 存储版本表
- 迁移现有部署:参见 DuckDB v2.0 迁移指南
全新的 SQL 解析器
DuckDB 2.0 引入了一个基于 PEG 的 SQL 解析器,取代了源自 PostgreSQL 的解析器,并允许扩展贡献语法。
- PEG 解析器
不依赖 ICU 的时区、日历和排序规则
DuckDB 2.0 提供了更小、更快的时区、日历和排序规则支持的原生实现,减少了对 ICU 扩展的依赖。
编写一次扩展,自己托管它们
DuckDB 2.0 附带了一个改进的、稳定的 C API,具有版本化 ABI,所以构建一次的扩展在跨版本时持续工作。你还可以注册和托管自己的扩展仓库,包括静态链接到自定义构建中。
- C API
- 扩展仓库
- 静态链接扩展:参见静态链接扩展
其他文档更新
站点中记录的其他 2.0 功能,按领域分组。
SQL
- TIMESTAMPTZ_NS,具有纳秒精度的时区感知时间戳
- 用于降采样时间序列数据的 lttb 聚合
- duckdb_functions 中新的 extension_name 列
- duckdb_secret_type_parameters() 函数,列出每种 secret 类型接受的参数
- duckdb_columns() 和 information_schema.columns 中的 is_generated 和 generation_expression 列
- 用于精确十进制除法的 decimal_division 函数
- 用于精确十进制平均值的 decimal_average 聚合
- 用于构建 VARIANT 对象的 variant_group_object 聚合
- 用于把值收集到 VARIANT 数组中的 variant_group_array 函数
- 为 PostgreSQL 兼容性用 ALTER TABLE ... RENAME TO 重命名视图
- EXCEPT 作为星号表达式中 EXCLUDE 的同义词
- 无参数 GROUPING_ID() 和 GROUPING() 默认为所有 GROUP BY 列
- 反引号引用的标识符作为双引号的替代
- DEFERRED 主键和唯一约束在提交时检查
- EXPLAIN (SQL) 把优化后的计划渲染为可执行 SQL
- 空 STRUCT 类型
数据导入和导出
- 写入 GeoJSON 和加载 GeoJSON
- Parquet schema 参数和新的 Parquet 写入选项
- 用于计算自定义分区子目录的 PARTITION_PATH 复制选项
- 用于在写入前排序行的 ORDER_BY 复制选项
- 用于控制时间戳写入方式的 TIMESTAMP_IS_ADJUSTED_TO_UTC 和 WRITE_TIMESTAMP_AS_INT96 Parquet 写入选项
- 用于 Parquet 行组裁剪的 file_row_group_number 虚拟列
- 用于限制存储的拒绝行大小的 rejects_line_size_limit CSV 参数
客户端
- CLI 代理模式,命令行客户端中的交互式助手
- CLI 命令历史:.history 命令和 shell_history() 表函数
- 美化打印、高亮的 .schema 输出,带 --no-indent 以恢复单行形式
配置和性能分析
- 把 max_memory 设置为总系统内存的百分比
- 用于限制查询墙钟时间的 max_execution_time 设置
- 控制分离数据库时检查点的 checkpoint_on_detach 设置
- 弃用表函数参数中隐式标识符到字符串的转换,带 table_function_identifier_conversion 设置
- 移除 enable_http_logging 和 http_logging_output 设置,改用统一日志框架
- 用于设置异步 HTTP 客户端池大小的 http_client_pool_capacity 设置
- 指标层和 tracked_metrics 设置
- 整数除以零的 IEEE 浮点运算语义
- web 性能分析格式和用于在浏览器中打开查询图的 CLI .web 命令
构建
- 现在构建 DuckDB 需要 C++17 编译器