在使用hive进行开发时,我们往往需要获得一个已存在hive表的建表语句(DDL),然而hive本身并没有提供这样一个工具。

要想还原建表DDL就必须从元数据入手,我们知道,hive的元数据并不存放在hdfs上,而是存放在传统的RDBMS中,典型的如mysql,derby等,这里我们以mysql为元数据库,结合0.4.2版本的hive为例进行研究。

连接上mysql后可以看到hive元数据对应的表约有20个,其中和表结构信息有关的有9张,其余的10多张或为空,或只有简单的几条记录,以下是部分主要表的简要说明。

表名

说明

关联键

TBLS

所有hive表的基本信息

TBL_ID,SD_ID

TABLE_PARAM

表级属性,如是否外部表,表注释等

TBL_ID

COLUMNS

Hive表字段信息(字段注释,字段名,字段类型,字段序号)

SD_ID

SDS

所有hive表、表分区所对应的hdfs数据目录和数据格式

SD_ID,SERDE_ID

SERDE_PARAM

序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等

SERDE_ID

PARTITIONS

Hive表分区信息

PART_ID,SD_ID,TBL_ID

PARTITION_KEYS

Hive分区表分区键

TBL_ID

PARTITION_KEY_VALS

Hive表分区名(键值)

PART_ID

除了上面几张表外,还有两张表非常有趣:NUCLEUS_TABLES和SEQUENCE_TABLE

NUCLEUS_TABLES表中保存了元数据表和hive中class类的对应关系,如’org.apache.hadoop.hive.metastore.model.MTable’, ‘`TBLS`’,说明MTable类对应了元数据的TBLS表,不难想象当我们创建一张表时,hive一定会通过MTable的DAO模式向TBLS插入一条数据用来描述刚刚创建的hive表。NUCLEUS_TABLES表内现在共有17条这样的记录。

SEQUENCE_TABLE表保存了hive对象的下一个可用ID,如’org.apache.hadoop.hive.metastore.model.MTable’, 271786,则下一个新创建的hive表其TBL_ID就是271786,同时SEQUENCE_TABLE表中271786被更新为271791(这里每次都是+5而不是预料中的+1,有些奇怪)。同样,COLUMN,PARTITION等都有相应的记录。

从上面两张表的内容来看,hive表创建表的过程已经比较清楚了

解析用户提交hive语句,对其进行解析,分解为表、字段、分区等hive对象

根据解析到的信息构建对应的表、字段、分区等对象,从SEQUENCE_TABLE中获取构建对象的最新ID,与构建对象信息(名称,类型等)一同通过DAO方法写入到元数据表中去,成功后将SEQUENCE_TABLE中对应的最新ID+5。

实际上我们常见的RDBMS都是通过这种方法进行组织的,典型的如postgresql,其系统表中和hive元数据一样裸露了这些id信息(oid,cid等),而Oracle等商业化的系统则隐藏了这些具体的ID。

有了上面的信息,再想获得hive的建表语句已经是易如反掌了,这里提供一个已经开发好的脚本,使用shell开发,大家可以自由修改。注意:其中mysql连接信息请根据实际环境进行配置。

使用方法如下:

hivesql sql

hivesql synctab

如果需要多天分区DDL还可以这样用(前提是分区中含有日期信息,如pt=20100720):

hivesql sql s_table 20100702                      — 除建表语句外,获得自20100702以来的分区DDL

hivesql sql s_table 20100702 20100725  — ………………………..自20100702-20100725的分区DDL

hivesql sql s_table 20100702 10                 — ………………………..自20100702起10天的分区DDL

hivesql synctab和hivesql sql一样支持上述日期限定功能。

此外,还提供了两个附加的功能(也很有用呃)

hivesql loc             —  根据关键字查找能够匹配到的hive表或对应的数据路径

hivesql hdfswc    — 获取指定数据目录下所有数据的总行数,支持普通文本,TextFile和SequenceFile的压缩格式,类似于linux下的wc -l

分享到:

2011-03-22 15:35

浏览 1921

评论

1 楼

yugouai

2013-02-05

下载不了啊。。。

