Hive元數(shù)據(jù)是什么吴汪?
元數(shù)據(jù),即解釋數(shù)據(jù)的數(shù)據(jù)蒸眠。在Hive架構(gòu)中漾橙,數(shù)據(jù)庫/表內(nèi)實際數(shù)據(jù)存放在HDFS之類的分布式存儲系統(tǒng)中,但這些數(shù)據(jù)并不帶有數(shù)據(jù)庫/表/字段之類的描述信息楞卡,這些信息均由單獨(dú)的關(guān)系型數(shù)據(jù)庫維護(hù)(一般用MySQL)霜运。
在安裝Hive時,需要在hive-site.xml文件中配置元數(shù)據(jù)相關(guān)信息臀晃。若不配置默認(rèn)使用Hive自帶的Derby數(shù)據(jù)庫觉渴,但這個數(shù)據(jù)庫是單session的,不便于使用徽惋。
hive-site.xml配置元數(shù)據(jù)庫可參見官網(wǎng)文檔:https://cwiki.apache.org/confluence/display/Hive/AdminManual+metastore+Administration
Hive元數(shù)據(jù)庫表描述
1.1 存儲Hive版本的元數(shù)據(jù)表(VERSION)
1.1.1 VERSION
該表比較簡單案淋,但很重要。
VER_ID | SCHEMA_VERSION | VERSION_COMMENT |
---|---|---|
ID主鍵 | Hive版本 | 版本說明 |
1 | 0.13.0 | Set by MetaStore |
如果該表出現(xiàn)問題险绘,根本進(jìn)入不了Hive-Cli踢京。
比如該表不存在誉碴,當(dāng)啟動Hive-Cli時候,就會報錯”Table ‘hive.version’ doesn’t exist”瓣距。
1.2 Hive數(shù)據(jù)庫相關(guān)的元數(shù)據(jù)表(DBS黔帕、DATABASE_PARAMS)
1.2.1 DBS
該表存儲Hive中所有數(shù)據(jù)庫的基本信息,字段如下:
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
DB_ID | 數(shù)據(jù)庫ID | 2 |
DESC | 數(shù)據(jù)庫描述 | 測試庫 |
DB_LOCATION_URI | 數(shù)據(jù)庫HDFS路徑 | hdfs://namenode/user/hive/warehouse/lyg1234.db |
NAME | 數(shù)據(jù)庫名 | lyg1234 |
OWNER_NAME | 數(shù)據(jù)庫所有者用戶名 | lyg1234 |
OWNER_TYPE | 所有者角色 | USER |
1.2.2 DATABASE_PARAMS
該表存儲數(shù)據(jù)庫的相關(guān)參數(shù)蹈丸,在CREATE DATABASE(創(chuàng)建數(shù)據(jù)庫)時候用
WITH DBPROPERTIES (property_name=property_value, …)指定的參數(shù)成黄。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
DB_ID | 數(shù)據(jù)庫ID | 2 |
PARAM_KEY | 參數(shù)名 | createdby |
PARAM_VALUE | 參數(shù)值 | lyg1234 |
DBS和DATABASE_PARAMS這兩張表通過DB_ID字段關(guān)聯(lián)。
提示:一般以DBS為主表逻杖,DATABASE_PARAMS為右表奋岁,因為不是所有的數(shù)據(jù)庫都有參數(shù)
1.3 Hive表和視圖相關(guān)的元數(shù)據(jù)表
主要有TBLS、TABLE_PARAMS荸百、TBL_PRIVS闻伶,這三張表通過TBL_ID關(guān)聯(lián)。
1.3.1 TBLS
該表中存儲Hive表够话、視圖蓝翰、索引表的基本信息。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
TBL_ID | 表ID | 1 |
CREATE_TIME | 創(chuàng)建時間(時間戳) | 1436317071 |
DB_ID | 數(shù)據(jù)庫ID | 2女嘲,對應(yīng)DBS中的DB_ID |
LAST_ACCESS_TIME | 上次訪問時間 | 1436317071 |
OWNER | 所有者 | USER |
RETENTION | 保留字段 | 0 |
SD_ID | 序列化配置信息 | 86畜份,對應(yīng)SDS表中的SD_ID |
TBL_NAME | 表名 | lyg1234 |
TBL_TYPE | 表類型 | MANAGED_TABLE(內(nèi)部表)、EXTERNAL_TABLE(外部表)澡为、INDEX_TABLE(索引表)漂坏、VIRTUAL_VIEW(視圖) |
VIEW_EXPANDED_TEXT | 視圖的詳細(xì)HQL語句 | select lyg1234 .pt , lyg1234 .pcid from liuxiaowen .lyg1234
|
VIEW_ORIGINAL_TEXT | 視圖的原始HQL語句 | select * from lyg1234 |
在Hive上有兩種類型的表,一種是Managed Table(內(nèi)部表)媒至,另一種是External Table(外部表)。它倆的主要區(qū)別在于:當(dāng)我們drop表時谷徙,Managed Table會同時刪去data和meta data拒啰,而External Table只會刪meta data。
1.3.2 TABLE_PARAMS
該表存儲表/視圖的屬性信息完慧。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
TBL_ID | 表ID | 1 |
PARAM_KEY | 屬性名 | totalSize谋旦、numRows、EXTERNAL |
PARAM_VALUE | 屬性值 | 970107336屈尼、21231028册着、TRUE |
1.3.3TBL_PRIVS
該表存儲表/視圖的授權(quán)信息
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
TBL_GRANT_ID | 授權(quán)ID | 1 |
CREATE_TIME | 授權(quán)時間 | 1436320455 |
GRANT_OPTION | 0 | |
GRANTOR | 授權(quán)執(zhí)行用戶 | liuxiaowen |
GRANTOR_TYPE | 授權(quán)者類型 | USER |
PRINCIPAL_NAME | 被授權(quán)用戶 | username |
PRINCIPAL_TYPE | 被授權(quán)用戶類型 | USER |
TBL_PRIV | 權(quán)限 | Select、Alter |
TBL_ID | 表ID | 22脾歧,對應(yīng)TBLS表中的TBL_ID |
1.4 Hive文件存儲信息相關(guān)的元數(shù)據(jù)表
主要涉及SDS(保存文件存儲的基本信息)甲捏、SD_PARAMS(存儲Hive存儲的屬性信息)、SERDES(存儲序列化使用的類信息)鞭执、SERDE_PARAMS(存儲序列化使用的類信息)
由于HDFS支持的文件格式很多司顿,而建Hive表時候也可以指定各種文件格式芒粹,Hive在將HQL解析成MapReduce時候,需要知道去哪里大溜,使用哪種格式去讀寫HDFS文件化漆,而這些信息就保存在這幾張表中。
1.4.1 SDS
該表保存文件存儲的基本信息钦奋,如INPUT_FORMAT(文件輸入格式)座云、OUTPUT_FORMAT(輸出格式)、是否壓縮等付材。
TBLS表中的SD_ID與該表關(guān)聯(lián)疙教,可以獲取Hive表的存儲信息。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
SD_ID | 存儲信息ID | 1 |
CD_ID | 字段信息ID | 21伞租,對應(yīng)COLUMNS_V2表 |
INPUT_FORMAT | 文件輸入格式 | org.apache.hadoop.mapred.TextInputFormat |
IS_COMPRESSED | 是否壓縮 | 0 |
IS_STOREDASSUBDIRECTORIES | 是否以子目錄存儲 | 0 |
LOCATION | HDFS路徑 | hdfs://namenode/hivedata/warehouse/ut.db/t_lyg |
NUM_BUCKETS | 分桶數(shù)量 | 5 |
OUTPUT_FORMAT | 文件輸出格式 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
SERDE_ID | 序列化類ID | 3贞谓,對應(yīng)SERDES表 |
1.4.2 SD_PARAMS
該表存儲Hive存儲的屬性信息,在創(chuàng)建表時候使用
STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定葵诈。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
SD_ID | 存儲配置ID | 1 |
PARAM_KEY | 存儲屬性名 | |
PARAM_VALUE | 存儲屬性值 |
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
SD_ID | 存儲配置ID | 1 |
PARAM_KEY | 存儲屬性名 | |
PARAM_VALUE | 存儲屬性值 |
1.4.3 SERDES
該表存儲序列化使用的類信息
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
SERDE_ID | 序列化類配置ID | 1 |
NAME | 序列化類別名 | |
SLIB | 序列化類 | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
1.4.4 SERDE_PARAMS
該表存儲序列化的一些屬性裸弦、格式信息,比如:行、列分隔符
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
SERDE_ID | 序列化類配置ID | 1 |
PARAM_KEY | 屬性名 | field.delim |
PARAM_VALUE | 屬性值 | , |
SDS 表的CD_ID(字段信息ID)對應(yīng)CDS表CD_ID(字段信息ID)
SDS 表的SERDE_ID(序列化類ID)對應(yīng)SERDES 表SERDE_ID(序列化類配置ID )查找表的序列化信息
SDS 表的 SD_ID(存儲信息ID )對應(yīng) SD_PARAMS 表 SD_ID(存儲配置ID ) 查找表的屬性信息
SERDES 表的 SERDE_ID(序列化類配置ID )對應(yīng) SERDE_PARAMS表 SERDE_ID(序列化類配置ID ) 查找表的存儲序列化的一些屬性作喘、格式信息,比如:行理疙、列分隔符
SDS表的 CD_ID(字段信息ID)對應(yīng) COLUMNS_V2 表 CD_ID(字段信息ID ) 查找表的字段信息
1.5 Hive表字段相關(guān)的元數(shù)據(jù)表
主要涉及COLUMNS_V2
1.5.1 COLUMNS_V2
該表存儲表對應(yīng)的字段信息。 關(guān)于中文亂碼問題
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
CD_ID | 字段信息ID | 1 |
COMMENT | 字段注釋 | |
COLUMN_NAME | 字段名 | pt |
TYPE_NAME | 字段類型 | string |
INTEGER_IDX | 字段順序 | 2 |
COLUMNS_V2(存儲表對應(yīng)的字段信息):通過CD_ID和其他字段建立關(guān)系
1.6 Hive表分區(qū)相關(guān)的元數(shù)據(jù)表
主要涉及PARTITIONS(存儲表分區(qū)的基本信息)泞坦、PARTITION_KEYS(存儲分區(qū)的字段信息)窖贤、PARTITION_KEY_VALS(存儲分區(qū)字段值)、PARTITION_PARAMS(存儲分區(qū)的屬性信息)
1.6.1 PARTITIONS
該表存儲表分區(qū)的基本信息贰锁。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
PART_ID | 分區(qū)ID | 1 |
CREATE_TIME | 分區(qū)創(chuàng)建時間 | |
LAST_ACCESS_TIME | 最后一次訪問時間 | |
PART_NAME | 分區(qū)名 | pt=2015-06-12 |
SD_ID | 分區(qū)存儲ID | 21 |
TBL_ID | 表ID | 2 |
1.6.2PARTITION_KEYS
該表存儲分區(qū)的字段信息赃梧。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
TBL_ID | 表ID | 2 |
PKEY_COMMENT | 分區(qū)字段說明 | |
PKEY_NAME | 分區(qū)字段名 | pt |
PKEY_TYPE | 分區(qū)字段類型 | string |
INTEGER_IDX | 分區(qū)字段順序 | 1 |
表PARTITION_KEYS通過 TBL_ID(表ID )和TBLS (表的基本信息)TBL_ID(表ID )進(jìn)行關(guān)聯(lián)
1.6.3 PARTITION_KEY_VALS
該表存儲分區(qū)字段值。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
PART_ID | 分區(qū)ID | 2 |
PART_KEY_VAL | 分區(qū)字段值 | 2015-06-12 |
INTEGER_IDX | 分區(qū)字段值順序 | 0 |
1.6.4 PARTITION_PARAMS
該表存儲分區(qū)的屬性信息豌熄。
元數(shù)據(jù)表字段 | 說明 | 示例數(shù)據(jù) |
---|---|---|
PART_ID | 分區(qū)ID | 2 |
PARAM_KEY | 分區(qū)屬性名 | numFiles授嘀、numRows |
PARAM_VALUE | 分區(qū)屬性值 | 15、502195 |
表之間的關(guān)系:
PARTITIONS(存儲表分區(qū)的基本信息) 的PART_ID(分區(qū)ID)锣险、SD_ID(分區(qū)存儲ID )蹄皱、TBL_ID(表ID)和其他表相關(guān)聯(lián)
PARTITION_KEYS(該表存儲分區(qū)的字段信息) 的TBL_ID(表ID)和其他表相關(guān)聯(lián)
PARTITION_KEY_VALS(該表存儲分區(qū)字段值)通過 PART_ID(分區(qū)ID)和其他表相關(guān)聯(lián)
PARTITION_PARAMS(該表存儲分區(qū)的屬性信息)通過 PART_ID(分區(qū)ID)和其他表相關(guān)聯(lián)
1.7 其他不常用的元數(shù)據(jù)表
1.7.1 DB_PRIVS
數(shù)據(jù)庫權(quán)限信息表。通過GRANT語句對數(shù)據(jù)庫授權(quán)后芯肤,將會在這里存儲巷折。
1.7.2 IDXS
索引表,存儲Hive索引相關(guān)的元數(shù)據(jù)
1.7.3 INDEX_PARAMS
索引相關(guān)的屬性信息崖咨。
1.7.4 TAB_COL_STATS
表字段的統(tǒng)計信息锻拘。使用ANALYZE語句對表字段分析后記錄在這里。
1.7.5 TBL_COL_PRIVS
表字段的授權(quán)信息
1.7.6 PART_PRIVS
分區(qū)的授權(quán)信息
1.7.7 PART_COL_STATS
分區(qū)字段的統(tǒng)計信息掩幢。
1.7.8 PART_COL_PRIVS
分區(qū)字段的權(quán)限信息逊拍。
1.7.9 FUNCS
用戶注冊的函數(shù)信息
1.7.10 FUNC_RU
用戶注冊函數(shù)的資源信息
2 示例
建表語句:
CREATE TABLE lyg1234 (
cookieid STRING,
url STRING,
ua STRING,
ip STRING,
createtime STRING
) COMMENT 'This is the page view table'
partitioned BY (day STRING,site STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
stored AS ORC;
建表執(zhí)行之后上鞠,元數(shù)據(jù)中以下表的數(shù)據(jù)會有所變化:
- TBLS
生成了表lyg1234的基本信息
SELECT * FROM TBLS WHERE TBL_NAME = ‘lyg1234’;
元數(shù)據(jù)表字段 | 數(shù)據(jù) |
---|---|
TBL_ID | 41509 |
CREATE_TIME | 1436324659 |
DB_ID | 11 |
LAST_ACCESS_TIME | 0 |
OWNER | liuxiaowen |
RETENTION | 0 |
SD_ID | 91740 |
TBL_NAME | lyg1234 |
TBL_TYPE | MANAGED_TABLE |
VIEW_EXPANDED_TEXT | NULL |
VIEW_ORIGINAL_TEXT | NULL |
- TABLE_PARAMS
select * from TABLE_PARAMS WHERE TBL_ID=41509
TBL_ID | PARAM_KEY | PARAM_VALUE |
---|---|---|
41509 | comment | This is the page view table |
41509 | transient_lastDdlTime | 1436324659 |
- SDS
SELECT * FROM SDS WHERE SD_ID = 91740
元數(shù)據(jù)表字段 | 數(shù)據(jù) |
---|---|
SD_ID | 91740 |
CD_ID | 41564 |
INPUT_FORMAT | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat |
IS_COMPRESSED | 0 |
IS_STOREDASSUBDIRECTORIES | 0 |
LOCATION | hdfs://namenode/hivedata/warehouse/liuxiaowen.db/lyg1234 |
NUM_BUCKETS | -1 |
OUTPUT_FORMAT | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat |
SERDE_ID | 91740 |
- SERDES
select * from SERDES WHERE SERDE_ID = 91740
元數(shù)據(jù)表字段 | 數(shù)據(jù) |
---|---|
SERDE_ID | 91740 |
NAME | |
SLIB | org.apache.hadoop.hive.ql.io.orc.OrcSerde |
- SERDE_PARAMS
select * from SERDE_PARAMS WHERE SERDE_ID=91740
SERDE_ID | PARAM_KEY | PARAM_VALUE |
---|---|---|
91740 | field.delim | , |
91740 | serialization.format | , |
- COLUMNS_V2
select * from COLUMNS_V2 WHERE CD_ID=41564 ORDER BY INTEGER_IDX
CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
---|---|---|---|---|
41564 | cookieid | string | 0 | |
41564 | url | string | 1 | |
41564 | ua | string | 2 | |
41564 | ip | string | 3 | |
41564 | createtime | string | 4 |
- PARTITION_KEYS
select * from PARTITION_KEYS WHERE TBL_ID=41509
TBL_ID | PKEY_COMMENT | PKEY_NAME | PKEY_TYPE | INTEGER_IDX |
---|---|---|---|---|
41509 | day | string | 0 | |
41509 | site | string | 1 |
再插入數(shù)據(jù):
<pre class="md-fences md-end-block" lang="" contenteditable="false" cid="n791" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, "Liberation Mono", Courier, monospace; font-size: 0.9em; white-space: pre; text-align: left; break-inside: avoid; display: block; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">
INSERT OVERWRITE TABLE lyg1234 PARTITION (day = '2015-07-08', site = 'lyg1234.com') SELECT 'cookie1' AS cookieid,'http://lyg1234.com' AS url,'firefox' AS ua,'127.0.0.1' AS ip,'2015-07-08 11:00:01' AS createtime FROM dual limit 1; </pre>
插入數(shù)據(jù)執(zhí)行完之后,以下表的元數(shù)據(jù)發(fā)生變化:
- PARTITIONS
select * from PARTITIONS
WHERE TBL_ID=41509
PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |
---|---|---|---|---|---|
54472 | 1436325812 | 0 | day=2015-07-08/site=lyg1234.com | 91746 | 41509 |
- SDS
select * from SDS WHERE SD_ID=91746
注意:這里的存儲和表的存儲是不同的芯丧,因為每個分區(qū)也會有一個SD
元數(shù)據(jù)表字段 | 數(shù)據(jù) |
---|---|
SD_ID | 91746 |
CD_ID | 41564 |
INPUT_FORMAT | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat |
IS_COMPRESSED | 0 |
IS_STOREDASSUBDIRECTORIES | 0 |
LOCATION | hdfs://namenode/hivedata/warehouse/liuxiaowen.db/lyg1234/day=2015-07-08/site=lyg1234.com |
NUM_BUCKETS | -1 |
OUTPUT_FORMAT | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat |
SERDE_ID | 91746 |
- PARTITION_KEY_VALS
select * from PARTITION_KEY_VALS where PART_ID=54472
PART_ID | PART_KEY_VAL | INTEGER_IDX |
---|---|---|
54472 | 2015-07-08 | 0 |
54472 | lyg1234.com | 1 |
- PARTITION_PARAMS
select * from PARTITION_PARAMS where PART_ID = 54472
PART_ID | PARAM_KEY | PARAM_VALUE |
---|---|---|
54472 | COLUMN_STATS_ACCURATE | true |
54472 | numFiles | 1 |
54472 | numRows | 1 |
54472 | rawDataSize | 408 |
54472 | totalSize | 703 |
54472 | transient_lastDdlTime | 1436325813 |
在分區(qū)的屬性里面芍阎,生成的該分區(qū)的統(tǒng)計信息(Statistics)。
三 Hive元數(shù)據(jù)庫表匯總
表名 | 表描述 | 與其他表關(guān)聯(lián)字段 |
---|---|---|
BUCKETING_COLS | Hive表clustered by(分桶)字段信息(字段名缨恒,字段序號) 谴咸。存儲bucket字段信息,通過SD_ID與其他表關(guān)聯(lián) | SD_ID(存儲信息ID):(SD_ID) REFERENCES SDS (SD_ID) |
CDS | 一個字段CD_ID骗露,與SDS表關(guān)聯(lián) | CD_ID(字段信息ID) |
COLUMNS_V2 | 存儲表對應(yīng)的字段信息岭佳,通過CD_ID與其他表關(guān)聯(lián) | CD_ID(字段信息ID) |
DATABASE_PARAMS | 該表存儲數(shù)據(jù)庫的相關(guān)參數(shù),在CREATE DATABASE(創(chuàng)建數(shù)據(jù)庫)時候用 ,WITH DBPROPERTIES (property_name=property_value, …)指定的參數(shù)萧锉。 | DB_ID(數(shù)據(jù)庫ID) |
DBS | hive的數(shù)據(jù)庫信息(描述珊随、數(shù)據(jù)庫的默認(rèn)目錄空間、名稱柿隙、用戶名叶洞、用戶類型) ,存儲hive的database信息(hdfs location信息禀崖,owner信息等) | DB_ID(數(shù)據(jù)庫ID) |
FUNCS | 用戶注冊的函數(shù)信息 | DB_ID(數(shù)據(jù)庫ID) FUNC_ID(函數(shù)ID) |
FUNC_RU | 用戶注冊函數(shù)的資源信息 | FUNC_ID(函數(shù)ID) |
GLOBAL_PRIVS | 全局變量衩辟,與表無關(guān) | |
IDXS | 索引表,存儲Hive索引相關(guān)的元數(shù)據(jù) | SD_ID(存儲信息ID) INDEX_ID(索引ID) |
INDEX_PARAMS | 索引相關(guān)的屬性信息波附。 | INDEX_ID(索引ID) |
PARTITIONS | 該表存儲表分區(qū)的基本信息 | SD_ID(存儲信息ID艺晴、 PART_ID(分區(qū)ID) TBL_ID(表ID) |
PARTITION_KEYS | 該表存儲分區(qū)的字段信息,TBL_ID關(guān)聯(lián) | TBL_ID(表ID) |
PARTITION_KEY_VALS | 該表存儲分區(qū)字段值 掸屡,通過PART_ID關(guān)聯(lián)。與PARTITION_KEYS共用同一個字段INTEGER_IDX來標(biāo)示不同的分區(qū)字段钥星。 | PART_ID(分區(qū)ID)INTEGER_IDX(分區(qū)字段順序) |
PARTITION_PARAMS | 存儲某分區(qū)相關(guān)信息满着,包括文件數(shù),文件大小贯莺,記錄條數(shù)等缕探。通過PART_ID關(guān)聯(lián) | PART_ID(分區(qū)ID) |
PART_COL_PRIVS | 分區(qū)的授權(quán)信息 | PART_ID(分區(qū)ID) |
PART_COL_STATS | 分區(qū)字段的統(tǒng)計信息魂莫。 | PART_ID(分區(qū)ID) |
PART_PRIVS | 分區(qū)的授權(quán)信息 | PART_ID(分區(qū)ID) |
ROLES | 角色表,和GLOBAL_PRIVS配合爹耗,與表無關(guān) | ROLE_ID(角色id) |
SDS | 該表保存文件存儲的基本信息,如INPUT_FORMAT(文件輸入格式)斗遏、OUTPUT_FORMAT(輸出格式)诵次、是否壓縮等枚碗。 | SD_ID肮雨、CD_ID怨规、SERDE_ID |
SD_PARAMS | 該表存儲Hive存儲的屬性信息,在創(chuàng)建表時候使用STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定限番。 | SD_ID |
SEQUENCE_TABLE | 元數(shù)據(jù)主鍵序列增長維護(hù)表 弥虐,存儲sqeuence相關(guān)信息霜瘪,與表無關(guān) | |
SERDES | 存儲序列化反序列化使用的類 | SERDE_ID(序列化類配置ID) |
SERDE_PARAMS | 該表存儲序列化的一些屬性惧磺、格式信息,比如:行磨隘、列分隔符番捂,通過SERDE_ID關(guān)聯(lián) | SERDE_ID(序列化類配置ID) |
SKEWED_COL_NAMES | skew表對應(yīng)的傾斜字段设预,主鍵SD_ID、INTEGER_IDX作為聯(lián)合主鍵魄梯,該信息掛在了table上 | SD_ID |
SKEWED_COL_VALUE_LOC_MAP | 偏移列值與本地文件的映射關(guān)系 | SD_ID |
SKEWED_STRING_LIST | 偏移的字符串列表 | STRING_LIST_ID |
SKEWED_STRING_LIST_VALUES | 偏移字符串列表值 | STRING_LIST_ID |
SKEWED_VALUES | 偏移值 | SD_ID_OID酿秸、INTEGER_IDX |
SORT_COLS | 排序字段,通過SD_ID關(guān)聯(lián) | SD_ID |
TABLE_PARAMS | 該表存儲表/視圖的屬性信息缠局,是否外部表狭园,通過TBL_ID關(guān)聯(lián) | TBL_ID |
TAB_COL_STATS | 表字段的統(tǒng)計信息唱矛。 | TBL_ID |
TBLS | 該表中存儲Hive表绎谦、視圖窃肠、索引表的基本信息刷允,關(guān)聯(lián)字段DB_ID,SD_ID, | TBL_ID树灶、DB_ID天通、SD_ID |
TBL_COL_PRIVS | 該表字段存儲表/視圖的授權(quán)信息 | TBL_ID |
TBL_PRIVS | 該表存儲表/視圖的授權(quán)信息像寒,通過TBL_ID關(guān)聯(lián) | TBL_ID |
VERSION | 版本 |
四 Hive中文亂碼多字符分隔符
問題還原
創(chuàng)建stu表诺祸,加載如下兩條數(shù)據(jù)序臂,分隔符為:$%#, 并查詢出來
Lyg$%#30$%#北京
Lyg$%#31$%#深圳
[root@hadoop001 hive-learn]# cat hw_stu.txt
Lyg$%#30$%#北京
Lyg$%#31$%#深圳
需要解決的問題
1)創(chuàng)建表時奥秆,元數(shù)據(jù)信息中的comment是中文,但存入MySQL會亂碼
2)插入中文數(shù)據(jù)侮叮,查詢會亂碼
3)文本字段分隔符是多字符囊榜,如何處理
4)使用Spark查詢時卸勺,默認(rèn)不支持多字符分隔符解析(ClassNotFoundException)
問題解決
修改元數(shù)據(jù)庫(MySQL)以下幾個字段編碼
默認(rèn)編碼為latin曙求,改為utf8
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; -- 表級comment會存在該字段
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
修改hive-site.xml中jdbc_url
加上utf8編碼:
jdbc:mysql://hadoop001:3306/hive?createDatabaseIfNotExist=true&useSSL=false&characterEncoding=UTF-8
建表
多字符分隔符特殊寫法請注意悟狱!
drop table if exists t_stu;
create table t_stu(
name string comment '姓名' ,
age string comment '年齡' ,
city string comment '城市'
) comment '學(xué)生表' ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ('field.delim'='$%#');
-- 插入數(shù)據(jù)
load data local inpath '/root/source/hive-learn/hw_stu.txt' into table t_stu;
測試
查看元數(shù)據(jù)
建表成功后,查看在元數(shù)據(jù)庫中浴麻,備注信息是否亂碼
Hive查看數(shù)據(jù)
Spark查看數(shù)據(jù)
添加解析多字符分隔符的jar包
spark-shell --jars /root/lib/mysql-connector-java-5.1.47.jar,/root/app/hive/lib/hive-contrib-1.1.0-cdh5.16.2.jar
+----+---+----+
|name|age|city|
+----+---+----+
|Lyg| 30|北京|
|小李同學(xué)| 31|深圳|
+----+---+----+