调研系列第四篇:Hive MetaStore数据库表结构
先来一张整体概述
Hive MetaStore数据库表结构
1. SEQUENCE_TABLE : 对于db、tbl、sds等的SEQUENCE_id ,每次新增的时候取一个
2. DBS:存储hive的DB信息,表结构如下 :
3. DATABASE_PARAMS :db的key-value参数
4. SDS:提供table/partition对应的文件系统路径location,以及对这个数据读取的InputFormat、是否压缩、是否是子文件夹存储、SerDe类(对应于SERDES表)
5. SD_PARAMS :为每个SDS的key-value参数
6. SERDES :每个SDS对应的存储的SerDer类,每个SDS记录一个SERDES表的记录
7. SERDE_PARAMS:SERDE的一些参数,主要是行分隔符、列分隔符、NULL字符串等等,可以每个SerDer自己定义
8. CDS : 暂时没明白到底是什么,不过其id和tbl_id是一致的,貌似就是tbl_id
9. TBLS :table的具体信息
Tabid、创建时间、数据库id、last_access、owner(这个后面会和权限控制有关)、表的存储位置id、表明、TBL_TYPE(外部表、内部表)、
10. TABLE_PARAMS :table级别的key-value参数
主要是总文件个数、总文件大小、comment、last_ddl_time(上次执行ddl的时间)、以及用户自定义的一些参数(orcfile中的参数)
11. COLUMNS_V2 :列的信息
CD_ID对应的应该是tbl_id
12. PARTITION_KEYS :每个表的partitions 列
13. PARTITIONS :partitions
Partitions id 、create_time、part_name、sds_id、tbl_id
14. PARTITION_KEY_VALS
和上面的表对应,每个partitions对应的具体值
15. PARTITION_PARAMS
分区参数,暂时为找到怎么设置每个分区的key-value参数
16. PART_COL_STATS
对于每列的统计信息,在0.11以后增加了
ANALYZE table contline_revenue_day PARTITION(pdate='2014-03-09') compute statistics for COLUMNS contract_line_id , st_date ,contract_no ; 这样的ddl命令来用于统计每个分区的基本统计信息,用于优化
17. 未用到的空表
BUCKETING_COLS :
IDXS
INDEX_PARAMS
SKEWED_COL_NAMES
SKEWED_COL_VALUE_LOC_MAP
SKEWED_STRING_LIST
SKEWED_STRING_LIST_VALUES
SKEWED_VALUES
SORT_COLS
VERSION
18. 待补充
Hive MetaStore 在hive中的访问api
元数据库的DDL操作,对于元数据库的操作均是在DDLSemanticAnalyzer类中进行的语义解析,然后翻译成DDLTask. execute(DriverContext driverContext)中执行的,具体的操作作如下:
case HiveParser.TOK_CREATEDATABASE:
case HiveParser.TOK_DROPDATABASE:
case HiveParser.TOK_SWITCHDATABASE:
case HiveParser.TOK_DROPTABLE:
case HiveParser.TOK_DROPVIEW:
case HiveParser.TOK_DESCDATABASE:
case HiveParser.TOK_DESCTABLE:
case HiveParser.TOK_DESCFUNCTION:
case HiveParser.TOK_MSCK:
case HiveParser.TOK_ALTERTABLE_ADDCOLS:
case HiveParser.TOK_ALTERTABLE_RENAMECOL:
case HiveParser.TOK_ALTERTABLE_REPLACECOLS:
case HiveParser.TOK_ALTERTABLE_RENAME:
case HiveParser.TOK_ALTERTABLE_DROPPARTS:
case HiveParser.TOK_ALTERTABLE_ADDPARTS:
case HiveParser.TOK_ALTERTABLE_PROPERTIES:
case HiveParser.TOK_DROPTABLE_PROPERTIES:
case HiveParser.TOK_ALTERTABLE_SERIALIZER:
case HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES:
case HiveParser.TOK_ALTERINDEX_REBUILD:
case HiveParser.TOK_ALTERINDEX_PROPERTIES:
case HiveParser.TOK_ALTERVIEW_PROPERTIES:
case HiveParser.TOK_DROPVIEW_PROPERTIES:
case HiveParser.TOK_ALTERVIEW_ADDPARTS:
case HiveParser.TOK_ALTERVIEW_DROPPARTS:
case HiveParser.TOK_ALTERVIEW_RENAME:
case HiveParser.TOK_SHOWDATABASES:
case HiveParser.TOK_SHOWTABLES:
case HiveParser.TOK_SHOWCOLUMNS:
case HiveParser.TOK_SHOW_TABLESTATUS:
case HiveParser.TOK_SHOW_TBLPROPERTIES:
case HiveParser.TOK_SHOW_CREATETABLE:
case HiveParser.TOK_SHOWFUNCTIONS:
case HiveParser.TOK_SHOWPARTITIONS:
case HiveParser.TOK_SHOWINDEXES:
case HiveParser.TOK_SHOWLOCKS:
case HiveParser.TOK_CREATEINDEX:
case HiveParser.TOK_DROPINDEX:
case HiveParser.TOK_ALTERTABLE_CLUSTER_SORT:
case HiveParser.TOK_ALTERTABLE_TOUCH:
case HiveParser.TOK_ALTERTABLE_ARCHIVE:
case HiveParser.TOK_ALTERTABLE_UNARCHIVE:
case HiveParser.TOK_ALTERTABLE_ALTERPARTS:
case HiveParser.TOK_LOCKTABLE:
case HiveParser.TOK_UNLOCKTABLE:
case HiveParser.TOK_CREATEROLE:
case HiveParser.TOK_DROPROLE:
case HiveParser.TOK_GRANT:
case HiveParser.TOK_REVOKE:
case HiveParser.TOK_SHOW_GRANT:
case HiveParser.TOK_GRANT_ROLE:
case HiveParser.TOK_REVOKE_ROLE:
case HiveParser.TOK_SHOW_ROLE_GRANT:
case HiveParser.TOK_ALTERDATABASE_PROPERTIES:
case HiveParser.TOK_ALTERTABLE_SKEWED:
case HiveParser.TOK_TRUNCATETABLE:
case HiveParser.TOK_EXCHANGEPARTITION:
每一个在DDLSemanticAnalyzer中对应这一个翻译成具体的DDLTask的swatch-case ,具体可以参看下DDLSemanticAnalyzer的代码,这块代码相对较简单 。