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中的表结构为:
Sql代码     收藏代码
  1. mysql> desc TBLS;  
  2. +--------------------+--------------+------+-----+---------+-------+  
  3. | Field              | Type         | Null | Key | Default | Extra |  
  4. +--------------------+--------------+------+-----+---------+-------+  
  5. | TBL_ID             | bigint(20)   | NO   | PRI | NULL    |       |  
  6. | CREATE_TIME        | int(11)      | NO   |     | NULL    |       |  
  7. | DB_ID              | bigint(20)   | YES  | MUL | NULL    |       |  
  8. | LAST_ACCESS_TIME   | int(11)      | NO   |     | NULL    |       |  
  9. | OWNER              | varchar(767) | YES  |     | NULL    |       |  
  10. | RETENTION          | int(11)      | NO   |     | NULL    |       |  
  11. | SD_ID              | bigint(20)   | YES  | MUL | NULL    |       |  
  12. | TBL_NAME           | varchar(128) | YES  | MUL | NULL    |       |  
  13. | VIEW_EXPANDED_TEXT | mediumtext   | YES  |     | NULL    |       |  
  14. | VIEW_ORIGINAL_TEXT | mediumtext   | YES  |     | NULL    |       |  
  15. | TBL_TYPE           | varchar(128) | YES  |     | NULL    |       |  
  16. +--------------------+--------------+------+-----+---------+-------+  
 
在package.jdo里的定义为:
Java代码     收藏代码
  1. <<strong><span style="color: #0000ff;">class name="MTable"</span></strong> <strong><span style="color: #ff0000;">table="TBLS"</span></strong> identity-type="datastore" detachable="true">  
  2.   <datastore-identity>  
  3.     <column name="TBL_ID"/>  
  4.   </datastore-identity>  
  5.   <index name="UniqueTable" unique="true">  
  6.     <column name="TBL_NAME"/>  
  7.     <column name="DB_ID"/>  
  8.   </index>  
  9.   <field name="tableName">  
  10.     <column name="TBL_NAME" length="128" jdbc-type="VARCHAR"/>  
  11.   </field>  
  12.   <field name="database">  
  13.     <column name="DB_ID"/>  
  14.   </field>  
  15.   <field name="sd" dependent="true">  
  16.     <column name="SD_ID"/>  
  17.   </field>  
  18.   <field name="owner">  
  19.     <column name="OWNER" length="767" jdbc-type="VARCHAR"/>  
  20.   </field>  
  21.   <field name="createTime">  
  22.     <column name="CREATE_TIME" jdbc-type="integer"/>  
  23.   </field>  
  24.   <field name="lastAccessTime">  
  25.     <column name="LAST_ACCESS_TIME" jdbc-type="integer"/>  
  26.   </field>  
  27.   <field name="retention">  
  28.     <column name="RETENTION" jdbc-type="integer"/>  
  29.   </field>  
  30.   <field name="viewOriginalText">  
  31.     <column name="VIEW_ORIGINAL_TEXT" jdbc-type="LONGVARCHAR"/>  
  32.   </field>  
  33.   <field name="viewExpandedText">  
  34.     <column name="VIEW_EXPANDED_TEXT" jdbc-type="LONGVARCHAR"/>  
  35.   </field>  
  36.   <field name="tableType">  
  37.     <column name="TBL_TYPE" length="128" jdbc-type="VARCHAR"/>  
  38.   </field>  
  39. </class>  
 
表名为:TBLS;对应的类为:org.apache.hadoop.hive.metastore.model. MTable,TBLS的所有操作都在此类中定义。
操作: 
org.apache.hadoop.hive.metastore. ObjectStore 
定义了如何获取元数据,如何写入元数据,其实全部是调用javax.jdo中各个类的方法。 
以listPartitionNames为例:
Java代码     收藏代码
  1. public List<String> listPartitionNames(String dbName, String tableName,  
  2.     short max) throws MetaException {  
  3.   List<String> pns = new ArrayList<String>();  
  4.   boolean success = false;  
  5.   try {  
  6.     openTransaction();  
  7.     LOG.debug("Executing getPartitionNames");  
  8.     dbName = dbName.toLowerCase().trim();  
  9.     tableName = tableName.toLowerCase().trim();  
  10.     javax.jdo.Query q = pm.newQuery(  
  11.         "select partitionName from org.apache.hadoop.hive.metastore.model.MPartition "  
  12.         + "where table.database.name == t1 && table.tableName == t2 "  
  13.         + "order by partitionName asc");  
  14.     q.declareParameters("java.lang.String t1, java.lang.String t2");  
  15.     q.setResult("partitionName");  
  16.     Collection names = (Collection) q.execute(dbName, tableName);  
  17.     pns = new ArrayList<String>();  
  18.     for (Iterator i = names.iterator(); i.hasNext();) {  
  19.       pns.add((String) i.next());  
  20.     }  
  21.     success = commitTransaction();  
  22.   } finally {  
  23.     if (!success) {  
  24.       rollbackTransaction();  
  25.     }  
  26.   }  
  27.   return pns;  
  28. }  
 


所以,如果要修改HIVE元数据管理的功能,就可以按如下步骤操作: 
1.     在\src\metastore\src\model\ package.jdo中定义新的HIVE元数据表的数据字典 
2.     在org.apache.hadoop.hive.metastore.model中定义新增表的操作 
3.     在org.apache.hadoop.hive.metastore. ObjectStore中新增方法处理如上定义的功能
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive是一种基于Hadoop的数据仓库基础架构,用于处理大规模数据集,并以SQL语言进行查询和分析。Hive元数据是指数据信息,包括的名称、列名、数据类型、分区等。当我们在Hive创建一个数据时,Hive会自动生成对应的元数据,同时也会生成创建的SQL语句。 元数据生成创建语句的过程大致如下: 1. 定义结构:在Hive创建之前,需要定义的结构,包括名、列名以及每列的数据类型。例如,我们可以使用CREATE TABLE语句定义一个的结构,并指定列名和数据类型。 2. 生成元数据:当我们执行CREATE TABLE语句后,Hive会解析该语句,并根据结构生成对应的元数据元数据包含了的各种信息,如名、列名、列的数据类型、列的分区等。 3. 生成创建语句:Hive会根据生成的元数据,自动生成对应的创建语句。创建语句包括CREATE TABLE语句以及的各种属性和选项。例如,如果我们创建了一个包括ID和Name两列的Hive会生成类似于以下的创建语句: CREATE TABLE my_table ( ID INT, Name STRING ); 其,my_table为名,ID和Name为列名,INT和STRING为对应的数据类型。 总之,Hive元数据生成创建语句的过程包括定义结构、生成元数据和生成创建语句。通过这个过程,我们可以方便地创建并管理信息,从而方便地对大规模数据集进行查询和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值