资源组织
组织
BigQuery Projects 与 ClickHouse Cloud 服务
- 一组计算节点 (目前,Development 层级服务为 2 个节点,Production 层级服务为 3 个节点) 。对于这些节点,ClickHouse Cloud 支持垂直和横向扩缩容,既可手动进行,也可自动进行。
- 一个 object storage 文件夹,服务会在其中存储所有数据。
- 一个端点 (或通过 ClickHouse Cloud UI Console 创建的多个端点) - 即用于连接到该服务的服务 URL (例如:
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443)
BigQuery 数据集与 ClickHouse Cloud 数据库
BigQuery 文件夹
BigQuery Slot 预留和配额
权限
数据类型
INT64, NUMERIC, BIGNUMERIC and FLOAT64。相比之下,ClickHouse 为小数、浮点数和整数提供了多种精度类型。借助这些数据类型,你可以优化存储和内存开销,从而获得更快的查询速度并降低资源消耗。下面列出了每种 BigQuery 类型对应的 ClickHouse 等效类型:
查询加速技术
在 BigQuery 中,表可以具有主键和外键约束。通常,主键和外键用于关系型数据库中,以确保数据完整性。主键值通常对于每一行都是唯一的,且不为
NULL。每一行中的外键值都必须存在于主键表的主键列中,或者为 NULL。在 BigQuery 中,这些约束并不会被强制执行,但查询优化器可能会利用这些信息进一步优化查询。
在 ClickHouse 中,表也可以有主键。与 BigQuery 一样,ClickHouse 不会强制要求表的主键列值唯一。与 BigQuery 不同,表数据会按照主键列的顺序排序并存储在磁盘上。查询优化器会利用这种排序顺序来避免重新排序、尽量减少 join 的内存使用,并对 limit 子句启用短路。与 BigQuery 不同,ClickHouse 会根据主键列值自动创建 (稀疏) 主索引。该索引用于加速所有包含主键列过滤条件的查询。ClickHouse 当前不支持外键约束。
二级索引 (仅 ClickHouse 可用)
- Bloom Filter Index:
- 用于加速带有等值条件 (例如
=、IN) 的查询。 - 使用概率型数据结构来判断某个值是否存在于数据块中。
- 用于加速带有等值条件 (例如
- Token Bloom Filter Index:
- 与 Bloom Filter Index 类似,但用于分词后的字符串,适合全文搜索查询。
- Min-Max Index:
- 为每个数据分区片段维护某一列的最小值和最大值。
- 有助于跳过读取不在指定范围内的数据分区片段。
搜索索引
向量索引
分区
聚簇
Materialized views
查询 materialized view
事务
聚合函数
- BigQuery 提供了 18 个聚合函数 和 4 个近似聚合函数。
- ClickHouse 拥有超过 150 个预置聚合函数,以及强大的 聚合组合器,可用于扩展这些预置聚合函数的行为。比如,只需在调用时添加 -Array 后缀,就可以将这 150 多个预置聚合函数应用于数组,而不是表中的行。使用 -Map 后缀 时,你可以将任何聚合函数应用于 Map。使用 -ForEach 后缀 时,你可以将任何聚合函数应用于嵌套数组。
数据源和文件格式
- ClickHouse 原生支持从几乎任何数据源加载采用 90 多种文件格式的数据
- BigQuery 支持 5 种文件格式和 19 种数据源
SQL 语言特性
数组
groupArray 聚合函数,将表中特定的行值 (临时) 转换为数组。随后便可通过数组函数方便地处理该数组,再通过 arrayJoin 函数将结果重新转换为单独的表行。
由于 ClickHouse SQL 支持高阶 lambda 函数,许多高级数组操作只需调用某个高阶内置数组函数即可完成,而不必像 BigQuery 中通常需要的那样,先将数组临时转换回表,例如对数组进行过滤或压缩 (zip) 。在 ClickHouse 中,这些操作分别只需简单调用高阶函数 arrayFilter 和 arrayZip。
下面我们给出从 BigQuery 到 ClickHouse 的数组操作映射:
在子查询中为每一行创建一个仅包含单个元素的数组
BigQuery
ARRAY function
UNNEST 运算符
UNNEST 运算符将数组临时转换回表
UNNEST 运算符将数组临时还原为表
UNNEST 运算符将数组重新展开为表