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;
okcreate 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.lazy******serde'
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:'
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.
Hive外表的使用
前言 hive建立關聯hbase表有2種形式,第一是建立hive內錶,指向hbase,第二是建立hive外表,引用hbase中已經存在的一張表 在hbase中建立表,建立乙個表名稱為hive hbase test,列族名稱為f的hbase表 create hive hbase test f 外hiv...
Hive建立內錶和外表的區別
內部表也稱為管理表或臨時表,hive控制著整個表的生命週期,預設存放目錄為 user hive warehouse,當刪除一張表的時候表中的資料也會相應的刪除。缺點 在實際開發中,內部表不方便和其他工作共享資料,hive在設計之初就不允許共享管理表中的資料,那應該如何來實現呢?hive提供了外部表。...
hive外表和事務表
建立外表 beeline u jdbc hive2 n hdfs t location tmp nj12345 case info 建立事務表 clustered by case serial into 250 buckets stored as orc insert insto orc事務表 se...