跳到主要内容
版本:0.3.x

直接访问外部数据源

从Hive外表导入

CnchHive为ByConity提供的一种表引擎,支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接进行数据查询加速。

使用示例:

  • 实例 1:构建 hive 表的全集
--创建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;

  • 实例 2:构建 hive 表的子集
CREATE TABLE t
(
client_ip String,
request String,
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;

  • 实例 3:hive bucket 表构建
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 ='vw_default'

--参数说明:
--psm:hivemetastore psm
--hive_database_name:hive表database name
--hive_table_name:hive表table name

--查询hive外表
select * from t where xxx;

注意事项:

  • 外表列需要与 Hive 表一一对应,但列的顺序不需要。可以选择 Hive 表中的部分列,但分区列必须全部包含。
  • 分区需要通过 partition by 语句指定,并定义到描述列表中。对于 Bucket 表,需要指定分桶列和分桶数量。有 ORDER BY 字段时也需要指定。
  • ENGINE 指定为 CnchHive。参数包括:psm、hive_database_name 和 hive_table_name。不支持 view。
  • 这里有两个配置:cnch_vw_default:用于指定 vw,max_read_row_group_threads:用于指定并发读取 Parquet row group 的并发数量。
  • 支持的列类型的对应关系,如下表:
Hive列类型CnchHive列类型描述
INT/INTERGERINT/INTERGER
BIGINTBIGINT
TIMESTAMPDateTime
STRINGString
VARCHARFixedString内部转换为 FixedString
CHARFixedString内部转换为 FixedString
DOUBLEDOUBLE
FLOATFLOAT
DECIMALDECIMAL
MAPMap
ARRAYArray

说明:Hive 表 schema 变更不会自动同步,需要在 ClickHouse 中重建 Hive 外表。目前仅支持 Parquet 存储格式,不支持 insert 和 alter 操作。

参数设置

cnch_vw_default:用于指定 vw。

max_read_row_group_threads:用于指定并发读取 Parquet row group 的并发数量。