BigQuery 上传作业返回错误 - 有效负载部分计数错误?
Posted
技术标签:
【中文标题】BigQuery 上传作业返回错误 - 有效负载部分计数错误?【英文标题】:BigQuery upload job returning errors - payload parts count wrong? 【发布时间】:2019-11-15 15:02:14 【问题描述】:我们在上传到 BigQuery/云存储时遇到错误:
请求
POST https://www.googleapis.com/upload/bigquery/v2/projects/XXX HTTP/1.1
Content-Type: multipart/related; boundary="PART_TAG_DATA_IMPORTER"
Host: www.googleapis.com
Content-Length: 652
--PART_TAG_DATA_IMPORTER
Content-Type: application/json; charset=UTF-8
"configuration":"load":"createDisposition":"CREATE_IF_NEEDED","destinationTable":"datasetId":"XX","projectId":"XX","tableId":"XX","schema":"fields":["mode":"required","name":"xx1","type":"INTEGER","mode":"required","name":"xx2","type":"STRING","mode":"required","name":"xx3","type":"INTEGER"],"skipLeadingRows":1,"sourceFormat":"CSV","sourceUris":["gs://XXX/9f41d369-b63e-4858-9108-7d1243175955.csv"],"writeDisposition":"WRITE_TRUNCATE"
--PART_TAG_DATA_IMPORTER--
回复:
HTTP/1.1 400 Bad Request
X-GUploader-UploadID: XXX
Content-Length: 77
Date: Fri, 15 Nov 2019 10:23:33 GMT
Server: UploadServer
Content-Type: text/html; charset=UTF-8
Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000
Payload parts count different from expected 2. Request payload parts count: 1
还有其他人收到吗?从昨晚开始一切都很好。我们的代码库没有任何变化,大约 80% 的案例都发生了错误,但在 5-6 次尝试后(有时)会出现错误。
我们正在使用 .NET 并拥有最新的 Google.Apis 库,但这可以通过对服务器的简单请求来重现。有时也能正常通过。
【问题讨论】:
如果您确定您的代码没有发生任何变化并且问题只是现在才出现,请打开一个支持案例,也许推出一个包含错误的功能... 我们已在企业支持下开票。他们说 google bigquery 存在内部问题。他们正在调查。 【参考方案1】:Google 在/upload/bigquery/v2/projects/projectId/jobs
端点中添加了一条无法接收单部分消息的规则。
/bigquery/v2/projects/projectId/jobs
根据此处的文档从 GCS 上传时需要使用(没有明确说明):
https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/insert
【讨论】:
在其余文档页面中添加了更多的 cmets,希望这两个 URI 的使用现在更加清晰。【参考方案2】:这看起来很奇怪。您似乎正在使用内联上传端点,但您在加载配置中传递了对 GCS 对象的引用,而不是发送内联上传。
您能否分享一下您是如何从 .NET 代码构建它的?
【讨论】:
这是相当正常的功能。我们一直在使用它。我们将 uri 添加到 GCS,而不是添加数据。这一直有效,直到昨晚。 通过 GCS 加载数据是完全常见的。不过,期望是您使用典型的作业元数据插入端点,例如/bigquery/v2/projects/projectId/jobs
。使用媒体上传端点 (/upload/bigquery/v2/projects/projectId/jobs
) 意味着您正在使用 multipart mime 发送数据和作业配置,这不是您在这里所做的。可能是端点现在正在执行这种期望。我想了解这些库是如何参与构建此请求的。以上是关于BigQuery 上传作业返回错误 - 有效负载部分计数错误?的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 异步查询作业 - fetch_results() 方法返回错误数量的值
错误:GoogleJsonResponseException:对 bigquery.jobs.get 的 API 调用失败并出现错误:未找到:作业 YXZ