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_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.

猜你喜欢

转载自blog.csdn.net/post_yuan/article/details/79914627