sql >> Database >  >> RDS >> Mysql

Airflow mysql naar gcp Dag fout

Volgens uw traceback breekt uw code op dit punt . Zoals je kunt zien, verwerkt het de code:

json.dump(row_dict, tmp_file_handle)

tmp_file_handle is een NamedTemporaryFile geïnitialiseerd met standaard invoerargs, dat wil zeggen, het simuleert een bestand geopend met w+b modus (en accepteert daarom alleen bytes-achtige gegevens als invoer).

Het probleem is dat in Python 2 alle strings bytes zijn, terwijl in Python 3 strings teksten zijn (standaard gecodeerd als utf-8 ).

Als je een Python 2 opent en deze code uitvoert:

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)

Het werkt prima.

Maar als u een Python 3 opent en dezelfde code uitvoert:

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'

We krijgen dezelfde foutmelding als de uwe.

Dit betekent dat Airflow nog steeds niet volledig wordt ondersteund voor Python 3 (zoals je kunt zien in de dekking testen , de module airflow/contrib/operators/mysql_to_gcs.py is nog niet getest in python 2 of 3). Een manier om dit te bevestigen is door je code uit te voeren met python 2 en te kijken of het werkt.

Ik raad aan om een ​​probleem te maken op hun JIRA om overdraagbaarheid te vragen voor beide versies van Python.




  1. Parameteriseren van bestandsnaam in MYSQL LOAD DATA INFILE

  2. Hoe vervang ik een nieuwe regel in Oracle?

  3. Bereken de leeftijd in jaren in PostgreSQL

  4. MySQL gebruiken met Deno en Oak