sql >> Databáze >  >> RDS >> Mysql

Chyba Airflow mysql na gcp Dag

Podle vašeho sledování se váš kód láme na tento bod . Jak můžete vidět, zpracovává kód:

json.dump(row_dict, tmp_file_handle)

tmp_file_handle je NamedTemporaryFile inicializováno s výchozími vstupními argumenty, to znamená, že simuluje soubor otevřený pomocí w+b režimu (a proto přijímá jako vstup pouze data podobná bajtům).

Problém je v tom, že v Pythonu 2 jsou všechny řetězce bajty, zatímco v Pythonu 3 jsou řetězce texty (standardně kódované jako utf-8 ).

Pokud otevřete Python 2 a spustíte tento kód:

In [1]: from tempfile import NamedTemporaryFile
In [2]: tmp_f = NamedTemporaryFile(delete=True)
In [3]: import json
In [4]: json.dump({'1': 1}, tmp_f)

Funguje to dobře.

Ale pokud otevřete Python 3 a spustíte stejný kód:

In [54]: from tempfile import NamedTemporaryFile
In [55]: tmp_f = NamedTemporaryFile(delete=True)
In [56]: import json
In [57]: json.dump({'1': 1}, tmp_f)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-57-81743b9013c4> in <module>()
----> 1 json.dump({'1': 1}, tmp_f)

/usr/local/lib/python3.6/json/__init__.py in dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
    178     # a debuggability cost
    179     for chunk in iterable:
--> 180         fp.write(chunk)
    181 
    182 

/usr/local/lib/python3.6/tempfile.py in func_wrapper(*args, **kwargs)
    481             @_functools.wraps(func)
    482             def func_wrapper(*args, **kwargs):
--> 483                 return func(*args, **kwargs)
    484             # Avoid closing the file as long as the wrapper is alive,
    485             # see issue #18879.

TypeError: a bytes-like object is required, not 'str'

Dostáváme stejnou chybu jako vy.

To znamená, že Airflow stále není plně podporován pro Python 3 (jak můžete vidět v testovací pokrytí , modul airflow/contrib/operators/mysql_to_gcs.py ještě není testován v pythonu 2 ani 3). Jedním ze způsobů, jak to potvrdit, by bylo spustit svůj kód pomocí pythonu 2 a zjistit, zda to funguje.

Doporučuji vytvořit problém na jejich JIRA požadavek na přenositelnost pro obě verze Pythonu.




  1. Instalace ovladačů PDO pro PostgreSQL na Mac (pomocí Zend pro Eclipse)

  2. Používáte Excel pro svou databázi? Zde je důvod, proč byste měli upgradovat na přístup

  3. Provádění auditu změn dat pomocí časové tabulky

  4. Struktura databáze pro uchovávání statistik podle dne, týdne, měsíce, roku