提问人:unnest_me 提问时间:10/5/2023 最后编辑:unnest_me 更新时间:10/13/2023 访问量:63
出现错误:从 GCS 存储桶中使用 BigQueryUpsertTableOperator 后读取表时缺少右引号字符 (“)
Getting Error: Missing close quote character (") when reading table after using BigQueryUpsertTableOperator from GCS bucket
问:
我有一个任务,从特定的存储桶路径读取所有文件。所有这些文件都遵循相同的架构/格式,唯一的区别是数据来自每天,因此文件名是 blahblah-(date).csv。我正在使用 BigQueryUpsertTableOperator 任务对这些文件进行通配符,并将它们全部放入同一个外部表中。我遇到的问题是,当尝试在bigquery中查询此表时,我收到此错误:
Error while reading table: irm-eap-edp-ingestion-nonprod.route4me.routes_external, error message: Error detected while parsing row starting at position: 44648. Error: Missing close quote character ("). File: gs://ingestion-bucket/data/blahblah-2023-06-28.csv
此处指定从此日期开始的文件有问题。我已经下载了这个特定的文件,并在谷歌表格上检查了它,看看是否有任何未公开的报价,并发现有人用月日输入数据。所以这是正在打开但随后未关闭的报价。我相信这就是正在发生的问题。BLR 28th June'23 (Original Route: XN)
如何自动编辑这些文件以将特定列括在全引号中?或者避免引号导致此问题。
我已经在我的任务中指定了“allowQuotedNewlines”: True。因为我事先在没有它的情况下遇到了这个问题。但是仍然遇到这个问题。
这是我目前从 gcs 存储桶创建外部表的 DAG 任务。
# Create external tables
create_external_table = BigQueryUpsertTableOperator(
task_id=f"create_external_{TABLE}_table",
dataset_id=DATASET,
project_id=INGESTION_PROJECT_ID,
table_resource={
"tableReference": {"tableId": f"{TABLE}_external"},
"externalDataConfiguration": {
"sourceFormat": "CSV",
"allowQuotedNewlines": True,
"autodetect": True,
"sourceUris": [f"gs://{ARCHIVE_BUCKET}/{DATASET}_data/*.csv"],
},
"labels": labeler.get_labels_bigquery_table_v2(
target_project=INGESTION_PROJECT_ID,
target_dataset=DATASET,
target_table=f"{TABLE}_external",
),
},
)
编辑:出于某种原因,我下载了文件本身,并尝试通过上传手动创建表格。尝试创建表,但失败了。然后我在高级设置中选择了允许引号新行,并且该表创建良好,我可以查询它。我是否在我的任务中没有使用正确的标志,或者它是否有效?(“allowQuotedNewlines”: 真,)
答:
我发现我使用了错误的“allowQuotedNewlines”选项,相反,它应该是“allow_quoted_newlines”,该过程现在正在按预期工作。
评论
allowQuotedNewlines