mysql建表语句转hive_如何获取hive建表语句

在使用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表分区名(键值)<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Spark Core的算子来实现将MySQL表语换为Hive表语句。下面是一个示例代码,你可以根据自己的需要进行修改和扩展: ```scala import org.apache.spark.sql.SparkSession object MySQLToHiveConverter { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("MySQLToHiveConverter") .master("local") .enableHiveSupport() .getOrCreate() // MySQL表语句 val mysqlCreateTableStatement = """ |CREATE TABLE employees ( | id INT, | name STRING, | age INT, | salary FLOAT |) |""".stripMargin // 解析MySQL表语句 val parsedColumns = mysqlCreateTableStatement .split("\n") .map(_.trim) .filter(_.nonEmpty) .filter(!_.startsWith("CREATE TABLE")) .filter(!_.startsWith(")")) .map(_.split(" ")(0)) // 构Hive表语句 val hiveCreateTableStatement = s""" |CREATE EXTERNAL TABLE employees_hive ( | ${parsedColumns.mkString(",\n ")} |) |ROW FORMAT DELIMITED |FIELDS TERMINATED BY ',' |STORED AS TEXTFILE |LOCATION '/path/to/hive/employees' |""".stripMargin println(hiveCreateTableStatement) spark.stop() } } ``` 在这个示例中,我们假设你已经创了一个名为`employees`的MySQL表,并提供了对应的表语句。我们使用SparkSession来创Spark应用程序,并启用Hive支持。然后,我们解析MySQL表语句,提取出表的列名。最后,我们使用这些列名构Hive表语句。 请注意,这只是一个简单的示例,你可能需要根据你的具体情况进行修改和扩展。另外,你需要确保你的Spark应用程序能够访问到MySQLHive的相关配置信息和依赖项。 希望以上代码对你有所帮助!如有任何疑问,请随时向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值