气流-BigQuery模式字段中的值无效

问题描述

我有一个GCP云编写器,可以将数据从GCS加载到BQ中。我使用schema_fields选项传递源模式。我将源模式传递给变量。我是从xcom pull那里得到的。请参见下面的print(schema)

[{"mode": "NULLABLE","name": "id","type": "INTEGER"},{"mode": "NULLABLE","name": "c1","type": "DATE"},"name": "c2","type": "TIME"},"name": "c3","type": "DATETIME"},"name": "c4","type": "TIMESTAMP"}]

在BQ运算符中,我使用schema_fields=schema

但是当我运行dag时,它会抛出错误

ERROR - <HttpError 400 when requesting https://bigquery.googleapis.com/bigquery/v2/projects/xxx-xxx/jobs?
alt=json returned "Invalid value at 'job.configuration.load.schema.fields' (type.googleapis.com/google.cloud.bigquery.v2.TableFieldSchema),"[{"mode": "NULLABLE","type": "TIMESTAMP"}]"">

但是当我将此模式另存为GCS中的文件并尝试使用schema_object时,它就可以了。但是通过变量进行同样的操作不起作用。

解决方法

Schema_fields 参数接受有效列表。目前还没有模板化。

我使用过这个示例字段并且它正在工作。请检查类似的格式,看看它是否适合您。

schema_fields=[
                 {'name': 'Col1','type': 'STRING','mode': 'NULLABLE'},{'name': 'Col2',]
,

我能够通过使用json.loads解决此问题

schema=json.loads(xcom_pull commands)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...