首页 文章

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

提问于
浏览
3

我一直在尝试创建一个工作,以便将来自Google Cloud Storage的压缩json文件添加到Google BigQuery表中 . 我在Google Cloud 端存储和Google BigQuery中都具有读/写访问权限 . 此外,上传的文件与BigQuery属于同一个项目 .

当我通过 POST 请求访问此URL 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或放置在身份验证标头中的访问令牌中,因为我之前已经成功创建了一个空表 . 另外我将内容类型 Headers 指定为 application/json ,我认为这不是问题,因为正文内容应该是json编码的 .

提前致谢

1 回答

  • 1

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

    您需要确保以上所有(接缝正确)是POST调用的 body . 上面的 Json 应该在一行上,如果手动创建多部分消息,请确保每个MIME类型的 Headers 和正文之间有一个额外的换行符 .

    如果您正在使用某种类型的库,请确保不要使用其他形式的主体,例如资源,内容或正文 . 我见过以不同方式使用这些库的库 .

    试用BigQuery API资源管理器:https://developers.google.com/bigquery/docs/reference/v2/jobs/insert并确保您的请求正文与API生成的正文匹配 .

相关问题