ByteHouse 提供了多种方式来与外部系统集成,包括表引擎。像所有其他的表引擎一样,使用**CREATE TABLE
或ALTER TABLE
**查询语句来完成配置。然后从用户的角度来看,配置的集成看起来像查询一个正常的表,但对它的查询是代理给外部系统的。这种透明的查询是这种方法相对于其他集成方法的主要优势之一,比如外部字典或表函数,它们需要在每次使用时使用自定义查询方法。
要连接外部Hive外表数据,我们需要在ByteHouse中重建Hive外表,然后通过Hive引擎对Hive表执行 SELECT
查询。目前它支持如下输入格式:
char
**; 只支持 array
这样的复杂类型array
这样的复杂类型在ByteHouse中创建Hive外表,可以参考以下语法。
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [ALIAS expr1], name2 [type2] [ALIAS expr2], ... ) ENGINE = Hive('psm', 'database', 'table'); PARTITION BY expr
如果需要指定Hive的所在集群,则需要设置ENGINE = HiveCluster(),可以参考以下语法。
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [ALIAS expr1], name2 [type2] [ALIAS expr2], ... ) ENGINE = HiveCluster('cluster name', 'psm', 'database name', 'table name'); PARTITION BY expr
注意,创建表的结构可以与原来的Hive表结构有所不同:
引擎参数:
thrift://host:port
。通过SELECT 语句,查询创建的hive外表。SELECT 语句的具体可以参见 SQL 语法。
select * from [db.]table_name ... [SETTINGS ...]
在查询Hive外表时,有以下Setting项可选:
其中 use_local_cache_for_remote_storage 项默认开启,表示为远程文件系统启用了本地缓存,可以使得查询执行速度会更快。
--创建hive外表 CREATE TABLE hivetable ON CLUSTER ch_qa_cluster1 ( client_ip String, request String, status_code INT, object_size INT, date String ) ENGINE = HiveCluster('ch_qa_cluster1', 'thrift://localhost:9083', 'hive_database_name', 'hive_table_name') PARTITION BY date; --查询hive外表 select * from hivetable where xxx settings use_local_cache_for_remote_storage=true,enable_optimizer=true;
在创建外表的时候,可以参考以下类型映射表。
Hive 数据类型 | ByteHouse 数据类型 | 备注 |
---|---|---|
tinyint | Tinyint/Int8 | 大小写敏感 |
smallint | Smallint/Int16 | 大小写敏感 |
int | int | 大小写不敏感 |
int | Int32 | 大小写敏感 |
bigint | Int64 | 大小写敏感 |
float | Float32 | 大小写敏感 |
double | Float64 | 大小写敏感 |
bigint | Bigint | 大小写不敏感 |
string | String | 大小写敏感 |
varchar(N) | FixedString(N) | 大小写敏感 |
char(N) | FixedString(N) | 大小写敏感 |
binary | String | 大小写敏感 |
float | Float | 大小写不敏感 |
double | Double | 大小写不敏感 |
boolean | UInt8 | 大小写敏感 |
decimal(10,0) | Decimal(10,0) | 大小写不敏感 |
decimal(38,18) | Decimal(38,18) | 大小写不敏感 |
date | Date | 大小写不敏感 |
timestamp | DateTime | 大小写不敏感 |
array | Array(xxx) | 大小写敏感、圆括号 |
map<xxx, xxx> | Map(xxx, xxx) | 大小写敏感、圆括号 |