[英]Read large data from Snowflake and write into a csv file using python
我必須使用python
連接器在Snowflake
讀取一個巨大的表(10M 行)並將其寫入一個 csv 文件。
我在snowfalke文檔中讀到了fetchmany
,
fetchmany([size=cursor.arraysize])
Purpose
Fetches the next rows of a query result set and returns a list of sequences/dict. An empty sequence is returned when no more rows are available.
我如何使用它並以塊的形式寫入 csv 文件,直到所有記錄都被完全寫入?
除非您真的不必為此使用python,否則最好將數據寫入舞台。
步驟是
1.
COPY INTO @~/stage_data
FROM (
(SELECT column_a, column_b, column_c
FROM table_one
WHERE column_b IN (SELECT column_ FROM table_two )
)
file_format = (TYPE=CSV compression='gzip') single=true max_file_size=4900000000;
2.
get @~/data file:///~/;
注意:上面的示例使用user stage
但您可以將其更改為您喜歡的階段類型。
fetchmany()
方法將從游標結果集中獲取提到的行數。 您可以拆分 select 語句,最終獲取記錄數並使用 python 游標並行執行。
例如,如果我的表有 2000 條記錄:
select * from table where id between 1 and 1000;
select * from table where id between 1001 and 2000;
請注意,我在導入的另一個文件中提供了我的連接詳細信息。 我從數據庫 testdb 和表 store_sales 中選擇 2 列
import snowflake.connector
from connections import conn
from snowflake.connector import DictCursor
import csv
cur = conn.cursor(DictCursor)
try:
sql = "use testdb"
cur.execute(sql)
sql = "select Branch_id , city from store_sales"
cur.execute(sql)
with open('file.csv', 'w+', newline="") as f:
csv_writer = csv.writer(f , delimiter=',')
for rec in cur:
csv_writer.writerow([rec['BRANCH_ID'],rec['CITY']])
finally:
cur.close()
使用fetch_pandas_all()並將數據加載到數據幀中
`
import pandas as pd
import snowflake.connector
ctx = snowflake.connector.connect(
<connection details> )
cs = ctx.cursor()
query='select * from foo'
cs.execute(query)
df = cs.fetch_pandas_all()
df.to_csv('output.csv.gz',
sep='|',
header=True,
index=False,
quoting=csv.QUOTE_ALL,
compression='gzip',
quotechar='"',
doublequote=True,
line_terminator='\n')
`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.