You need to enable JavaScript to run this app.
导航

hive 外表

最近更新时间2024.04.29 14:14:23

首次发布时间2024.04.29 14:14:23

ByteHouse 提供了多种方式来与外部系统集成,包括表引擎。像所有其他的表引擎一样,使用**CREATE TABLEALTER TABLE**查询语句来完成配置。然后从用户的角度来看,配置的集成看起来像查询一个正常的表,但对它的查询是代理给外部系统的。这种透明的查询是这种方法相对于其他集成方法的主要优势之一,比如外部字典或表函数,它们需要在每次使用时使用自定义查询方法。

要连接外部Hive外表数据,我们需要在ByteHouse中重建Hive外表,然后通过Hive引擎对Hive表执行 SELECT 查询。目前它支持如下输入格式:

  • ORC:支持简单的标量列类型,除了**char**; 只支持 array 这样的复杂类型
  • Parquet:支持所有简单标量列类型;只支持 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表结构有所不同:

  • 列名必须与原来的Hive表的列一致;
  • 列类型必须与原来的Hive表的列一致,具体请参考文末的 类型映射;
  • 列的顺序可以与原表不同;
  • 可以只选择hive表中的部分列,但分区列必须要全部包含;
  • “Partition by expression”应与原Hive表保持一致,“Partition by expression”中的列应在表结构中;
  • ENGINE指定为Hive或者HiveCluster。

引擎参数:

  • cluster name:集群名称(仅 HiveCluster 需要此字段)。
  • psm:hivemetastore psm地址,常见格式为thrift://host:port
  • hive_database_name:远程Hive数据库名。
  • hive_table_name:远程Hive数据表名,暂时不支持view/bucket 表。

查询表

通过SELECT 语句,查询创建的hive外表。SELECT 语句的具体可以参见 SQL 语法

select * from [db.]table_name  ... [SETTINGS ...]

在查询Hive外表时,有以下Setting项可选:

  • use_local_cache_for_remote_storage:是否开启disk cache,默认true。
  • enable_parquert_orc_split:是否按照固定size切分文件,默认false。
  • enable_optimizer:是否开启优化器。

其中 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)

大小写敏感、圆括号