Python查询hive结果保存到mysql的代码优化历程

本文介绍了如何使用Python的PyHive库查询Hive数据,并将结果保存到MySQL数据库的过程,包括遇到的问题、解决方法以及代码优化,提供了封装数据库操作的模块化解决方案。

目录

1、需要的包

2、我们选择pyhive

3、下面举一个例子

4、代码简化

5、结果很甜

6、Python操作Hive事务表


我的博客原文地址:http://www.ikeguang.com/2018/12/21/pyhive-mysql/

由于hive查询结果是不能直接保存到mysql的,有人会用sqoop,相对还是不方便。当然了,肯定还有一些其它的hive~mysql互导工具,通常我们用python驱动hiveserver2,hivecli官方并不建议,也利用python将结果保存到mysql。那么python操作hive查询结果保存到mysql过程是怎么样的呢?

1、需要的包

网上百度,搜到的包不外乎下面3个,这里用第二个。

1、pyhs2,已没有更新维护
https://github.com/BradRuderman/pyhs2

2、pyhive
https://github.com/dropbox/PyHive

3、impyla
https://github.com/cloudera/impyla

2、我们选择pyhive

使用PythonHive的表同步到MySQL可以通过以下步骤实现: 1. **连接HiveMySQL数据库**:使用合适的Python库,如`pyhive`或`impyla`连接Hive数据库,使用`pymysql`连接MySQL数据库。 2. **读取Hive表数据**:从Hive表中读取数据,可以使用SQL查询语句。 3. **写入MySQL表数据**:将读取到的数据写入MySQL表中。 以下是一个示例代码,展示了如何使用PythonHive的表同步到MySQL: ```python from pyhive import hive import pymysql # 连接Hive数据库 hive_conn = hive.Connection(host='hive_host', port=10000, username='hive_user', database='hive_database') hive_cursor = hive_conn.cursor() # 连接MySQL数据库 mysql_conn = pymysql.connect(host='mysql_host', port=3306, user='mysql_user', password='mysql_password', database='mysql_database') mysql_cursor = mysql_conn.cursor() # 读取Hive表数据 hive_table = 'hive_table_name' hive_query = f"SELECT * FROM {hive_table}" hive_cursor.execute(hive_query) hive_data = hive_cursor.fetchall() # 获取Hive表的列名 hive_cursor.execute(f"DESCRIBE {hive_table}") hive_columns = [row[0] for row in hive_cursor.fetchall()] # 写入MySQL表数据 mysql_table = 'mysql_table_name' # 创建MySQL表(如果不存在) mysql_cursor.execute(f"CREATE TABLE IF NOT EXISTS {mysql_table} ({', '.join([f'{col} VARCHAR(255)' for col in hive_columns])})") mysql_conn.commit() # 插入数据 insert_query = f"INSERT INTO {mysql_table} ({', '.join(hive_columns)}) VALUES ({', '.join(['%s'] * len(hive_columns))})" mysql_cursor.executemany(insert_query, hive_data) mysql_conn.commit() # 关闭连接 hive_cursor.close() hive_conn.close() mysql_cursor.close() mysql_conn.close() ``` ### 解释: 1. **连接数据库**:使用`pyhive`连接Hive数据库,使用`pymysql`连接MySQL数据库。 2. **读取数据**:从Hive表中读取所有数据,并获取列名。 3. **创建表**:在MySQL中创建与Hive表结构相同的表。 4. **插入数据**:将数据插入到MySQL表中。 5. **关闭连接**:关闭与数据库的连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据技术派

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值