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.endpoint='tos-s3-{REGION}.ivolces.com', aws.s3.access_key='AKLTMjNkMDRlMXXXXXXXXXXWUzZ******', aws.s3.secret_key='WVXXXXXXXXXXXXXXXXXX******', lf_metastore_ak_id='AKLTMjNkMDRlMXXXXXXXXXXWUzZ******', lf_metastore_ak_secret='WVXXXXXXXXXXXXXXXXXX******', lf_metastore_catalog='benchmark', lf_metastore_region='{REGION}', lf_metastore_url = 'thrift://lakeformation.las.{REGION}.ivolces.com:48869', type='lf';
参数 | 配置说明 |
---|---|
创建外部 catalog | 自定义 ByteHouse 中显示的外部 catalog 名称。 |
PROPERTIES 参数 | 定义了数据存储和元数据的连接信息。
|
本章节的示例使用 TOS 为存储介质,在通用建表 DDL 中直接指定 LAS 作为 Hive 外表,您可根据实际使用的存储服务和 Hive 外表信息替换示例中的参数。
CREATE DATABASE IF NOT EXISTS ext CREATE TABLE ext.las ENGINE = CnchHive('thrift://lakeformation.las.{REGION}.ivolces.com:48869', 'ssb100parquet', 'lineorder_flat') SETTINGS meta_type = 'lf', lf_metastore_catalog = 'benchmark', lf_metastore_region = '{REGION}', lf_metastore_ak_id = 'AKLTMjNkMDRlMXXXXXXXXXXWUzZ******', lf_metastore_ak_secret='WVXXXXXXXXXXXXXXXXXX******', lf_metastore_url = 'thrift://lakeformation.las.{REGION}.ivolces.com:48869', endpoint = 'tos-s3-{REGION}.ivolces.com', ak_id = 'AKLTMjNkMDRlMXXXXXXXXXXWUz******', ak_secret='WVXXXXXXXXXXXXXXXXXX******';
参数 | 配置说明 |
---|---|
建表描述 | 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'
。
BSP 模式可以进行任务级别的容错和更细粒度的调度,当 query 运行中遇到错误时,可以自动重试当前的任务,而不是从头进行重试,减少重试成本。同时,当 query 需要的内存巨大,甚至大于单机的内存时,可以通过增加并行度来减少单位时间内内存的占用。
您可以在查询时指定 settings 参数启用 BSP 模式,settings 参数说明如下:
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
bsp_mode | Bool | 0(关闭) | 设置为 1 表示启用 BSP 模式。启用 BSP 模式后,查询会分阶段执行。阶段之间会使用 shuffle 连接。在失败时会进行任务级别的重试。 |
distributed_max_parallel_size | UInt64 | 等于 worker 数量 | 当单个查询占用内存较大时,通过调大此参数可以增加算子的并行度,减少单个并行度处理数据的数量,减少单位时间内存使用量。必须在启用 bsp_mode 时, |
bsp_max_retry_num | UInt64 | 3 | 任务最大的重试次数。ByteHouse 从 2.0.4 版本开始支持设置 |
示例:
select * from t SETTINGS bsp_mode = 1, distributed_max_parallel_size = 4;
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);
向外表写入数据时,ByteHouse 也支持开启 BSP 模式,操作详情请参见开启 BSP 模式。
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 | 无 |