Hive 表引擎
Hive 引擎允许对 HDFS 中的 Hive 表执行 SELECT 查询。目前支持的输入格式如下:
-
Text:仅支持除
binary外的简单标量列类型 -
ORC:支持除
char外的简单标量列类型;复杂类型仅支持array等 -
Parquet:支持所有简单标量列类型;复杂类型仅支持
array等
创建表
参阅 CREATE TABLE 查询的详细说明。
表结构可以与原始 Hive 表结构不同:
- 列名应与原始 Hive 表中的列名相同,但可以只使用其中部分列,顺序任意;也可以使用由其他列计算得到的别名列。
- 列类型必须与原始 Hive 表中的列类型相同。
- 分区表达式应与原始 Hive 表保持一致,且分区表达式中使用的列必须在表结构中定义。
Engine 参数
-
thrift://host:port— Hive Metastore 地址 -
database— 远程数据库名称。 -
table— 远程表名称。
使用示例
如何在 HDFS 文件系统中使用本地缓存
我们强烈建议为远程文件系统启用本地缓存。基准测试结果表明,启用缓存后速度几乎提升 2 倍。
在使用缓存之前,请先在 config.xml 中添加相应配置
- enable: 当为 true 时,ClickHouse 在启动后会为远程文件系统(HDFS)维护本地缓存。
- root_dir: 必需。用于存储远程文件系统本地缓存文件的根目录。
- limit_size: 必需。本地缓存文件的最大大小(以字节为单位)。
- bytes_read_before_flush: 控制从远程文件系统下载文件时,在刷新到本地文件系统之前读取的字节数。默认值为 1MB。
使用 ORC 输入格式查询 Hive 表
在 Hive 中创建表
在 ClickHouse 中创建表
ClickHouse 中的一个表,用于从上面创建的 Hive 表中读取数据:
使用 Parquet 输入格式查询 Hive 表
在 Hive 中创建表
hive > insert into test.test_parquet partition(day='2021-09-18') select 1, 2, 3, 4, 5, 6.11, 7.22, 8.333, current_timestamp(), current_date(), 'hello world', 'hello world', 'hello world', true, 'hello world', array(1, 2, 3), array('hello world', 'hello world'), array(float(1.1), float(1.2)), array(array(1, 2), array(3, 4)), array(array('a', 'b'), array('c', 'd')), array(array(float(1.11), float(2.22)), array(float(3.33), float(4.44))); OK 耗时:36.025 秒
hive > select * from test.test_parquet; OK 1 2 3 4 5 6.11 7.22 8 2021-12-14 17:54:56.743 2021-12-14 hello world hello world hello world true hello world [1,2,3] ["hello world","hello world"] [1.1,1.2] [[1,2],[3,4]] [["a","b"],["c","d"]] [[1.11,2.22],[3.33,4.44]] 2021-09-18 耗时:0.766 秒,获取:1 行记录
使用 Text 输入格式查询 Hive 表
在 Hive 中创建表
在 ClickHouse 中创建表
在 ClickHouse 中创建一个表,用于从上述创建的 Hive 表中读取数据:
第 1 行: ────── f_tinyint: 1 f_smallint: 2 f_int: 3 f_integer: 4 f_bigint: 5 f_float: 6.11 f_double: 7.22 f_decimal: 8 f_timestamp: 2021-12-14 18:11:17 f_date: 2021-12-14 f_string: hello world f_varchar: hello world f_char: hello world f_bool: true day: 2021-09-18