сбой оператора выбора курсора snowflake

#python #snowflake-cloud-data-platform #snow

#python #snowflake-cloud-data-platform #снег

Вопрос:

«‘ cursor.execute(выберите * из таблицы); «‘

Я использую приведенный выше код для выполнения приведенного выше запроса select, но этот код застрял, потому что в таблице у меня 93 миллиона записей,

Есть ли у нас какой-либо другой метод для извлечения всех данных из таблицы snowflake в скрипте python

Ответ №1:

В зависимости от того, что вы пытаетесь сделать с этими данными, вероятно, было бы наиболее эффективным запустить COPY INTO location оператор для извлечения данных в файл на этап, а затем запустить GET через Python, чтобы перенести этот файл локально туда, где вы используете python.

Однако вы можете захотеть предоставить более подробную информацию о том, как вы используете данные в python после инструкции cursor.execute. Собираетесь ли вы выполнять итерацию по этому набору данных, чтобы что-то сделать (в этом случае вам, возможно, лучше вместо этого выдавать инструкции SQL непосредственно Snowflake), загружать их в Pandas, чтобы что-то сделать (в этом случае для pandas есть лучшие функции Snowflake), или что-то еще? Если вы просто создаете из него файл, то мое предложение выше сработает.

Ответ №2:

  1. Проблема в том, что когда вы извлекаете данные из Snowflake в Python, запрос застревает из-за объема записи и преобразования данных SF в Python.
  2. Пытаетесь ли вы извлечь все данные из таблицы и как вы используете данные в нисходящем потоке, что является наиболее важным? Ограничьте количество столбцов
  3. Повышение производительности запросов за счет обхода преобразования данных

Чтобы повысить производительность запросов, используйте класс SnowflakeNoConverterToPython в модуле snowflake.connector.converter_null для обхода преобразования данных из внутреннего типа данных Snowflake в собственный тип данных Python, например:

 con = snowflake.connector.connect(
    ...
    converter_class=SnowflakeNoConverterToPython
)
for rec in con.cursor().execute("SELECT * FROM large_table"):
    # rec includes raw Snowflake data