You need to enable JavaScript to run this app.
导航
Paimon 外表使用文档(Beta)
最近更新时间:2024.10.30 17:14:54首次发布时间:2024.10.30 17:14:54

Apache Paimon 是一种流批统一的湖存储格式,支持高吞吐的写入和低延迟的查询。
从 ByteHouse 企业版 2.7 版本开始,支持了与 Paimon 集成,可以关联查询 Paimon Database和 Paimon Table,并且在将来的版本中会逐步支持 Paimon 的写入。

功能概览

  • 支持读主键表、非主键表。
    • 已支持 HDFS Catalog、S3 Catalog。
    • 暂不支持 Hive Catalog。
  • 支持 Native Reader + Disk Cache。

使用限制

  • 暂不支持 Paimon 数据导入。
  • 暂不支持读 Snapshot。
  • 暂不支持数据库、数据表的 Alter 操作。
  • 复合类型不支持 Nullable。
  • Paimon 中的 Time类型,无法映射使用。

类型映射

以下是 Paimon 数据类型与 ByteHouse 数据类型的映射关系。

Paimon 类型

ByteHouse 类型

Boolean

UInt8

TinyInt

Int8

SmallInt

Int16

Int

Int32

BigInt

Int64

Float

Float32

Double

Float64

Date

Date32

Time

不支持

Timestamp

DateTime64

Char

FixedString

Varchar

String

Binary

FixedString

VarBinary

String

Decimal

Deciaml

Array

Array

Map

Map

Row

Tuple

ByteHouse 支持自动推导数据库表的列信息,并可以通过enable_schema_covert_fault_tolerance参数用于控制在 Paimon 无法兼容时是报错还是忽略。具体使用可参考下面的示例。

使用示例

关联数据表

我们可以在数据表维度建立 ByteHouse Table 到 Paimon Table 的映射。
Paimon 的数据可以存放在不同的文件系统上,例如 HDFS、S3。建表语句因文件系统和引擎的不同而有所差异。

Catalog HDFS

建表时可以指定列信息,也可以不指定列信息(自动推导列信息)。

  • 若指定列名,则要求所有列名在对应的Paimon表中都存在,并且类型等价或者兼容,否则会报错。
  • 若不指定列信息,则会自动推导对应的列信息。可以通过enable_schema_covert_fault_tolerance参数用于控制在 Paimon 无法兼容时,是报错还是忽略。1表示忽略;0表示报错;默认值是1

指定列信息

以下是指定列信息的 ByteHouse Table 到 Paimon Table 的映射示例。

