【发布时间】:2017-03-27 07:19:36
【问题描述】:
我正在尝试使用 Google Apps 脚本通过 BigQuery API 将数据附加到 BigQuery 表中。要附加的数据当前是 CSV 格式。到目前为止,我发现您可以使用tabledata().insertAll() 来stream data into BigQuery,但它看起来需要 json 格式,我什至不相信它会做我需要做的事情。我缺少一个直接的解决方案吗?因为我知道 BigQuery 支持追加,但我发现的所有内容都真正专注于将数据加载到新表中。
编辑:
听起来tabledata().insertAll() 确实是正确的使用方法(希望如此)。所以我将我的文件转换为 json,但现在我被困在如何实际使用它上。我正在尝试根据reference page for it 来确定我正在做的事情,但这对我来说仍然很困惑。目前,当我运行我的代码并遇到fetch 调用时,我收到404 错误。我正在尝试获取 URL,也许这不是我应该做的事情?我对 API 真的很陌生,我仍在弄清楚它们是如何工作的。这是我目前拥有的导致此问题的代码:
var tableId = 'users';
var file = DriveApp.getFileById(jsonId);
//I don't know if a blob is the type that I want or not, but I'm trying it
var data = file.getBlob();
var url = 'https://www.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/tableId/insertAll'
.replace("PROJECT_ID", params.PROJECT_ID)
.replace("DATASET_ID", params.DATASET_ID)
.replace("tableId", tableId);
var response = UrlFetchApp.fetch(url, {
"kind": "bigquery#tableDataInsertAllRequest",
"skipInvalidRows": 0,
"ignoreUnknownValues": 0,
"rows": [
{
"json": data
}
],
headers: {
Authorization: 'Bearer ' + service.getAccessToken()
}
});
var result = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(result, null, 2));
【问题讨论】:
-
您已经确定了方法,将数据转换为正确的格式只是解析csv并将其编码为JSON的问题,您在哪一步遇到问题?你已经尝试过什么
-
那么
insertAll()方法确实是我想要的吗?然后我的问题是找到一种体面的方法将 CSV 文件转换为 json(最好使用 Google Apps 脚本)我猜。加上实际上弄清楚函数调用是如何工作的。我真的怀疑这是否是我正在寻找的正确方法。 -
好的,我想我现在有 json 格式的数据(希望是正确的)。不过,从这里开始,我正在努力实际调用 API。我现在可以用更多细节更新我的问题。
-
Google Apps 脚本可以启用 BigQuery API 而无需进行提取,您只需在开发者控制台中激活并启用即可。看看我的回答。
标签: google-apps-script google-api google-bigquery