Konfiguracja Snowflake converter_class nadal przekształca się w typy danych w języku Python

0

Pytanie

W dokumentach, do łącznika python Snowflake mówi się, że ustawienie opcji połączenia converter_class podczas tworzenia obiektu połączenia można użyć do tłumienia konwersji do typów pythona (pozostawia dane w postaci wierszy). Ale ja nie widzę różnicy między żądaniami, co się stanie z następującymi dwoma złączami (z wykorzystaniem 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'
    )

Zapytania wykonywane z DBH1, jak i z DBH2, zwraca znacznik czasu w postaci obiektów pythona datetime, a nie wierszy. Zauważyłem to w dokumencie na snowflake.connector parametry, nie ma wzmianki o converter_class opcja ta sztuczka jest określony tylko w dziale "optymalizacja pobierania danych" tutaj: https://docs.snowflake.com/en/user-guide/python-connector-example.html#improving-query-performance-by-bypassing-data-conversion. Czy to możliwe, że ta funkcja została usunięta bez czyszczenia dokumentu?

1

Najlepsza odpowiedź

1

Gdy ta funkcja została dodana początkowo była przeznaczona tylko dla formatu zestawu wyników JSON. Odkąd przenieśliśmy zestaw wyników w ARROW, i dla tego formatu pliku jest naprawdę nie działa (teraz domyślny format-STRZAŁKA).

Do demonstracji używam ten kod:

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))

To wraca do mnie:

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

Teraz mogę zmienić format zestawu wyników z powrotem na oryginalny JSON:

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

Tym razem otrzymuję:

1637742958.657000000
<class 'str'>
True

Format ZEGARA ma kilka zalet w stosunku do JSON, i możesz przeczytać więcej tutaj

2021-11-24 08:37:12

W innych językach

Ta strona jest w innych językach

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