簡體   English   中英

如何使用 Python3 在 AWS 中將大型 CSV 文件加載到 Postgresql RDS

[英]How to load a large CSV file to Postgresql RDS in AWS using Python3

我有一個 20 GB csv 文件,有 50 列和 5000 萬條記錄。 我想使用 Python3 自動將巨大的 csv 文件加載到我的 RDS postgresql 實例。 此 csv 文件存儲在 S3 存儲桶中。 對此的任何幫助表示贊賞。 謝謝。

首先安裝 psycopg2:

pip install psycopg2

創建您的表(根據您的需要修改 sql):

conn = psycopg2.connect("dbname=dbname user=user")
cur = conn.cursor()
cur.execute("""CREATE TABLE sometablename(
some_col integer PRIMARY KEY,
some_col1 text,
some_col2 text,
some_col3 text)""")
conn.commit()

加載數據:

import psycopg2
conn = psycopg2.connect("host=localhost dbname=postgres user=postgres")
cur = conn.cursor()
with open('your_file.csv', 'r') as f:
next(f) # Skip the header row.
cur.copy_from(f, 'sometablename', sep=',')
conn.commit()

另一種方法是通過子流程:

host = "YOUR_HOST"
username = "YOUR_USERNAME"
dbname = "YOUR_DBNAME"

table_name = "my_table"
file_name = "my_10gb_file.csv"
command = "\copy {} FROM '{}' DELIMITER ',' CSV HEADER".format(table_name, file_name)

psql_template = 'psql -p 5432 --host {} --username {} --dbname {} --command "{}"'

bash_command = psql_template.format(host, username, dbname, command.strip())

process = subprocess.Popen(bash_command, stdout=subprocess.PIPE, shell=True) 

output, error = process.communicate()

RDS 具有對 PostgreSQL 的特殊擴展,用於從 S3 導入數據。 您可以使用 python 的 psycopg2 調用 aws_s3.table_import_from_s3() SQL function,但是這樣做並沒有什么特別“pythonic”的,任何其他向數據庫發出命令的方式都可以。

如果由於某種原因您不喜歡這樣,您可以使用一個python 庫從 S3 打開 stream,然后將該文件(如 object 或 copy_copg2's

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM