在我的环境中,我必须处理保存在 Excel 和 CSV 文件中的大量不同数据。我的 python 脚本读取所有这些 Excel 和 CSV 文件,将相关数据提取到数据框中,并进行一些转换。
最后一步是将数据加载到 Presto DB 中。当前代码简单地遍历数据并使用插入语句每 500 条记录插入 presto 数据库。这种方法似乎复杂而缓慢。我为每条记录都尝试过,但性能当然慢得令人无法接受。
有没有什么优雅的方法可以使用 python 将记录从外部数据源(Excel、CSV 等)批量插入 Presto 数据库(也许还有一个优雅的插入语句)?
您可以使用 Python 中的 pyhive 库将数据批量插入到 Presto 数据库中。以下是您的操作方法:
安装pyhive:
pip install pyhive
导入必要的库:
from pyhive import presto
import pandas as pd
连接到您的 Presto 数据库:
conn = presto.connect(
host='your_presto_host',
port=your_presto_port,
username='your_username',
catalog='your_catalog',
schema='your_schema'
)
确保更换占位符(
your_presto_host
,
your_presto_port
、your_username
、your_catalog
和 your_schema
)
使用 Presto 数据库的实际值。
将数据加载到 pandas DataFrame 中。例如,如果你有一个名为 data.csv 的 CSV 文件,你可以使用 read_csv 函数将它加载到 DataFrame 中:
df = pd.read_csv('data.csv')
将 DataFrame 转换为元组列表,其中每个元组代表数据库表中的一行:
data = [tuple(x) for x in df.to_numpy()]
创建一条将数据插入数据库表的SQL 语句。该语句应包含要插入的值的占位符 (%s):
sql = 'INSERT INTO your_table VALUES (%s, %s, %s, ...)'
确保将 your_table 替换为您的表的实际名称 Presto 数据库,以及......使用实际的列名。
cursor = conn.cursor()
cursor.executemany(sql, data)
conn.commit()
executemany
函数对中的每个元组执行SQL语句
data
列表。 commit
函数将更改提交到
数据库。
使用此方法,您可以高效优雅地向您的 Presto 数据库中插入大量数据。