如何对MySqlToGoogleCloudStorageOperator使用field_to_bigquery(self,field)函数

时间:2019-08-30 17:32:19

标签: google-cloud-platform airflow-operator

我正在尝试将一些数据从Mysql导出到GCS,然后将导出的json加载到BigQuery表中,但是我遇到了一些mysql数据类型(例如BIT和DateTime)的麻烦,因为在json结果中它们以某种格式出现这不适用于BigQuery

我想知道是否有一种方法可以将这些值转换为适合bigquery的格式,而无需执行额外的转换过程。

在MySqlToGoogleCloudStorageOperator(https://airflow.apache.org/_api/airflow/contrib/operators/mysql_to_gcs/index.html#airflow.contrib.operators.mysql_to_gcs.MySqlToGoogleCloudStorageOperator)的气流文档中,我可以看到一些可能会有所帮助的函数,例如:

field_to_bigquery(自身,字段) convert_type(自身,值,schema_type)

但是我不知道如何在我的代码中实现它。

我尝试过这样的事情:

MySQLtoGCS_TransTBComplete = MySqlToGoogleCloudStorageOperator(
        task_id='import,
        mysql_conn_id='mysql_default',
        google_cloud_storage_conn_id='google_cloud_storage_default',
        sql='SELECT * FROM table' 
        bucket='{bucket}',
        filename='file.json',
        dag=dag)

MySQLtoGCS_TransTBComplete.field_to_bigquery("datetime_field")

有人可以帮助我实现我想要的吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您不能在代码中专门使用这两个功能。

    如果您在运算符中设置了fs.createReadStream(path),则将使用
  • field_to_bigquery

  • schema_filename始终在任务执行期间使用(您可以在convert_type

  • 的源代码中看到它)

根据文档所述,似乎MySQL中的某些字段类型未正确处理(请参见此处:https://airflow.apache.org/docs/stable/_modules/airflow/contrib/operators/mysql_to_gcs.html#MySqlToGoogleCloudStorageOperator.field_to_bigquery)。因此,您可能必须实现继承sql_to_gcs.py类并覆盖这两个方法的自定义运算符。