Hive基礎(10):元數據(一)Hive的元數據表結構詳解


https://blog.csdn.net/yu0_zhang0/article/details/80697913

1 概述

我們知道Apache Hive 是構建在Apache Hadoop之上的數據倉庫。有助於對大型的數據集進行讀、寫和管理。這也是官網介紹的第一句話,雖然簡短但是卻能提煉出很多東西,大家可以去細細品味下。該篇博客不做過多講述。本文我們介紹Hive的原數據表,他默認是存儲再derby中的,但是我們一般會修改會mysql。作者使用的也是mysql進行的管理。

2 Hive元數據表結構

  • hive-site.xml
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/basic01?createDatabaseIfNotExist=true</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
  • 通過mysql查看basic01數據庫
show tables;
+---------------------------+
| Tables_in_basic01         |
+---------------------------+
| bucketing_cols            |
| cds                       |
| columns_v2                |
| database_params           |
| dbs                       |
| func_ru                   |
| funcs                     |
| global_privs              |
| idxs                      |
| index_params              |
| part_col_privs            |
| part_col_stats            |
| part_privs                |
| partition_key_vals        |
| partition_keys            |
| partition_params          |
| partitions                |
| roles                     |
| sd_params                 |
| sds                       |
| sequence_table            |
| serde_params              |
| serdes                    |
| skewed_col_names          |
| skewed_col_value_loc_map  |
| skewed_string_list        |
| skewed_string_list_values |
| skewed_values             |
| sort_cols                 |
| tab_col_stats             |
| table_params              |
| tbl_col_privs             |
| tbl_privs                 |
| tbls                      |
| version                   |
+---------------------------+

下面我們就一個一個講解看看其中到底是什么關系。

2.1 version(存儲Hive版本的元數據表)

VER_ID SCHEMA_VERSION VERSION_COMMENT
ID主鍵 Hive版本 版本說明
1 0.12.0 Set by MetaStore hadoop@192.168.137.130

如果該表出現問題,根本進入不了Hive-Cli。比如該表不存在,當啟動Hive-Cli時候,就會報錯”Table ‘hive.version’ doesn’t exist”。

2.2 Hive數據庫相關的元數據表(DBS、DATABASE_PARAMS)

    • select * from dbs
      該表存儲Hive中所有數據庫的基本信息,字段如下:
數據庫ID 數據庫描述 數據庫HDFS路徑 數據庫名 數據庫所有者用戶名 所有者角色
DB_ID DESC DB_LOCATION_URI NAME OWNER_NAME OWNER_TYPE
1 Default Hive database hdfs://192.168.137.130:9000/user/hive/warehouse default public ROLE
6 NULL hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db hive hadoop USER
  • select * from database_params;
    該表存儲數據庫的相關參數,在CREATE DATABASE時候用
    WITH DBPROPERTIES (property_name=property_value, …)指定的參數。
元數據表字段 說明 示例數據
DB_ID 數據庫ID 2
PARAM_KEY 參數名 createdby
PARAM_VALUE 參數值 lxw1234

2.3 Hive表和視圖相關的元數據表

主要有TBLS、TABLE_PARAMS、TBL_PRIVS,這三張表通過TBL_ID關聯。

  • select * from tbls;
    該表中存儲Hive表、視圖、索引表的基本信息。
