现在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
表
的一般步骤,具体的实现方式可以根据具体情况进行调整和优化。