Чтение больших данных из Snowflake и запись в CSV-файл, используя python - PullRequest
0 голосов
/ 10 марта 2020

Мне нужно прочитать огромную таблицу (10M строк) в Snowflake, используя python соединитель, и записать ее в файл csv.

Я прочитал о fetchmany в документации Snowfalke,

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-файл кусками, пока все записи не будут полностью записаны?

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Было бы лучше записать данные в стадию, если вам не нужно использовать для этого 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, но вы можете изменить его на понравившийся вам тип сцены.

0 голосов
/ 12 марта 2020

Обратите внимание, что я дал мои данные соединения в другом файле, который я импортирую Я выбираю 2 столбца из базы данных testdb и таблицы store_sales

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()
0 голосов
/ 10 марта 2020

Метод fetchmany () извлекает количество упомянутых строк из вашего результирующего набора курсора. Вы можете разделить оператор select, в конечном итоге получить количество записей и выполнить их параллельно, используя курсор python.

, например, если в моей таблице 2000 записей: выберите * из таблицы, где id от 1 до 1000; выберите * из таблицы, где id от 1001 до 2000;

Надеюсь, это поможет!

Большое спасибо, Срига

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...