Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur de flux d'air mysql vers gcp Dag

D'après votre trace, votre code est cassé à ce point . Comme vous pouvez le voir, il traite le code :

json.dump(row_dict, tmp_file_handle)

tmp_file_handle est un NamedTemporaryFile initialisé avec les arguments d'entrée par défaut, c'est-à-dire qu'il simule un fichier ouvert avec w+b mode (et n'accepte donc que des données de type octets en entrée).

Le problème est qu'en Python 2, toutes les chaînes sont des octets alors qu'en Python 3, les chaînes sont des textes (encodés par défaut en utf-8 ).

Si vous ouvrez un Python 2 et exécutez ce code :

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)

Cela fonctionne bien.

Mais si vous ouvrez un Python 3 et exécutez le même code :

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'

Nous obtenons la même erreur que la vôtre.

Cela signifie qu'Airflow n'est toujours pas entièrement pris en charge pour Python 3 (comme vous pouvez le voir dans le couverture de test , le module airflow/contrib/operators/mysql_to_gcs.py n'est pas encore testé en python 2 ou 3). Une façon de confirmer cela serait d'exécuter votre code en utilisant python 2 et de voir si cela fonctionne.

Je recommanderais de créer un problème sur leur JIRA demande de portabilité pour les deux versions de Python.