CnchHive 为 Bytehouse 团队提供的一种表引擎,支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接查询 Hive 外表中的数据,提升数据处理的灵活性和方便性。本文将介绍如何创建、查询和写入外表。
外表的功能旨在提供除 ByteHouse 内部表以外的其他数据的处理能力。通过一条简单的 DDL 语句,即可在 ByteHouse 上创建一张外表,建立 ByteHouse 表与外部数据源的关联。
在开始操作前,请确保您已经具备以下必要的权限和信息:
条件细分 | 说明 |
---|---|
数据访问权限 | 需获取 Hive 外表元数据及其使用的 S3 存储服务的访问权限。 |
访问密钥 | 需获取 Hive 外表元数据及其使用的 S3 存储服务的访问密钥。 |
地域及 endpoint 信息 | 需获取 Hive 外表元数据及其使用的 S3 存储服务的地域及 endpoint 信息。 |
Hive 外表元数据信息 | 需获取 Hive 外表的 catalog、数据库、表的名称。 |
通过创建 ByteHouse 外表,把 Hive 外表数据的描述引入到 ByteHouse,即可实现对 Hive 数据的处理。
创建 Hive 外表时,您需指定关联的 Hive 外表的库表信息,当前支持通过以下两种方式设置:
此方式引入了外部 Catalog,需要先创建一个外部 Catalog 并保存好对应连接参数,创建外表时只需指定引擎及计算组信息,后续访问外表时,可直接通过三段式 catalog.db.table 访问。
本章节创建的外部 Catalog 及外表使用火山引擎 AI 数据湖服务 LAS(Lake AI Service)为例,存储服务使用火山引擎对象存储 TOS( Torch Object Storage)为例。您可根据实际使用的存储介质和 Hive 外表信息替换示例中的参数。
说明
更多关于在 ByteHouse 中通过外表访问 LAS Catalog 的介绍请参见最佳实践:集成LAS Catalog数据。
创建 External Catalog。
CREATE EXTERNAL CATALOG `las_catalog` PROPERTIES aws.s3.access_key='AK', aws.s3.endpoint='tos-s3-cn-beijing.ivolces.com', aws.s3.secret_key='SK', lf_metastore_ak_id='AK', lf_metastore_ak_secret='SK', lf_metastore_catalog='LF_CATALOG_NAME', lf_metastore_region='cn-beijing', lf_metastore_url = 'thrift://las_formation_endpoint', type='lf';
参数 | 配置说明 |
---|---|
创建外部 catalog | 自定义 ByteHouse 中显示的外部 catalog 名称。 |
PROPERTIES 参数 | 定义了数据存储和元数据的连接信息。
|
创建外表。
CREATE TABLE t Engine = CnchHive('thrift://host:port', 'hive_database_name', 'hive_table_name') SETTINGS cnch_vw_default ='your_vw'; DESCRIBE TABLE t;
参数说明如下:
参数 | 配置说明 |
---|---|
建表描述 | Hive 表的列名和类型以及 Partition By key, Cluster By key 等信息将会在建表的时候自动推导建立。列默认建立 Nullable 类型, 列类型映射规则见下文的通用参考:列类型映射章节。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
本章节的示例使用 TOS 为存储介质,在通用建表 DDL 中直接指定 LAS 作为 Hive 外表,您可根据实际使用的存储服务和 Hive 外表信息替换示例中的参数。
CREATE TABLE t Engin = CnchHive('thrift://hive_metastore:port', 'hive_database_name', 'hive_table_name') SETTINGS endpoint = 'thrift://lakeformation.las.cn-beijing.ivolces.com:48869', region = 'cn-beijing', ak_id = 'AKLTMjU3ZTYzOG********yMGE0ZmJiZjc2ODkxZWMxY2Q', ak_secret = 'WlRkak56Ump**********sT0RCaU9UQm1NREV4WkRWaU1HWQ==', cnch_vw_default ='your_vw'; DESCRIBE TABLE t;
参数 | 配置说明 |
---|---|
建表描述 | Hive 表的列名和类型以及 Partition By key, Cluster By key 等信息将会在建表的时候自动推导建立。列默认建立 Nullable 类型, 列类型映射规则见下文的通用参考:列类型映射章节。 |
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
Hive 外表的查询和普通表的查询操作基本一致。例如:
Catalog 方式
select * from las_catalog.db.table where xxx;
通用方式
select * from t where xxx;
说明
如果您希望某次查询时关闭硬盘缓存,可在创建外表时设置 SETTINGS 参数,disk_cache_mode = 'SKIP_DISK_CACHE'
。
Hive 外表的写入和普通表的写入操作基本一致。以创建 LAS Catalog 后,向 LAS 外表写入数据为例:
注意
写入 LAS Formation 表前请确认:
目前 CDW 不支持未开通的 HNS 的 TOS Bucket 写入,更多关于 TOS Bucket 的 HNS 的介绍请参见 TOS 帮助文档。
Catalog 方式
insert into/overwrite las_catalog.db.table values (xxx); insert into/overwrite las_catalog.db.table select * from xxx settings enable_optimizer =1;
通用方式
insert into/overwrite db.t values (xxx);
Hive 列类型 | CnchHive 列类型 | 描述 |
---|---|---|
INT/INTERGER | Nullable INT/INTERGER | 无 |
BIGINT | Nullable BIGINT | 无 |
TIMESTAMP | Nullable DateTime | 无 |
STRING | Nullable String | 无 |
VARCHAR | Nullable FixedString | 内部转换为 FixedString |
CHAR | Nullable FixedString | 内部转换为 FixedString |
DOUBLE | Nullable DOUBLE | 无 |
FLOAT | Nullable FLOAT | 无 |
DECIMAL | Nullable DECIMAL | 无 |
MAP | Nullable Map | 无 |
ARRAY | Nullable Array | 无 |