因为需要从数据库中取数并且在python中进行排版、分析等操作,每次都需要从dbeaver运行sql导出excel,然后再导入python进行后续操作,而直接在python中调用sql文件就免去了这个中间环节,更加简便。
1. 读取sql文件(hive)
with open(r'\sql_test.sql') as f:
sql = f.read()
读取出的sql类型为字符串,有非常多的'\n\t',没关系,可以正常运行。
2. 构建下载函数
import pandas as pd
from impala.dbapi import connect
from hdfs.client import Client
from hdfs import InsecureClient
def getDatabaseConnection():
"""
获取数据库连接和游标
"""
return connect(host='XXX', port=XXX, auth_mechanism='XXX', user='XXX', password='XXX', database='XXX')
def executeSqlString(sql_string):
"""
执行SQL语句
"""
with getDatabaseConnection().cursor() as cur:
cur.execute(sql_string)
return 'SQL已执行'
def transferSqlOutput2Dataframe(sql, column_names):
"""
执行SQL语句并将结果转为DataFrame
"""
with getDatabaseConnection().cursor() as cur:
cur.execute(sql)
sql_data = cur.fetchall()
return pd.DataFrame(sql_data, columns=column_names)
3. 运行sql并转化为Dataframe
使用transferSqlOutput2Dataframe,输入sql和columns(列名)参数并运行:
*前提需要知道导出的数据的列名,这样才能在转化为Dataframe的时候赋上对应的列名。