sql >> Databasteknik >  >> RDS >> Mysql

Airflow mysql till gcp Dag-fel

Enligt din spårning går din kod sönder på denna punkt . Som du kan se bearbetar den koden:

json.dump(row_dict, tmp_file_handle)

tmp_file_handle är en NamedTemporaryFile initierad med standardinmatningsarg, det vill säga simulerar en fil som öppnas med w+b läge (och accepterar därför endast byteliknande data som indata).

Problemet är att i Python 2 är alla strängar byte medan i Python 3 är strängar texter (kodade som standard som utf-8 ).

Om du öppnar en Python 2 och kör den här koden:

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)

Det fungerar bra.

Men om du öppnar en Python 3 och kör samma kod:

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'

Vi får samma felmeddelande som ditt.

Detta betyder att Airflow fortfarande inte stöds fullt ut för Python 3 (som du kan se i testtäckning , modulen airflow/contrib/operators/mysql_to_gcs.py är ännu inte testad vare sig i python 2 eller 3). Ett sätt att bekräfta detta är att köra din kod med python 2 och se om det fungerar.

Jag rekommenderar att du skapar ett problem på deras JIRA begär portabilitet för båda versionerna av Python.




  1. Hur man jämför datum i SQL

  2. GUI-verktyg för PostgreSQL

  3. Hur man kombinerar resultaten av två frågor i SQL

  4. Snabbaste sättet att uppdatera en MySQL-tabell om rad finns annars infoga. Mer än 2 icke-unika nycklar