问题描述
我有一个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)