ByteHouse 云数仓版支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接进行通过 Paimon 外表查询 Paimon 中的数据。从而提供了数据处理的灵活性和方便性。
外部表的功能旨在提供除 ByteHouse 内部表以外的其他数据的处理能力。通过一条简单的 DDL 语句,即可在 ByteHouse 上创建一张外部表,建立 ByteHouse 表与外部数据源的关联。
对于 Paimon 数据表,当前 ByteHouse 支持创建 Paimon 外表和创建 Paimon 数据库两种方式实现 ByteHouse 与 Paimon 的数据映射。
数据映射方式 | 数据映射说明 |
---|---|
创建 Paimon 外部表 | 在表维度建立 ByteHouse 表到 Paimon 表的映射。源表 schema 变更不会直接同步,如果有变更,需删除 ByteHouse 中的外表重新创建一个外表。 |
创建 Paimon 外部数据库 | 在 Database 维度建立 Bytehouse Database 到 Paimon Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射,可以感知 Paimon 表的新增和删除,源表 schema 变更可直接同步至 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:HDFS', '{warehouse}', '{paimonDatabaseName}', '{paimonTableName}');
参数 | 配置说明 |
---|---|
建表描述 | Paimon 表的列名和类型,列类型映射规则见下文的列类型映射章节。 说明 指定列名和类型,以及分区键等描述时:
|
引擎参数(Engine) |
|
CREATE TABLE `{tableName}` ENGINE = CnchPaimon('filesystem:HDFS', '{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:S3', '${warehouse}', '{paimonDatabaseName}', '{paimonTableName}') SETTINGS region='{region}', endpoint='{endpoint}', ak_id='{accessKey}', ak_secret='{accessSecretKey}', s3_extra_options='fs.s3a.connection.maximum=1000';
参数 | 配置说明 |
---|---|
建表描述 | Paimon 表的列名和类型,列类型映射规则见下文的列类型映射章节。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
S3 参数设置 |
|
CREATE TABLE `{tableName}` ENGINE = CnchPaimon('filesystem:S3', '${warehouse}', '{paimonDatabaseName}', '{paimonTableName}') SETTINGS region='{region}', 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 参数设置 |
|
通过创建 ByteHouse 外部数据库,在 Database 维度建立 Bytehouse Database 到 Paimon Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射。
Paimon 的数据可以存放在不同的分布式存储系统上,例如 HDFS、S3。下面具体介绍不同分布式存储系统上的建表语句:
CREATE DATABASE {databaseName} engine = Paimon('filesystem:HDFS', '{warehouse}', '{paimonDatabaseName}') SETTINGS enable_schema_covert_fault_tolerance = 1;
参数 | 配置说明 |
---|---|
数据库描述 | 自定义外部数据库名称。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
CREATE DATABASE {databaseName} ENGINE = Paimon('filesystem:S3', '{warehouse}', '{paimonDatabaseName}') SETTINGS enable_schema_covert_fault_tolerance = 1, region='{region}', endpoint='{endpoint}', ak_id='{accessKey}', ak_secret='{accessSecretKey}', s3_extra_options='fs.s3a.connection.maximum=1000';
参数 | 配置说明 |
---|---|
数据库描述 | 自定义外部数据库名称。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
S3 参数设置 | s3_extra_options:可选参数,用于设置 S3 调优参数,您可参考以下格式设置调优参数:
|
外表的查询和普通表的查询操作一致。
select * from t where xxx;
外部库表的删除操作和普通表的删除操作一致。
删除外部数据库。
注意
删除外部数据库后,外部数据库下的所有外部表也将同时被删除,请谨慎操作。
DROP DATABASE example_db
删除外部数据表。
DROP TABLE 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$branch_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 |