表ID 創建時間 數據庫ID 上次訪問時間 所有者 保留字段 序列化配置信息( 對應SDS表中的SD_ID 表名 表類型 視圖的詳細HQL語句 視圖的原始HQL語句
TBL_ID CREATE_TIME DB_ID LAST_ACCESS_TIME OWNER RETENTION SD_ID TBL_NAME TBL_TYPE VIEW_EXPANDED_TEXT VIEW_ORIGINAL_TEXT
1 1519944170 6 0 hadoop 0 1 page_views MANAGED_TABLE NULL NULL
2 1519944313 6 0 hadoop 0 2 page_views_bzip2 MANAGED_TABLE NULL NULL
3 1519944819 6 0 hadoop 0 3 page_views_snappy MANAGED_TABLE NULL NULL
    • select * from table_params;
      該表存儲表/視圖的屬性信息。
表ID(對應TBLS的tbl_id) 屬性名 屬性值
TBL_ID PARAM_KEY PARAM_VALUE
1 COLUMN_STATS_ACCURATE true
1 numFiles 1
1 numRows 0
1 rawDataSize 0
1 totalSize 19014993
1 transient_lastDdlTime 1519944212
2 COLUMN_STATS_ACCURATE true
2 numFiles 1
2 numRows 100000
2 rawDataSize 18914993
2 totalSize 3814674
2 transient_lastDdlTime 1519944314
  • TBL_PRIVS
    該表存儲表/視圖的授權信息

2.4 Hive文件存儲信息相關的元數據表

主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS
由於HDFS支持的文件格式很多,而建Hive表時候也可以指定各種文件格式,Hive在將HQL解析成MapReduce時候,需要知道去哪里,使用哪種格式去讀寫HDFS文件,而這些信息就保存在這幾張表中。

    • select * from sds;
      文件存儲的基本信息:

 

存儲信息ID(對應tbls表中的SD_ID ) 字段信息ID(對應column_v2 的CD_ID) 文件輸入格式 是否壓縮 是否以子目錄存儲 HDFS路徑 分桶數量 文件輸出格式 序列化類ID
SD_ID CD_ID INPUT_FORMAT IS_COMPRESSED IS_STOREDASSUBDIRECTORIES LOCATION NUM_BUCKETS OUTPUT_FORMAT SERDE_ID
1 1 org.apache.hadoop.mapred.TextInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views -1 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 1
2 2 org.apache.hadoop.mapred.TextInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_bzip2 -1 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 2
3 3 org.apache.hadoop.mapred.TextInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_snappy -1 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 3
21 21 org.apache.hadoop.mapred.TextInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/tt -1 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 21
22 22 org.apache.hadoop.mapred.SequenceFileInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_seq -1 org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat 22
23 23 org.apache.hadoop.hive.ql.io.RCFileInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_rcfile -1 org.apache.hadoop.hive.ql.io.RCFileOutputFormat 23
24 24 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_orc_zlib -1 org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat 24
27 27 com.hadoop.mapred.DeprecatedLzoTextInputFormat     hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_lzo_index -1 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 27

 

    • SD_PARAMS
      該表存儲Hive存儲的屬性信息,在創建表時候使用
      STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定。

    • select * from serdes;
      該表存儲序列化使用的類信息

    •  

 

序列化類配置ID(對應SDS的 SERDE_ID) 序列化類別名 序列化類
SERDE_ID NAME SLIB
1 NULL org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
2 NULL org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
3 NULL org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
21 NULL org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
22 NULL org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
23 NULL org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe
24 NULL org.apache.hadoop.hive.ql.io.orc.OrcSerde
  • select * from serde_params;
    該表存儲序列化的一些屬性、格式信息,比如:行、列分隔符
序列化類配置ID(對應SDS的 SERDE_ID) 屬性名 屬性值
SERDE_ID PARAM_KEY PARAM_VALUE
1 field.delim  
1 serialization.format  
2 field.delim  
2 serialization.format  
3 field.delim  
3 serialization.format  
21 field.delim  

2.5 Hive表字段相關的元數據表

  • select * from columns_v2;
    表的字段信息
字段信息ID(對應SDS 表CD_ID) 字段注釋 字段名 字段類型 字段順序
CD_ID COMMENT COLUMN_NAME TYPE_NAME INTEGER_IDX
1 NULL city_id string 6
1 NULL end_user_id string 5
1 NULL ip string 4
1 NULL referer string 3
1 NULL session_id string 2
1 NULL track_time string 0
1 NULL url string 1
2 NULL city_id string 6
2 NULL end_user_id string 5
2 NULL ip string 4
2 NULL referer string 3
2 NULL session_id string 2
2 NULL track_time string 0
2 NULL url string 1

2.6 Hive表分區相關的元數據表

主要涉及PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS

  • select * from partitions ;
    分區的基本信息
分區ID 分區創建時間 最后一次訪問時間 分區名 分區存儲ID 表ID
PART_ID CREATE_TIME LAST_ACCESS_TIME PART_NAME SD_ID TBL_ID
1 1506226696   pt=2015-06-12 21 2
  • select * from partition_keys;
    分區的字段信息
元數據表字段 說明 示例數據
TBL_ID 表ID 2
PKEY_COMMENT 分區字段說明  
PKEY_NAME 分區字段名 pt
PKEY_TYPE 分區字段類型 string
INTEGER_IDX 分區字段順序 1
  • select * from partition_key_vals;
    該表存儲分區字段值
元數據表字段 說明 示例數據
PART_ID 分區ID 2
PART_KEY_VAL 分區字段值 2015-06-12
INTEGER_IDX 分區字段值順序 0
  • select * from partition_params;
    該表存儲分區的屬性信息。
元數據表字段 說明 示例數據
PART_ID 分區ID 2
PARAM_KEY 分區屬性名 numFiles、numRows、rawDataSize、totalSize、transient_lastDdlTime
PARAM_VALUE 分區屬性值 15、502195

2.7 其他不常用的元數據表

表明 作用
DB_PRIVS 數據庫權限信息表。通過GRANT語句對數據庫授權后,將會在這里存儲。
IDXS 索引表,存儲Hive索引相關的元數據
INDEX_PARAMS 索引相關的屬性信息。
TAB_COL_STATS 表字段的統計信息。使用ANALYZE語句對表字段分析后記錄在這里。
TBL_COL_PRIVS 表字段的授權信息
PART_PRIVS 分區的授權信息
PART_COL_STATS 分區字段的統計信息。
PART_COL_PRIVS 分區字段的權限信息。
FUNCS 用戶注冊的函數信息
FUNC_RU 用戶注冊函數的資源信息

最后我們總結下他們之間的關系圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM