#pandas #dataframe #snowflake-cloud-data-platform
#pandas #фрейм данных #snowflake-платформа облачных данных
Вопрос:
Я пытаюсь записать фрейм данных pandas в snowflake с помощью df.to_sql(), но получаю ошибку:
Конфликт контекстной версии: (idna 2.10 (/mnt/shared//conda), Requirement.parse(‘idna<2.10’), {‘snowflake-connector-python’})
мой код
urllib3.disable_warnin&s(urllib3.exceptions.InsecureRequestWarnin&)
try:
headers = {'content-type': 'application/x-www-form-urlencoded'}
data = {
'&rant_type': 'password',
'scope': 'SESSION:ROLE-ANY',
'username': sf_schema,
'password': password,
'client_id': snf_url
}
response = requests.post(oauth_url, data=data, headers=headers, verify=False, proxies=proxyDict)
except Exception as e:
print(e)
oauth_token = str(json.loads(response.text)['access_token']).strip()
en&ine = create_en&ine(URL(
account=account,
role=role,
user=sf_schema.lower() "@<domain&&t;.COM",
warehouse=warehouse.upper(),
database=database.upper(),
schema=sf_schema.upper(),
authenticator="oauth",
token=oauth_token))
connection = en&ine.connect()
try:
df.to_sql(sf_table_name, con=en&ine, index=False, chunksize=15000, if_exists='replace', method='multi')
connection.close()
en&ine.dispose()
except snowflake.connector.errors.Pro&rammin&Error as e:
print(e)
print('Error {0} ({1}): {2} ({3})'.format(e.errno, e.sqlstate, e.ms&, e.sfqid))
connection.close()
en&ine.dispose()
Я могу считывать данные из snowflake в pandas с помощью snowflake.connector. Итак, подключение здесь не проблема
Ответ №1:
Проблема здесь в том, что snowflake-connector-python требует более низкой версии пакета idna. Вы можете переустановить правильную версию idna с помощью:
pip install 'idna==2.9' --force-reinstall
Ответ №2:
Я не знаю, решает ли это вашу проблему или нет, но я бы рекомендовал использовать write_pandas()
функцию вместо to_sql()
функции или to_sql()
функцию с pd_writer
методом.
Оба будут использовать PUT и COPY INTO для получения данных в Snowflake и избегать инструкций INSERT. Это должно быть намного быстрее (и, возможно, избежать ошибки, которую вы получаете).