CSV行中的最后一个字段为空,导致错误:CSV表引用列位置19,但从位置325开始的行仅包含19列

cxfofazt  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个DAG气流任务,它进入一个特定的桶,并从内部的所有文件一起创建一个外部表。当我试图在bigquery中查询外部表时,我得到了错误(CSV表引用列位置19,但从位置325开始的行只包含19列。我已经看过它提到的特定文件,第一行(和其他)的最后一个字段是空白的,如果它什么都没有,它应该是0,或者如果有一些东西,它应该是一个数字。我该如何着手解决这个问题?
文件中的记录示例:

我已经滚动了,所以你可以看到最后一列(第19列是总件)所有其他记录在这个领域有一个数字,甚至是0。第一个记录什么都没有,还有其他一些记录。我可以想象这可能会再次发生在其他文件太,所以我不能手动只是修复它们。

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",
            "allow_quoted_newlines": 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",
        ),
    },
)
wfveoks0

wfveoks01#

任务“allow_jagged_rows”的选项允许在创建外部表时摄取最后一列中缺少数据的记录。或者任何表,我的新任务如下所示:

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",
            "allow_quoted_newlines": True,
            "allow_jagged_rows":True, ##Added option
            "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",
        ),

相关问题