现在python使用越来越方便了,当我们前期做数仓项目的时候,需要批量从mysql数据库,批量创建hive,并修改对应的类型,如果一个个创建耗时又费力,python提供如下方法,可以从mysql数据直接读取所有建表语句,批量创建对应的hive表,极大提高开发效率。

# 导入pymysql模块 import pymysql import numpy as np # 连接database conn = pymysql.connect( host="服务ip", user="用户名", password="密码", database="数据库名" # 获取游标 cursor = conn.cursor() # 查询所有表名 cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_schema = '库名' and table_name= '表名'") tables = cursor.fetchall() # 遍历所有表 for table in tables: # 获取表名 table_name = table[0] # 查询表结构 cursor.execute("SELECT column_name, data_type FROM information_schema.COLUMNS WHERE table_name = '{}' AND table_schema = '库名'".format(table_name)) columns = cursor.fetchall() # print(columns) array1 = np.array(columns) # print(len(array1)) count = len(array1) field_trans_type = {'varchar': 'string', 'double': 'DOUBLE', 'char': 'STRING', 'float': 'DOUBLE', 'int': 'BIGINT', 'datetime': 'STRING', 'time': 'STRING', 'boolean': 'BOOLEAN', 'int32': 'INT', 'uint32': 'INT', 'decimal': 'decimal', 'timestamp': 'STRING', 'bigint': 'BIGINT', 'string': 'STRING'} mysql_sql = "CREATE TABLE IF NOT EXISTS {} (".format(table_name) for column in columns: column_name = column[0] column_type = column[1] mysql_sql += "{} as {}, \n".format(column_name, field_trans_type.get(column_type)) mysql_sql = mysql_sql[:-1] + """\netl_time as time\n) partitioned by (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' STORED AS orc LOCATION '/warehouse/ods/{}' TBLPROPERTIES ("orc.compress"="SNAPPY");""" print(mysql_sql) # 关闭游标和连接 cursor.close() conn.close()
查询 MySQL 结构自动 创建 Hive 可以通过以下步骤进行: 1. 连接 MySQL 数据库:通过在命令行或者代码中 使用 合适的 MySQL 连接方法,连接到 MySQL 数据库。 2. 查询 结构: 使用 SHOW COLUMNS语句来查询 MySQL 的结构信息,包括字段名、数据类型、长度、约束等。可以将查询结果保存在一个列 或者数据结构中。 3. 创建 Hive :根据查询到的 MySQL 结构信息, 使用 CREATE TABLE语句来 创建 相应的 Hive 。根据数据类型的映射关系,将 MySQL 的数据类型转换为 Hive 的数据类型。 4. 添加分区:如果 MySQL 中有分区字段,需要在 Hive 中也进行分区设置。根据分区字段的类型, 使用 ALTER TABLE语句来添加分区。 5. 导入数据: 使用 INSERT INTO语句将 MySQL 中的数据导入到 Hive 中。可以 使用 INSERT INTO SELECT语句将数据从 MySQL 复制到 Hive 。 需要注意的是, MySQL Hive 之间存在一些数据类型的差异,例如, MySQL 中的DATETIME类型应该被映射为 Hive 的TIMESTAMP类型。在数据导入过程中也可能会遇到一些类型或数据格式的转换问题,需要进行相应的处理。 以上是通过查询 MySQL 结构自动 创建 Hive 的一般步骤,具体的实现方式可以根据具体情况进行调整和优化。