EsgynDB 创建Hive外表
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_HIVE和HIVESTATS,他们就是分别用来保存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
相关文章