#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:
- Проблема в том, что когда вы извлекаете данные из Snowflake в Python, запрос застревает из-за объема записи и преобразования данных SF в Python.
- Пытаетесь ли вы извлечь все данные из таблицы и как вы используете данные в нисходящем потоке, что является наиболее важным? Ограничьте количество столбцов
- Повышение производительности запросов за счет обхода преобразования данных
Чтобы повысить производительность запросов, используйте класс 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