CREATE TABLE `{tableName}` ON Cluster '{clusterName}' (
    `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 = PaimonCluster('{clusterName}', 'filesystem:HDFS', '{warehouse}', '{paimonDatabaseName}', '{paimonTableName}');

参数说明:

  • clusterName:ByteHouse 集群名称。
  • warehouse:HDFS 数据路径。如hdfs://haruna/home/byte_flink_test/table_store/bytehouse_test
  • paimonDatabaseName:Paimon 数据库名称。
  • paimonTableName:Paimon 数据表名称。

不指定列信息

以下是不指定列信息的 ByteHouse Table 到 Paimon Table 的映射示例,系统自动推导对应的列信息。

CREATE TABLE `{tableName}` ON Cluster '{clusterName}'
ENGINE = PaimonCluster('{clusterName}', 'filesystem:HDFS', '{warehouse}', '{paimonDatabaseName}', '{paimonTableName}')
SETTINGS enable_schema_covert_fault_tolerance = 0;

参数说明:

  • clusterName:ByteHouse 集群名称。
  • warehouse:HDFS 数据路径。如hdfs://haruna/home/byte_flink_test/table_store/bytehouse_test
  • paimonDatabaseName:Paimon 数据库名称。
  • paimonTableName:Paimon 数据表名称。

CatalogS3(TOS)

建表时可以指定列信息,也可以不指定列信息(自动推导列信息)。

  • 若指定列名,则要求所有列名在对应的Paimon表中都存在,并且类型等价或者兼容,否则会报错。
  • 若不指定列信息,则会自动推导对应的列信息。可以通过enable_schema_covert_fault_tolerance参数用于控制在 Paimon 无法兼容时,是报错还是忽略。1表示忽略;0表示报错;默认值是1

指定列信息

以下是指定列名的 ByteHouse Table 到 Paimon Table 的映射示例。

CREATE TABLE `{tableName}` ON Cluster '{clusterName}'(
    `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 = PaimonCluster('{clusterName}', 'filesystem:S3', '${warehouse}', '{paimonDatabaseName}', '{paimonTableName}')
SETTINGS region='{region}', 
endpoint='{endpoint}', 
ak_id='{accessKey}', 
ak_secret='{accessSecretKey}',
s3_use_virtual_hosted_style=false, -- 域内(字节云)tos填false,火山云tos填true
s3_extra_options='s3.paging.maximum=1000'; -- 域内(字节云)必须设置 s3.paging.maximum 这个参数,火山云可加可不加

参数说明:

  • clusterName:ByteHouse 集群名称。
  • warehouse:S3 数据路径。如s3://test-dev-hcf/paimon
  • paimonDatabaseName:Paimon 数据库名称。
  • paimonTableName:Paimon 数据表名称。
  • regionendpoint:TOS 支持的 Region 及 Endpoint 信息,请参见地域及访问域名
  • accessKeyaccessSecretKey:ToS 访问密钥(Access Key ID 和 Secret Access Key)信息,查看 AK 和 SK 信息的具体步骤,请参见查看 AKSK 信息
  • s3_use_virtual_hosted_style:域内(字节云)tos填false,火山云tos填true。

不指定列信息

以下是不指定列名的 ByteHouse Table 到 Paimon Table 的映射示例,系统自动推导对应的列信息。

CREATE TABLE `{tableName}` ON Cluster '{clusterName}'
ENGINE = PaimonCluster('{clusterName}', 'filesystem:S3', '${warehouse}', '{paimonDatabaseName}', '{paimonTableName}')
SETTINGS region='{region}', 
endpoint='{endpoint}', 
ak_id='{accessKey}', 
ak_secret='{accessSecretKey}',
s3_use_virtual_hosted_style=false, -- 域内(字节云)tos填false,火山云tos填true
s3_extra_options='s3.paging.maximum=1000', -- 域内(字节云)必须设置 s3.paging.maximum 这个参数,火山云可加可不加
enable_schema_covert_fault_tolerance = 0;

参数说明:

  • clusterName:ByteHouse 集群名称。
  • warehouse:S3 数据路径。如s3://test-dev-hcf/paimon
  • paimonDatabaseName:Paimon 数据库名称。
  • paimonTableName:Paimon 数据表名称。
  • regionendpoint:TOS 支持的 Region 及 Endpoint 信息,请参见地域及访问域名
  • accessKeyaccessSecretKey:ToS 访问密钥(Access Key ID 和 Secret Access Key)信息,查看 AK 和 SK 信息的具体步骤,请参见查看 AKSK 信息
  • s3_use_virtual_hosted_style:域内(字节云)tos填false,火山云tos填true。

关联数据库

除了直接关联数据表,我们也可以在数据库维度建立 ByteHouse Database到 Paimon Database 的映射,系统会自动推导和关联数据表信息。
当Paimon中的类型无法在ByteHouse 中找到兼容类型时,可以通过enable_schema_covert_fault_tolerance参数来控制报错还是忽略此问题。1表示忽略;0表示报错;默认值是1。当设置成0时,那些存在类型兼容问题的Table将无法展示出来。
Paimon 的数据可以存放在不同的文件系统上,例如 HDFS、S3。建库语句因文件系统和引擎的不同而有所差异。

Catalog HDFS

以下是 ByteHouse Database到 Paimon Database 的映射示例,系统自动推导对应的列信息。

CREATE DATABASE {databaseName} ON Cluster '{clusterName}'
engine = Paimon('{clusterName}', 'filesystem:HDFS', '{warehouse}', '{paimonDatabaseName}')
SETTINGS enable_schema_covert_fault_tolerance = 1;

参数说明:

  • clusterName:ByteHouse 集群名称。
  • warehouse:HDFS 数据路径。如hdfs://haruna/home/byte_flink_test/table_store/bytehouse_test
  • paimonDatabaseName:Paimon 数据库名称。
  • paimonTableName:Paimon 数据表名称。

Catalog S3(TOS)

以下是 ByteHouse Database到 Paimon Database 的映射示例,系统自动推导对应的列信息。

CREATE DATABASE {databaseName} ON Cluster '{clusterName}'
ENGINE = Paimon('{clusterName}', 'filesystem:S3', '{warehouse}', '{paimonDatabaseName}')
SETTINGS region='{region}', 
endpoint='{endpoint}', 
ak_id='{accessKey}', 
ak_secret='{accessSecretKey}',
s3_use_virtual_hosted_style=false, -- 域内(字节云)tos填false,火山云tos填true
s3_extra_options='s3.paging.maximum=1000'; -- 域内(字节云)必须设置 s3.paging.maximum 这个参数,火山云可加可不加

参数说明:

  • clusterName:ByteHouse集群名称。
  • warehouse:S3 数据路径。如s3://test-dev-hcf/paimon
  • paimonDatabaseName:Paimon 数据库名称。
  • paimonTableName:Paimon 数据表名称。
  • regionendpoint:TOS 支持的 Region 及 Endpoint 信息,请参见地域及访问域名
  • accessKeyaccessSecretKey:ToS 访问密钥(Access Key ID 和 Secret Access Key)信息,查看 AK 和 SK 信息的具体步骤,请参见查看 AKSK 信息
  • s3_use_virtual_hosted_style:域内(字节云)tos填false,火山云tos填true。