EsgynDB 创建Hive外表

2022-05-27 00:00:00 创建 字段 执行 统计信息 外表

EsgynDB支持直接读取Hive Metadata访问Hive原生表,从而绕过了Hive自身需要经过Map Reduce的动作而减少延迟。一般情况下,使用EsgynDB的SQL引擎去访问Hive原生表比使用Hive本身的Map Reduce方式的性能要高出很多倍。

从EsgynDB执行对Hive原生表的访问时,也涉及到执行计划是否优化的问题,执行计划是否正确依赖于对Hive表的统计信息的正确性,因此一般情况下我们也需要对Hive做更新统计信息的动作,以保证执行计划的有效性。

然而,很多时候Hive原生表的字段定义并不是很具体,很多字段类型可能直接用String类型定义,String类型字段对于Trafodion而言被认为是一个很大的字符串,因而可能会影响更新统计信息的执行效率和性能。

EsgynDB支持对Hive原生表建立相应的外部表,外部表的表结构等信息存储在EsgynDB中,统计信息也将存储于EsgynDB中。

下面我们简单介绍一个创建Hive外表的事例,假如有Hive原生表如下,

hive> show create table JT_DW_D_DOM_USER;
OK
CREATE TABLE `JT_DW_D_DOM_USER`(
`device_number` string,
`lac` string,
`cell_id` string)
COMMENT '号码居住地明细'
PARTITIONED BY (
`month_part` string COMMENT '月分区',
`day_part` string COMMENT '日分区')
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'field.delim'=',',
'serialization.format'=',',
'serialization.null.format'='')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://hadoop3.esgyn.cn:8020/user/hive/warehouse/ga.db/jt_dw_d_dom_user'
TBLPROPERTIES (
'transient_lastDdlTime'='1522699019')

从EsgynDB中创建对应外部表并更新统计信息, 

create external table JT_DW_D_DOM_USER(
device_number varchar(30),
lac varchar(30),
cell_id varchar(10),
month_part varchar(10),
day_part varchar(10)
) for hive.hive.JT_DW_D_DOM_USER;
update statistics for table hive.hive.JT_DW_D_DOM_USER on every column sample;

注:创建Hive外表部的语法为, 

create external table table_name (
...)
for hive.schema_name.table_name;

那么我们创建的Hive外表结构和统计信息保存在哪里呢? 

>>get schemas;

Schemas in Catalog TRAFODION
============================

SEABASE
_HIVESTATS_
_HV_HIVE_
_LIBMGR_
_MD_
_REPOS_

通过”get schemas”我们看到有两个模式HV_HIVEHIVESTATS,他们就是分别用来保存Hive外表和统计信息的schema。 

>>set schema "_HV_HIVE_";

--- SQL operation complete.
>>get tables;

Tables in Schema TRAFODION._HV_HIVE_
====================================
JT_DW_D_DOM_USER
>>showddl hive.hive.JT_DW_D_DOM_USER;

/* Hive DDL */
CREATE TABLE DEFAULT.JT_DW_D_DOM_USER
(
DEVICE_NUMBER string
, LAC string
, CELL_ID string
)
PARTITIONED BY (MONTH_PART string,DAY_PART string)
stored as textfile
;

/* Trafodion DDL */

REGISTER /*INTERNAL*/ HIVE TABLE HIVE.HIVE.JT_DW_D_DOM_USER;
/* ObjectUID = 3405442207697893392 */

CREATE EXTERNAL TABLE JT_DW_D_DOM_USER
(
DEVICE_NUMBER VARCHAR(30) CHARACTER SET ISO88591 COLLATE
DEFAULT DEFAULT NULL NOT SERIALIZED
, LAC VARCHAR(30) CHARACTER SET ISO88591 COLLATE
DEFAULT DEFAULT NULL NOT SERIALIZED
, CELL_ID VARCHAR(10) CHARACTER SET ISO88591 COLLATE
DEFAULT DEFAULT NULL NOT SERIALIZED
, MONTH_PART VARCHAR(10) CHARACTER SET ISO88591 COLLATE
DEFAULT DEFAULT NULL NOT SERIALIZED
, DAY_PART VARCHAR(10) CHARACTER SET ISO88591 COLLATE
DEFAULT DEFAULT NULL NOT SERIALIZED
)
FOR HIVE.HIVE.JT_DW_D_DOM_USER
;

--- SQL operation complete.
>>set schema "_HIVESTATS_";

--- SQL operation complete.
>>get tables;

Tables in Schema TRAFODION._HIVESTATS_
======================================

SB_HISTOGRAMS
SB_HISTOGRAM_INTERVALS
SB_PERSISTENT_SAMPLES

--- SQL operation complete.


 


原文链接:https://blog.csdn.net/Post_Yuan/article/details/79914627

相关文章