ByteHouse 云数仓版支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接进行通过 Paimon 外表查询 Paimon 中的数据,从而提供了数据处理的灵活性和方便性。本文将介绍如何在 ByteHouse 中使用 Paimon 外表。
对于 Paimon 数据表,当前 ByteHouse 支持创建 Paimon 外表、创建 Paimon 数据库、创建 Paimon 外部 Catalog 三种方式实现 ByteHouse 与 Paimon 的数据映射。
数据映射方式 | 数据映射说明 |
|---|---|
创建 Paimon 外部表 | 在表维度建立 ByteHouse 表到 Paimon 表的映射。源表 schema 变更不会直接同步,如果有变更,需删除 ByteHouse 中的外表重新创建一个外表。 |
创建 Paimon 外部数据库 | 在 Database 维度建立 ByteHouse Database 到 Paimon Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射,可以感知 Paimon 表的新增和删除,源表 schema 变更可直接同步至 ByteHouse 中。 |
创建 Paimon 外部 Catalog | 在数据目录(Catalog)唯独建立 ByteHouse Catalog 到 Paimon Catalog 的映射。建立 Catalog 映射之后不需要再手动建立库、表映射,可自动同步 Catalog 下的库、表映射,可以感知 Paimon 库、表的新增和删除,源表 schema 变更可直接同步至 ByteHouse 中。创建 Paimon 外部 Catalog 的操作详情请参见 Paimon Catalog。 |
外部表的功能旨在提供除 ByteHouse 内部表以外的其他数据的处理能力。通过一条简单的 DDL 语句,即可在 ByteHouse 上创建一张外部表,建立 ByteHouse 表与外部数据源的关联。
细分项 | 限制说明 |
|---|---|
Alter 操作 | 当前无法对 Bytehouse 外表,Bytehouse DB 进行 Alter 操作,例如,外表不支持增加列、删除列、改列名等操作;外部表数据库不支持 |
Time Travel | 目前的实现方式是将版本信息藏在 table 名称中,即
在 ByteHouse 中,
|
自动感知表结构变化 |
|
复杂数据类型 | 当前不支持复杂数据类型为 Nullable。 |
通过创建 ByteHouse 外部表,在表维度建立 ByteHouse 表到 Paimon 表的映射。Paimon 的数据可以存放在不同的分布式存储系统上,例如 HDFS、S3。下面具体介绍不同分布式存储系统上的建表语句:
创建外表时,您需指定关联的外表库表信息,当前支持指定外表的列信息,或不指定列信息通过自动推导获取对应的列信息。
enable_schema_covert_fault_tolerance参数控制自动推导类型不存在的处理方式,当 Paimon 中的类型无法在 Bytehouse 中找到兼容类型时:取值1表示忽略;0表示报错;默认值是1。CREATE TABLE `{tableName}` ( `col_boolean` BOOLEAN, `col_tinyint` Int8, `col_smallint` Int16, `col_int` Int32, `col_bigint` Int64, `col_float` Float32, `col_double` Float64, `col_decimal` DECIMAL(10, 2), `col_date` DATE32, `col_time` DateTime, `col_timestamp` DateTime64(6), `col_char` FixedString(10), `col_varchar` String, `col_binary` FixedString(50), `col_varbinary` String, `col_array_int` Array(Int32), `col_map` Map(String, Int32), `col_struct` Tuple(`field_smallint` Int16, `field_varchar` String, `field_time` DateTime, `field_decimal` DECIMAL(28, 6), `field_varbinary` String) ) ENGINE = CnchPaimon('filesystem', '{warehouse}', '{paimonDatabaseName}', '{paimonTableName}');
参数 | 配置说明 |
|---|---|
建表描述 | Paimon 表的列名和类型,列类型映射规则见下文的列数据类型映射章节。 说明 指定列名和类型,以及分区键等描述时:
|
引擎参数(Engine) |
|
CREATE TABLE `{tableName}` ENGINE = CnchPaimon('filesystem', '{warehouse}', '{paimonDatabaseName}', '{paimonTableName}') SETTINGS enable_schema_covert_fault_tolerance = 0;
参数 | 配置说明 |
|---|---|
建表描述 | tableName:外表名称。Paimon 表的列名和类型,以及 Partition By key,将会在建表的时候自动推导建立。列类型映射规则见下文的数据类型映射章节。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) | enable_schema_covert_fault_tolerance:控制自动推导类型不存在的处理方式。 |
CREATE TABLE `{tableName}` ( `col_boolean` BOOLEAN, `col_tinyint` Int8, `col_smallint` Int16, `col_int` Int32, `col_bigint` Int64, `col_float` Float32, `col_double` Float64, `col_decimal` DECIMAL(10, 2), `col_date` DATE32, `col_time` DateTime, `col_timestamp` DateTime64(6), `col_char` FixedString(10), `col_varchar` String, `col_binary` FixedString(50), `col_varbinary` String, `col_array_int` Array(Int32), `col_map` Map(String, Int32), `col_struct` Tuple(`field_smallint` Int16, `field_varchar` String, `field_time` DateTime, `field_decimal` DECIMAL(28, 6), `field_varbinary` String) ) ENGINE = CnchPaimon('filesystem', '${warehouse}', '{paimonDatabaseName}', '{paimonTableName}') SETTINGS endpoint='{endpoint}', ak_id='{accessKey}', ak_secret='{accessSecretKey}', s3_extra_options='fs.s3a.connection.maximum=1000';
参数 | 配置说明 |
|---|---|
建表描述 | Paimon 表的列名和类型,列类型映射规则见下文的列类型映射章节。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
S3 参数设置 | s3_extra_options:可选参数,用于设置 S3 调优参数,您可参考以下格式设置调优参数:
|
CREATE TABLE `{tableName}` ENGINE = CnchPaimon('filesystem', '${warehouse}', '{paimonDatabaseName}', '{paimonTableName}') SETTINGS endpoint='{endpoint}', ak_id='{accessKey}', ak_secret='{accessSecretKey}', s3_extra_options='fs.s3a.connection.maximum=1000', enable_schema_covert_fault_tolerance = 0;
参数 | 配置说明 |
|---|---|
建表描述 | 自定义 Paimon 外表名称。表的列名和类型,以及 Partition By key,将会在建表的时候自动推导建立。列类型映射规则见下文的列类型映射章节。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
S3 参数设置 | s3_extra_options:可选参数,用于设置 S3 调优参数,您可参考以下格式设置调优参数:
|
通过创建 ByteHouse 外部数据库,在 Database 维度建立 ByteHouse Database 到 Paimon Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射。
Paimon 的数据可以存放在不同的分布式存储系统上,例如 HDFS、S3。下面具体介绍不同分布式存储系统上的建表语句:
CREATE DATABASE {databaseName} ENGINE = Paimon('filesystem', '{warehouse}', '{paimonDatabaseName}') SETTINGS enable_schema_covert_fault_tolerance = 1;
参数 | 配置说明 |
|---|---|
数据库描述 | 自定义外部数据库名称。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
CREATE DATABASE {databaseName} ENGINE = Paimon('filesystem', '{warehouse}', '{paimonDatabaseName}') SETTINGS endpoint='{endpoint}', ak_id='{accessKey}', ak_secret='{accessSecretKey}', s3_extra_options='fs.s3a.connection.maximum=1000';
参数 | 配置说明 |
|---|---|
数据库描述 | 自定义外部数据库名称。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
S3 参数设置 | s3_extra_options:可选参数,用于设置 S3 调优参数,您可参考以下格式设置调优参数:
|
您可使用 INSERT INTO 或 INSERT OVERWRITE 方式写入外部表。
您可以使用基础的 INSERT INTO 语句写入数据。
# 方式 1 INSERT INTO database.table VALUES (val1, val2, ...), (val1, val2, ...), ...; # 方式 2 INSERT INTO database.table SELECT [col1, col2, ... | *] FROM source_db.source_table;
参数 | 配置说明 |
|---|---|
数据库及表描述 | database.table:指定需查询的数据库和表名称。如果您在执行该语句前,已执行 |
写入参数描述 |
|
该语句的功能是重写表。
# 方式 1 INSERT OVERWRITE database.table VALUES (val1, val2, ...), (val1, val2, ...), ...; # 方式 2 INSERT OVERWRITE database.table SELECT [col1, col2, ... | *] FROM source_db.source_table;
参数 | 配置说明 |
|---|---|
数据库及表描述 | database.table:指定需查询的数据库和表名称。如果您在执行该语句前,已执行 |
写入参数描述 |
|
外表的查询和普通表的查询操作一致。
SELECT * FROM t WHERE xxx;
外部库表的删除操作和普通表的删除操作一致。
删除外部数据库。
注意
删除外部数据库后,外部数据库下的所有外部表也将同时被删除,请谨慎操作。
DROP DATABASE example_db
删除外部数据表。
DROP TABLE example_db.example_table
-- 指定snapshotId=123456789 SELECT * FROM tbl$version$123456789; -- 指定branch名称=branch_1 SELECT * FROM tbl$version$branch_1; -- 指定tag名称=tag_1 SELECT * FROM tbl$version$tag_1;
以下为当前支持查询的所有 Paimon 表的元信息:
SELECT * FROM tbl$metadata$manifests; SELECT * FROM tbl$metadata$snapshots; SELECT * FROM tbl$metadata$options; SELECT * FROM tbl$metadata$schemas; SELECT * FROM tbl$metadata$partitions; SELECT * FROM tbl$metadata$audit_log; SELECT * FROM tbl$metadata$files; SELECT * FROM tbl$metadata$tags; SELECT * FROM tbl$metadata$branches; SELECT * FROM tbl$metadata$consumers; SELECT * FROM tbl$metadata$ro; SELECT * FROM tbl$metadata$aggregation_fields; SELECT * FROM tbl$metadata$statistics;
说明
您可以通过enable_schema_covert_fault_tolerance参数控制当映射数据的数据类型不支持时处理方式。当 Paimon 中的类型无法在 Bytehouse 中找到兼容类型时:取值1表示忽略;0表示报错;默认值是1。
Paimon 类型 | ByteHouse 类型 |
|---|---|
Boolean | UInt8 |
TinyInt | Int8 |
SmallInt | Int16 |
Int | Int32 |
BigInt | Int64 |
Float | Float32 |
Double | Float64 |
Date | Date32 |
Time | 不支持 |
Timestamp Wihtout TZ | DateTime64(UTC) |
Timestamp With Local TZ | DateTime64(local time zone) |
Char | FixedString |
Varchar | String |
Binary | FixedString |
VarBinary | String |
Decimal | Deciaml |
Array | Array |
Map | Map |
Row | Tuple |