将 Google Cloud Storage 中存储的文件加载到 Big Query 时出错

问题描述 投票:0回答:2

我一直在尝试创建一个作业来将压缩的 json 文件从 Google Cloud Storage load 到 Google BigQuery 表。我对 Google Cloud Storage 和 Google BigQuery 都有读/写访问权限。此外,上传的文件与 BigQuery 属于同一项目。

当我通过 POST 请求访问此网址 https://www.googleapis.com/upload/bigquery/v2/projects/NUMERIC_ID/jobs 后面的资源时,就会出现问题。对上述资源的请求内容如下:

{
"kind" : "bigquery#job",
"projectId" : NUMERIC_ID,
"configuration": {
    "load": {
        "sourceUris": ["gs://bucket_name/document.json.gz"],
        "schema": {
            "fields": [
                {
                    "name": "id",
                    "type": "INTEGER"
                },
                {
                    "name": "date",
                    "type": "TIMESTAMP"
                },
                {
                    "name": "user_agent",
                    "type": "STRING"
                },
                {
                    "name": "queried_key",
                    "type": "STRING"
                },
                {
                    "name": "user_country",
                    "type": "STRING"
                },
                {
                    "name": "duration",
                    "type": "INTEGER"
                },
                {
                    "name": "target",
                    "type": "STRING"
                }
            ]
        },
        "destinationTable": {
            "datasetId": "DATASET_NAME",
            "projectId": NUMERIC_ID,
            "tableId": "TABLE_ID"
        }
    }
}

}

但是,该错误没有任何意义,也可以在下面找到:

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "invalid",
                "message": "Job configuration must contain exactly one job-specific configuration object (e.g., query, load, extract, spreadsheetExtract), but there were 0: "
            }
        ],
        "code": 400,
        "message": "Job configuration must contain exactly one job-specific configuration object (e.g., query, load, extract, spreadsheetExtract), but there were 0: "
    }
}

我知道问题不在于项目ID,也不在于身份验证标头中放置的访问令牌,因为我之前已经成功创建了一个空表。另外,我将内容类型标头指定为

application/json
,我认为这不是问题,因为正文内容应该是 json 编码的。

提前致谢

google-bigquery
2个回答
1
投票

您的 HTTP 请求格式错误 - BigQuery 根本无法将其识别为加载作业。 您需要查看 POST 请求,并检查您发送的正文。

您需要确保以上所有内容(接缝正确)都是 POST 调用的

body
。上面的
Json
应该在一行上,如果您手动创建多部分消息,请确保每个 MIME 类型的标头和正文之间有一个额外的换行符。

如果您正在使用某种库,请确保正文不以其他形式出现,例如资源、内容或正文。我见过以不同方式使用这些的库。

尝试使用 BigQuery API 浏览器:https://developers.google.com/bigquery/docs/reference/v2/jobs/insert 并确保您的请求正文与 API 发出的请求正文相匹配。


0
投票

https://cloud.google.com/bigquery/docs/error-messages

由于区域错误,您也会收到类似的错误。所以,一定要通过正确的区域。

© www.soinside.com 2019 - 2024. All rights reserved.