如何使用 Python 批量插入 Presto DB

问题描述 投票:0回答:1

在我的环境中,我必须处理保存在 Excel 和 CSV 文件中的大量不同数据。我的 python 脚本读取所有这些 Excel 和 CSV 文件,将相关数据提取到数据框中,并进行一些转换。

最后一步是将数据加载到 Presto DB 中。当前代码简单地遍历数据并使用插入语句每 500 条记录插入 presto 数据库。这种方法似乎复杂而缓慢。我为每条记录都尝试过,但性能当然慢得令人无法接受。

有没有什么优雅的方法可以使用 python 将记录从外部数据源(Excel、CSV 等)批量插入 Presto 数据库(也许还有一个优雅的插入语句)?

python sql insert presto bulkinsert
1个回答
0
投票

您可以使用 Python 中的 pyhive 库将数据批量插入到 Presto 数据库中。以下是您的操作方法:

  1. 安装pyhive:

    pip install pyhive
    
  2. 导入必要的库:

    from pyhive import presto
    import pandas as pd
    
  3. 连接到您的 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 数据库的实际值。

  4. 将数据加载到 pandas DataFrame 中。例如,如果你有一个名为 data.csv 的 CSV 文件,你可以使用 read_csv 函数将它加载到 DataFrame 中:

      df = pd.read_csv('data.csv')
    
  5. 将 DataFrame 转换为元组列表,其中每个元组代表数据库表中的一行:

      data = [tuple(x) for x in df.to_numpy()]
    
  6. 创建一条将数据插入数据库表的SQL 语句。该语句应包含要插入的值的占位符 (%s):

    sql = 'INSERT INTO your_table VALUES (%s, %s, %s, ...)'
    

确保将 your_table 替换为您的表的实际名称 Presto 数据库,以及......使用实际的列名。

  1. 使用executemany函数对数据执行SQL语句:
  cursor = conn.cursor()
  cursor.executemany(sql, data)
  conn.commit()

executemany
函数对中的每个元组执行SQL语句
data
列表。
commit
函数将更改提交到 数据库。

使用此方法,您可以高效优雅地向您的 Presto 数据库中插入大量数据。

© www.soinside.com 2019 - 2024. All rights reserved.