mysql建表语句转hive_如何获取hive建表语句相关推荐

  1. mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  2. mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  3. hive表移到mysql_如何将Hive数据表移动到MySql?

    我想知道如何将日期从Hive转移到 MySQL? 我已经看到了如何将hive数据移动到Amazon DynamoDB而不是像MySQL这样的RDBMS的示例.以下是我在DynamoDB中看到的示例: ...

  4. spark如何正确的删除hive外部表【删除表时同时删除hdfs上的数据】?

    在spark 2.4.x和hive 3.1.x环境下,spark通过sql (drop table xxx)删除hive的外部表,只能删除hive的元数据信息,但没有删除hdfs上的数据,导致hdfs ...

  5. WINCE基于hive注册表的实现

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  6. mysql 建表 title create table_mysql中create命令建表sql语句

    MySQL中create table语句的基本语法是: 代码如下 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definiti ...

  7. mysql 建表语句 stored as_Druid 解析Hive建表语句解析报错

    Druid 版本: com.alibaba druid-spring-boot-starter 1.2.3 Hive 建表SQL create table ads_data.sale_detail_o ...

  8. hive建表语句_Hive数据如何同步到MaxCompute之实践讲解

    摘要:本次分享主要介绍 Hive数据如何迁移到MaxCompute.MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具,本文将为大家介绍MMA工具的 ...

  9. MySQL获取数据库每个表的行数

    这个问题的起因,是我要进行数据库数据的迁移,迁移后确定数据是否都迁移成功而遇到的. 对于数据库的迁移,我是使用MySQL官方的数据库管理工具MySQL Workbench完成的.源数据库和目标数据库都 ...

  10. JDBC连接mysql、创建表、操作数据、PreparedStatement防注入、sql语句返回值类型知识汇总

    JDBC连接过程: import java.sql.*;/*** Description:* Created by CWG on 2020/10/29 21:05*/ public class Con ...

最新文章

  1. LeetCode 145. Binary Tree Postorder Traversal
  2. java readtimeout_Java HttpURLConnection.getReadTimeout方法代码示例
  3. freemarker导出word 目录_PPT转Word你还用复制粘贴?别笑掉大牙了,这几招教你快速转换...
  4. 全新激光雕刻机切割机打标机写字机三轴步进电机运动控制板 控制板硬件软件全部是自己开发的
  5. 到底什么是模型预测控制MPC(一)
  6. 凯恩帝k1000ti参数设置_凯恩帝K1000T系统用户手册.pdf
  7. matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
  8. Unity爆炸、闪电、火焰、雷雨特效Demo
  9. 软件测试的环境部署怎么做?
  10. hive_hbase一个综合练习题目总共包括以下部分
  11. 【新手向】Python做一个简易登录注册GUI界面(无事件绑定)
  12. 服务熔断和服务降级的区别
  13. vue之组件传值 爷到孙 provide inject
  14. 检测计算机故障五大原则,电脑故障维修的基本原则及流程
  15. linux下tp驱动程序,Linux安装TP-Link TL-WN722N 驱动
  16. 俄外长:想谈和平条约,日本必须承认俄对岛屿主权
  17. pip安装wxpython报错traceback_使用源码编译wxpython-基于python2.7
  18. 手机怎么解决同ip多账号_安卓手机用久了垃圾多怎么办?5款强力清理软件帮你解决难题...
  19. 数字档案EEP封装包工具软件(单机)
  20. 国产芯片----杭州瑞盟MS321V/358V/324V低电压轨到轨输入输出运放

热门文章

  1. 74cms v5.0.1漏洞
  2. 林轩田机器学习基石笔记(第16节)——概率论与机器学习建立连接
  3. 射频电路设计——传输线理论(Transmission Line Analysis) 【上】
  4. java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别
  5. Repeater实现批量删除
  6. 文字转语音真人发声免费的有哪些?文字转语音有这两款软件就够了
  7. centos7安装redies
  8. 安徽大学计算机专硕奖学金,2019年安徽大学新闻传播跨考华东师范大学计算机专硕,总分418,排名第一经验分享!...
  9. 【Android -- 开源库】BRVAH 的基本使用
  10. java 汉字按拼音排序_Java当中汉字按照拼音排序