CnchHive为Bytehouse团队提供的一种表引擎,支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接进行数据查询Hive中的数据。 从而提供了数据处理的灵活性和方便性。
外部表的功能旨在提供除ByteHouse内部表以外的其他数据的处理能力。通过一条简单的DDL语句,即可在ByteHouse上创建一张外部表,建立ByteHouse表与外部数据源的关联。
通过创建ByteHouse外部表,把对外部Hive表数据的描述引入到ByteHouse,即可实现对Hive数据的处理。
创建Hive外表时,您需指定关联的外表Hive库表信息,当前支持使用External Catalog的方式设置(下文的External Catalog,更推荐此种方式),或在建表DDL中直接指定(下文的通用建表DDL)。两种方式的建表DDL定义如下。
使用External Catalog时,您需要先创建一个External Catalog保存好对应参数,后续可以直接通过三段式 catalog.db.table 访问外表。
创建External Catalog。以下为Las Catalog使用的简单示例,更多External Catalog的介绍请参见Hive 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';
创建外表。
CREATE TABLE t Engine = CnchHive('thrift://host:port', 'hive_database_name', 'hive_table_name') SETTINGS cnch_vw_default ='your_vw'; DESCRIBE TABLE t;
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类型, 列类型映射规则见下文的 列类型映射 章节。 说明 创建Hive外表时,也可以指定列名和类型,以及分区键等描述( 不推荐)。指定时:
|
引擎参数(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写入数据为例:
注意
写入 LasFormation 表前请确认:
目前 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外表 CREATE TABLE t ( client_ip String, request String, status_code INT, object_size INT, date String ) ENGINE = CnchHive('psm', 'hive_database_name', 'hive_table_name') PARTITION BY date; --参数说明: --psm:hivemetastore psm --hive_database_name:hive表database name --hive_table_name:hive表table name --查询hive外表 select * from t where xxx;
CREATE TABLE t ( client_ip String, request String, device_id String, server_time String, date String ) ENGINE = CnchHive('psm', 'hive_database_name', 'hive_table_name') PARTITION BY date CLUSTER BY device_id INTO 65536 BUCKETS ORDER BY server_time SETTINGS cnch_vw_default ='your_vw' --参数说明: --psm:hivemetastore psm --hive_database_name:hive表database name --hive_table_name:hive表table name --查询hive外表 select * from t where xxx;
参数 | 配置说明 |
---|---|
建表描述 |
|
引擎参数(Engine) |
|
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 |
当查询报错时,可根据报错信息的关键词,参考下文排查处理。
关键词 | 解决方法 |
---|---|
DB::Exception: Can not insert NULL data into non-nullable column "name" | 列字段添加Nullable属性。 |
DB::Exception: The hive type is not match in cnch. | CnchHive schema type与Hive schema不匹配。 |
DB::Exception: column name xxx doesn't match. | CnchHive schema name与Hive schema不匹配。 |
DB::Exception: CnchHive only support parquet format. Current format is org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat. | CnchHive目前仅支持存储格式为Parquet。 |