通过 POST 将 CSV 数据发送到 BigQuery REST API
Posted
技术标签:
【中文标题】通过 POST 将 CSV 数据发送到 BigQuery REST API【英文标题】:Sending CSV data to BigQuery REST API via POST 【发布时间】:2018-04-08 16:42:05 【问题描述】:我一直在尝试通过 POST 请求将 *.csv
blob 上传到 BigQuery,但我无法确定应将 blob 文件(即字节数据)放在请求中的哪个位置。
如果我使用客户端库,则此代码可以满足我的需要:
var job =
configuration:
load:
destinationTable:
projectId: projectId,
datasetId: datasetId,
tableId: tableId
,
skipLeadingRows: 1,
allowQuotedNewlines: true,
quote: "'",
sourceFormat: 'CSV'
;
var job = BigQuery.Jobs.insert(job, projectId, csv);
这很完美,但是在搜索 REST API 时,我看不到任何地方声明设置 *.csv
数据以便像这样工作,没有客户端库:
var job =
configuration:
load:
destinationTable:
projectId: projectId,
datasetId: datasetId,
tableId: tableId
,
skipLeadingRows: 1,
allowQuotedNewlines: true,
quote: "'",
sourceFormat: 'CSV'
;
var url = "https://www.googleapis.com/bigquery/v2/projects/" + projectId + "/jobs/";
var urlParams =
"method": "POST",
"muteHttpExceptions": true,
"contentType": "application/json",
"headers": "Authorization": "Bearer " + getBQToken(),
"responseType": "json",
payload: job,
;
var resp = UrlFetchApp.fetch(url, urlParams).getContentText();
var result = JSON.parse(resp);
在使用 REST API 方法时如何包含我的 CSV 数据和作业配置?
【问题讨论】:
documentation on uploads 有帮助吗? 【参考方案1】:上传请求有两种方式:分段上传和可恢复上传。分段上传是“用于快速传输较小的文件和元数据;将文件与描述它的元数据一起传输,所有这些都在一个请求中”。如here 所述(正如@Elliott Brossard 所指出的),可恢复上传是“为了可靠传输,尤其是对于较大的文件尤其重要”。在同一文档中找到以下 Google BigQuery API 示例的可恢复上传请求:
POST /upload/bigquery/v2/projects/<projectId>/jobs?uploadType=resumable HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer your_auth_token
Content-Length: 38
Content-Type: application/json; charset=UTF-8
X-Upload-Content-Type: */*
X-Upload-Content-Length: 2000000
"configuration":
"load":
"sourceFormat": "NEWLINE_DELIMITED_JSON",
"schema":
"fields": [
"name": "f1", "type": "STRING",
"name": "f2", "type": "INTEGER"
]
,
"destinationTable":
"projectId": "projectId",
"datasetId": "datasetId",
"tableId": "tableId"
【讨论】:
以上是关于通过 POST 将 CSV 数据发送到 BigQuery REST API的主要内容,如果未能解决你的问题,请参考以下文章
如何在 jmeter 的 post 请求中发送 csv 文件或 json 数据?
通过 angular http post 将 json 数据发送到 laravel 控制器
通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器