Настройка Snowflake converter_class По-прежнему преобразуется в типы данных Python

0

Вопрос

В документах для соединителя python Snowflake говорится, что установка параметра подключения converter_class при создании объекта подключения можно использовать для подавления преобразования в типы python (оставляет данные в виде строк). Но я не вижу разницы между запросами, выполняемыми со следующими двумя соединениями (с использованием snowflake-connector-python=2.7.0):

from snowflake.connector.converter_null import SnowflakeNoConverterToPython

DBH1 = snowflake.connector.connect(
       user='username',
       password='password',
       account='account',
       converter_class=SnowflakeNoConverterToPython      # why isn't this working?
    )

DBH2 = snowflake.connector.connect(
       user='username',
       password='password',
       account='account'
    )

Запросы, выполняемые как из DBH1, так и из DBH2, возвращают метки времени в виде объектов python datetime, а не строк. Я заметил это в документе на snowflake.connector параметры, нет упоминания о converter_class опция - этот трюк указан только в разделе "оптимизация извлечения данных" здесь: https://docs.snowflake.com/en/user-guide/python-connector-example.html#improving-query-performance-by-bypassing-data-conversion. Возможно ли, что эта функция была удалена без очистки документа?

1

Лучший ответ

1

Когда эта функция была добавлена изначально, она предназначалась только для формата набора результатов JSON. С тех пор мы перенесли результирующий набор в ARROW, и для этого формата он действительно не работает (теперь формат по умолчанию-СТРЕЛКА).

Для демонстрации я использую этот код:

ctx = snowflake.connector.connect(
        user=USER,
        password=PASSWORD,
        account=ACCOUNT,
        role=ROLE,
        database=DATABASE,
        schema=SCHEMA,
        warehouse=WAREHOUSE,
        converter_class=SnowflakeNoConverterToPython
        )

cs = ctx.cursor()

try:
        cs.execute("SELECT CURRENT_TIMESTAMP()")
        res  = cs.fetchone()
        print(f'{res[0]}')
        print(type(res[0]))
        print(isinstance(res[0], str))

Это возвращается ко мне:

2021-11-24 21:34:44.314000+13:00
<class 'datetime.datetime'>
False

Теперь я изменяю формат набора результатов обратно на исходный JSON:

try:
        cs.execute("alter session set python_connector_query_result_format='JSON'")
        cs.execute("SELECT CURRENT_TIMESTAMP()")

На этот раз я получаю:

1637742958.657000000
<class 'str'>
True

Формат СТРЕЛКИ имеет несколько преимуществ перед JSON, и вы можете прочитать больше здесь

2021-11-24 08:37:12

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................