簡體   English   中英

從雪花讀取大數據並使用python寫入csv文件

[英]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.

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