HIVE元数据表数据字典:
说明 |
|
BUCKETING_COLS |
Hive表CLUSTERED BY字段信息(字段名,字段序号) |
COLUMNS |
Hive表字段信息(字段注释,字段名,字段类型,字段序号) |
DBS |
|
NUCLEUS_TABLES |
元数据表和hive中class类的对应关系 |
PARTITIONS |
Hive表分区信息(创建时间,具体的分区) |
PARTITION_KEYS |
Hive分区表分区键(名称,类型,comment,序号) |
PARTITION_KEY_VALS |
Hive表分区名(键值,序号) |
PARTITION_PARAMS |
|
SDS |
所有hive表、表分区所对应的hdfs数据目录和数据格式 |
SD_PARAMS |
|
SEQUENCE_TABLE |
Hive对象的下一个可用ID |
SERDES |
Hive表序列化反序列化使用的类库信息 |
SERDE_PARAMS |
序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等 |
SORT_COLS |
Hive表SORTED BY字段信息(字段名,sort类型,字段序号) |
TABLE_PARAMS |
表级属性,如是否外部表,表注释等 |
TBLS |
所有hive表的基本信息 |
这些表的内容在HIVE里面是有很格式化的显示,在HIVE里面输入describe formatted table_name;展示出来的信息就是表格中所有表(除了NUCLEUS_TABLE, SEQUENCE_TABLE这两张表)的信息,而且key值基本上和元数据的表字段名称一致。
HIVE如何定义和操作元数据:
定义:
\src\metastore\src\model\ package.jdo和org.apache.hadoop.hive.metastore.model.*用来定义元数据的数据字典和操作。
以TBLS表为例:
Mysql中的表结构为:
\src\metastore\src\model\ package.jdo和org.apache.hadoop.hive.metastore.model.*用来定义元数据的数据字典和操作。
以TBLS表为例:
Mysql中的表结构为:
mysql> desc TBLS; +--------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------+------+-----+---------+-------+ | TBL_ID | bigint(20) | NO | PRI | NULL | | | CREATE_TIME | int(11) | NO | | NULL | | | DB_ID | bigint(20) | YES | MUL | NULL | | | LAST_ACCESS_TIME | int(11) | NO | | NULL | | | OWNER | varchar(767) | YES | | NULL | | | RETENTION | int(11) | NO | | NULL | | | SD_ID | bigint(20) | YES | MUL | NULL | | | TBL_NAME | varchar(128) | YES | MUL | NULL | | | VIEW_EXPANDED_TEXT | mediumtext | YES | | NULL | | | VIEW_ORIGINAL_TEXT | mediumtext | YES | | NULL | | | TBL_TYPE | varchar(128) | YES | | NULL | | +--------------------+--------------+------+-----+---------+-------+ |
<class name="MTable" table="TBLS" identity-type="datastore" detachable="true"> <datastore-identity> <column name="TBL_ID"/> </datastore-identity> <index name="UniqueTable" unique="true"> <column name="TBL_NAME"/> <column name="DB_ID"/> </index> <field name="tableName"> <column name="TBL_NAME" length="128" jdbc-type="VARCHAR"/> </field> <field name="database"> <column name="DB_ID"/> </field> <field name="sd" dependent="true"> <column name="SD_ID"/> </field> <field name="owner"> <column name="OWNER" length="767" jdbc-type="VARCHAR"/> </field> <field name="createTime"> <column name="CREATE_TIME" jdbc-type="integer"/> </field> <field name="lastAccessTime"> <column name="LAST_ACCESS_TIME" jdbc-type="integer"/> </field> <field name="retention"> <column name="RETENTION" jdbc-type="integer"/> </field> <field name="viewOriginalText"> <column name="VIEW_ORIGINAL_TEXT" jdbc-type="LONGVARCHAR"/> </field> <field name="viewExpandedText"> <column name="VIEW_EXPANDED_TEXT" jdbc-type="LONGVARCHAR"/> </field> <field name="tableType"> <column name="TBL_TYPE" length="128" jdbc-type="VARCHAR"/> </field> </class> |
表名为:TBLS;对应的类为:org.apache.hadoop.hive.metastore.model. MTable,TBLS的所有操作都在此类中定义。
操作:
org.apache.hadoop.hive.metastore. ObjectStore
定义了如何获取元数据,如何写入元数据,其实全部是调用javax.jdo中各个类的方法。
以listPartitionNames为例:
public List<String> listPartitionNames(String dbName, String tableName, short max) throws MetaException { List<String> pns = new ArrayList<String>(); boolean success = false; try { openTransaction(); LOG.debug("Executing getPartitionNames"); dbName = dbName.toLowerCase().trim(); tableName = tableName.toLowerCase().trim(); javax.jdo.Query q = pm.newQuery( "select partitionName from org.apache.hadoop.hive.metastore.model.MPartition " + "where table.database.name == t1 && table.tableName == t2 " + "order by partitionName asc"); q.declareParameters("java.lang.String t1, java.lang.String t2"); q.setResult("partitionName"); Collection names = (Collection) q.execute(dbName, tableName); pns = new ArrayList<String>(); for (Iterator i = names.iterator(); i.hasNext();) { pns.add((String) i.next()); } success = commitTransaction(); } finally { if (!success) { rollbackTransaction(); } } return pns; } |
所以,如果要修改HIVE元数据管理的功能,就可以按如下步骤操作:
1. 在\src\metastore\src\model\ package.jdo中定义新的HIVE元数据表的数据字典
2. 在org.apache.hadoop.hive.metastore.model中定义新增表的操作
3. 在org.apache.hadoop.hive.metastore. ObjectStore中新增方法处理如上定义的功能