Поддерживает ли Snowflake Driver Driver Fast_executemany - Проблема с столбцами varchar (max)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Поддерживает ли Snowflake Driver Driver Fast_executemany - Проблема с столбцами varchar (max)

Сообщение Anonymous »

сценарий:
Я пытаюсь создать простой скрипт Python, в котором используется pyodbc и работает с различными данными, сообщает SQLServer, AzuresQL, Snowflake и т. Д. У нас есть проблема при попытке загрузить с SQL Server в Snowflake. Источник содержит столбец, чей дат данных - varchar (max) .
Вот проблемы/вопросы, встречающиеся. Не в состоянии найти документацию, которая поддерживает это.
[*] Если fast_executemany установлен на true , я получаю память . Конечно, я видел различные проблемы и статьи, в которых обсуждаются это, но ни один из предпринятых подходов, похоже, не исправил это. Например, попробовали Snow_cursor.SetInputSizes ([((PYODBC.SQL_WVARCHAR, 0, 0)]) и SNOW_CURSOR.SETINPUSIZESIZES ([(PYODBC.SQL_WVARCHARCHAR, 16777216, 0)]) . Оба терпят неудачу.
Если fast_executemany устанавливается на ложь, записи получают вставленные одному, что мучительно медленное. PrettyPrint-Override ">import pyodbc

# Snowflake connection parameters
print("Starting script execution...")

# Snowflake connection parameters
conn_params = {
'DRIVER': 'SnowflakeDSIIDriver',
'SERVER': '.snowflakecomputing.com',
'DATABASE': '',
'SCHEMA': '',
'WAREHOUSE': '',
'ROLE': '',
'AUTHENTICATOR': 'snowflake_jwt',
'PRIV_KEY_FILE': '',
'PRIV_KEY_FILE_PWD': '',
'UID': '',
'CLIENT_SESSION_KEEP_ALIVE': 'TRUE'
}

print("Connection parameters defined...")

# SQL Server connection parameters
sql_params = {
'DRIVER': '{ODBC Driver 18 for SQL Server}',
'SERVER': '',
'DATABASE': '',
'INSTANCE': '',
'ENCRYPT': 'yes',
'TRUSTSERVERCERTIFICATE': 'yes',
'CONNECTION_TIMEOUT': '30',
'UID': '',
'PWD': ''
}

# Create connection strings
snow_conn_str = ';'.join([f"{k}={v}" for k, v in conn_params.items()])
sql_conn_str = ';'.join([f"{k}={v}" for k, v in sql_params.items()])

try:
# Connect to SQL Server
sql_conn = pyodbc.connect(sql_conn_str)
sql_cursor = sql_conn.cursor()

# Connect to Snowflake
snow_conn = pyodbc.connect(snow_conn_str)
snow_cursor = snow_conn.cursor()
snow_cursor.fast_executemany = False #True
# snow_cursor.setinputsizes([(pyodbc.SQL_WVARCHAR, 0, 0)])
snow_cursor.setinputsizes([(pyodbc.SQL_WVARCHAR, 16777216, 0)])

# Prepare insert query
insert_query = """
INSERT INTO SNOWFLAKE_TABLE
(COL_01, COL_02, COL_03, COL_04,
COL_05, COL_06, COL_07, COL_08, COL_09)
VALUES (?,?,?,?,?,?,?,?,?)
"""

# Source query
source_query = "SELECT top 1000 * FROM with (nolock)"
sql_cursor.execute(source_query)
print("SQL query executed successfully")

batch_size = 1000
total_rows = 0

while True:
# Fetch batch of rows
rows = sql_cursor.fetchmany(batch_size)
print(f"Fetched {len(rows) if rows else 0} rows from SQL Server")
if not rows:
break

# Insert batch into Snowflake
snow_cursor.executemany(insert_query, rows)
print(f"Executed batch insert of {len(rows)} rows to Snowflake")
snow_conn.commit()
print("Committed changes to Snowflake")

total_rows += len(rows)
print(f"Inserted {len(rows)} rows. Total rows processed: {total_rows}")

print(f"Successfully completed. Total rows inserted: {total_rows}")

except pyodbc.Error as e:
print(f"ODBC Error: {str(e)}")
import traceback
print(traceback.format_exc())
raise # Re-raise to see full error chain
except Exception as f:
print(f"Unexpected error: {str(f)}")
import traceback
print(traceback.format_exc())
raise # Re-raise to see full error chain

finally:
# Close all connections
for cursor in [sql_cursor, snow_cursor]:
if cursor in locals():
cursor.close()
for conn in [sql_conn, snow_conn]:
if conn in locals():
conn.close()


Подробнее здесь: https://stackoverflow.com/questions/795 ... charmax-co
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать приведение к varchar(max) с STRING_AGG, используя Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Как использовать приведение к varchar(max) с STRING_AGG, используя Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Как мне установить столбец в SQL Server на Varchar (max), используя аннотации данных ASP.NET EF CodeFirst?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • JPA - Как установить строковый столбец в varchar (max) в DDL
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • JPA - Как установить строковый столбец в varchar (max) в DDL
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»