Bytehouse企业版支持使用外表的方式进行联邦查询,用户无需通过数据导入,可以直接进行数据查询Hive中的数据。 从而提供了数据处理的灵活性和方便性。本文为您介绍Hive外表的使用详情。
ByteHouse 提供了多种方式来与外部系统集成,包括表引擎。像所有其他的表引擎一样,使用CREATE TABLE
或ALTER TABLE
查询语句即可完成配置,从用户的角度来看,配置的集成看起来像查询一个正常的表,但实际上对它的查询是代理给外部系统的。这种透明的查询是外表的主要优势之一,比如外部字典或表函数,它们需要在每次使用时使用自定义查询方法。
说明
ByteHouse 企业版从 2.5 版本开始支持 Hive 外表功能。
SELECT
、ALERT
查询操作;且当前仅支持Hive表,不支持视图View、bucket表。char
之外的简单的标量列类型;复杂类型只支持 array
创建Hive外表时,ByteHouse为您提供了通用的建表DDL命令,此外,如果是集成LasFormation的Hive表,您也可以参考LasFormation集成方式进行外表创建,两种方式的介绍如下。
2.6及以上版本(推荐)
2.6及以上版本支持表结构自动推导,建表不需要指定列和分区键。
CREATE TABLE table_name [ON CLUSTER cluster] ENGINE = HiveCluster(cluster, 'thrift://host:port', 'hive_database_name', 'hive_table_name') SETTINGS endpoint = 'http://tos-s3-cn-beijing.ivolces.com', ak_id = 'access_key', ak_secret = 'secret_key' ;
参数 | 配置说明 |
---|---|
建表描述 | Hive表的列名和类型,以及Partition By key, Cluster By key,将会在建表的时候自动推导建立。列默认建立Nullable类型, 列类型映射规则见下文的 列类型映射 章节。 说明 创建Hive外表时,也可以指定列名和类型,以及分区键等描述( 不推荐)。指定时:
|
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
2.5版本
2.5版本不支持自动推导表结构,建表时需要指定列和分区键。
CREATE TABLE [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [ALIAS expr1], name2 [type2] [ALIAS expr2], ... ) ENGINE = HiveCluster(cluster, 'thrift://host:port', 'hive_database', 'hive_table'); PARTITION BY expr -- for hive table on S3 SETTINGS endpoint = 'http://tos-s3-cn-beijing.ivolces.com', ak_id = 'access_key', ak_secret = 'secret_key' ;
建表参数与上文类似。
如果您希望使用LasFormation集成,需先联系火山引擎技术支持人员,在部署时完成前期的环境配置等工作。完成后,后续才可使用LasFormation集成方式使用Hive外表。
create table las_t Engine = HiveCluster('cluster_name', 'cache_key', 'las_database','las_table') settings meta_type = 'lf', lf_metastore_url = 'las_addr', lf_metastore_ak_id = 'ak', lf_metastore_ak_secret = 'sk', lf_metastore_region = 'cn-beijing', endpoint = 'tos-s3-cn-beijing.ivolces.com', ak_id = 'ak', ak_secret = 'sk'
参数 | 配置说明 |
---|---|
建表描述 | Hive表的列名和类型,以及Partition By key, Cluster By key,将会在建表的时候自动推导建立。列默认建立Nullable类型, 列类型映射规则见下文的 列类型映射 章节。 说明 创建Hive外表时,也可以指定列名和类型,以及分区键等描述( 不推荐)。指定时:
|
引擎参数(Engine) |
|
设置参数(SETTINGS) |
|
使用LasFormation集成时,您也可以直接创建Hive库,创建完成后,外部hive数据库下的表会自动映射进来。建库DDL如下。
说明
仅ByteHouse 企业版2.7及以上版本支持创建Hive库。
CREATE DATABASE hive_db [ON CLUSTER cluster_name] ENGINE = Hive(cluster_name, 'thrift://host:port', 'hive_database') settings meta_type = 'lf', lf_metastore_url = 'las_addr', lf_metastore_ak_id = 'ak', lf_metastore_ak_secret = 'sk', lf_metastore_region = 'cn-beijing', endpoint = 'tos-s3-cn-beijing.ivolces.com', ak_id = 'ak', ak_secret = 'sk'
建表参数与上文类似,其中:
thrift://lakeformation.las.cn-beijing.ivolces.com:48869
,更多地域的连接地址信息可参见Las帮助文档。tos-s3-cn-beijing.ivolces.com
,更多地域的访问域名详情请参见TOS帮助文档。通过SELECT 语句,查询创建的hive外表。SELECT 语句的具体可以参见 SQL 语法。
select * from [db.]table_name ... [SETTINGS ...]
在查询Hive外表时,有以下Setting项可选:
其中 use_local_cache_for_remote_storage 项默认开启,表示为远程文件系统启用了本地缓存,可以使得查询执行速度会更快。
查看表schema
DESCRIBE TABLE table_name;
修改表schema
在Hive schema 变动后, 可以手动更新CE中表的Schema,以保持和变动后的Hive schema 同步。
ALTER TABLE table_name [ON CLUSTER cluster] REFRESH SCHEMA SETTINGS mutations_sync=1
通用DDL
--创建hive外表 CREATE TABLE hivetable ON CLUSTER ch_qa_cluster1 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;
LasFormation集成
create table las_t Engine = HiveCluster('cluster_name', 'cache_key', 'las_database','las_table') settings meta_type = 'lf', lf_metastore_url = 'las_addr', lf_metastore_ak_id = 'ak', lf_metastore_ak_secret = 'sk', lf_metastore_region = 'cn-beijing', endpoint = 'tos-s3-cn-beijing.ivolces.com', ak_id = 'ak', ak_secret = 'sk'
在创建外表的时候,可以参考以下类型映射表。
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 | 大小写敏感 |
boolean | UInt8 | 大小写敏感 |
decimal(P,S) | Decimal(P,S) | 大小写不敏感 |
date | Date | 大小写不敏感 |
timestamp | DateTime | 大小写不敏感 |
array | Array(xxx) | 大小写敏感、圆括号 |
map<xxx, xxx> | Map(xxx, xxx) | 大小写敏感、圆括号 |