主页 > 电脑硬件  > 

查询hive指定数据库下所有表的建表语句并生成数据字典

查询hive指定数据库下所有表的建表语句并生成数据字典

功能:查询hive指定数据库下所有表的建表语句并生成数据字典

处理前:

| CREATE TABLE `test_db.customer`( | | `c_name` string COMMENT '姓名', | | `c_gender` string COMMENT '性别', | | `c_type` string COMMENT '证件类型') | | ROW FORMAT SERDE | | 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' | | WITH SERDEPROPERTIES ( | | 'field.delim'='|', | | 'serialization.format'='|') | | STORED AS INPUTFORMAT | | 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' | | OUTPUTFORMAT | | 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' | | LOCATION | | 'hdfs://hacluster/user/hive/warehouse/test_db.db/customer' | | TBLPROPERTIES ( | | 'bucketing_version'='2', | | 'parquet pression'='gzip', | | 'transient_lastDdlTime'='1735109698') | | ;

处理后:生成数据字段如下

属主 表名 字段名 字段类型 字段注释 是否外表 是否分区字段 test_db customer c_name string 姓名 否 否 test_db customer c_gender string 性别 否 否 test_db customer c_type string 证件类型 否 否

处理步骤及代码逻辑如下:

查询hive指定数据库下所有表的建表语句 cat hive_ddl.sh #!/bin/bash ## ******************************************** ## file_name: hive_ddl.sh ## Func:查询hive指定数据库下所有表的建表语句 ## Author: wx.yangpg ## create_date: 2025-02-01 ## modify_info: ## version : V1.0 ## execution:sh hive_ddl.sh ## ******************************************** #加载环境 source ~/.bash_profile #数据库名可通过传参的方式来执行 dbname=$1 #查询出该数据库下所有的表,并写入配置文件 beeline --silent=true -e "show tables in ${dbname}" | grep '|' > show_tables.txt sed -i 's/|//g' show_tables.txt sed -i 's/ //g' show_tables.txt #保存hive的建表语句 [ -e create_table.txt ] && rm create_table.txt #遍历配置文件,查询建表语句 for table in `awk 'NR>1' show_tables.txt` do beeline --silent=true -e "show create table ${dbname}.${table}" >> create_table.txt echo '| ;' >> create_table.txt done #初步处理建表语句 cat create_table.txt | grep '|' | grep -v 'createtab_stmt' > create_table2.txt 执行shell命令,查看生成的建表语句 #执行shell命令 sh hive_ddl.sh test_db #查看生成的建表语句 head create_table2.txt | CREATE TABLE `test_db.customer`( | | `c_name` string COMMENT '姓名', | | `c_gender` string COMMENT '性别', | | `c_type` string COMMENT '证件类型') | | ROW FORMAT SERDE | | 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' | | WITH SERDEPROPERTIES ( | | 'field.delim'='|', | | 'serialization.format'='|') | | STORED AS INPUTFORMAT | 使用java处理建表语句,代码逻辑如下 package com.ods.sqoop mon; import java.io.*; public class DealHiveDDL { public static void main(String[] args) throws Exception { FileInputStream fileInputStream = new FileInputStream(args[0]); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]))); String line; String owner = ""; String tablename = ""; String column_name = ""; String data_type = ""; String comments = ""; //是否外表标识 String is_external = "否"; //是否分区表标识 String is_partition = "否"; StringBuilder sb = new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { //获取数据库名,表名,是否外表标识 if (line.startsWith("| CREATE")) { if (line.indexOf("EXTERNAL") > 0) { owner = line.split("\\s+")[4].split("\\.")[0]; tablename = line.split("\\s+")[4].split("\\.")[1]; is_external = "是"; } else { owner = line.split("\\s+")[3].split("\\.")[0]; tablename = line.split("\\s+")[3].split("\\.")[1]; } } else if (line.startsWith("| PARTITIONED")) { //获取是否分区字段 is_partition = "是"; } else if (line.startsWith("| `")) { //获取字段名,字段类型,字段注释 column_name = line.split("\\s+")[1]; data_type = line.split("\\s+")[2]; if (line.indexOf("COMMENT") > 0) { comments = line.split("\\s+")[4]; } //owner tablename column_name data_type comments is_external is_partition sb.append(owner).append("\t") .append(tablename).append("\t") .append(column_name).append("\t") .append(data_type).append("\t") .append(comments).append("\t") .append(is_external).append("\t") .append(is_partition).append("\t").append("\n"); } } String replacement = sb.toString().replaceAll("`","") .replaceAll("\\(","") .replaceAll("\\)","") .replaceAll("\\'","") .replaceAll("\\,", ""); String result = "属主\t表名\t字段名\t字段类型\t字段注释\t是否外表\t是否分区字段\n" + replacement; bufferedWriter.write(result); bufferedReader.close(); bufferedWriter.close(); } } 执行jar包生成最终需要的数据字典 #执行jar包 java -cp ods_etl.jar com.tpiods.sqoop mon.DealHiveDDL create_table2.txt result2.txt #查看最终生成的数据字典 head result2.txt 属主 表名 字段名 字段类型 字段注释 是否外表 是否分区字段 test_db customer c_name string 姓名 否 否 test_db customer c_gender string 性别 否 否 test_db customer c_type string 证件类型 否 否
标签:

查询hive指定数据库下所有表的建表语句并生成数据字典由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“查询hive指定数据库下所有表的建表语句并生成数据字典