我的智慧到此为止,任何指针都值得赞赏。
我正在查询Google Analytics(分析)API,将响应转换为适当的JSON格式,并使用Urlfetchapp使用多部分请求将其加载到bigQuery中。但这导致我每天很快达到Urlfetchapp 100MB配额,因此我正在寻找将JSON压缩为GZIP并将其加载到bigQuery的方法(我考虑过Google Cloud Storage,但与保存数据有同样的问题到GCS的用户也首先需要Urlfetchapp,因此这就是Google Apps脚本问题)。
[我已经将数据转换为blob,然后使用Utilities.zip将其压缩并发送了字节,但是经过大量调试后,结果显示格式为.zip,而不是.gzip ..
这是在我的Apps脚本(NEWLINE_DELIMITED_JSON)中创建的json字符串
{"ga_accountname":"photome","ga_querycode":"493h3v63078","ga_startdate":"2013-10-23 00:00:00","ga_enddate":"2013-10-23 00:00:00","ga_segmentname":"#_all_visits","ga_segmentexp":"ga:hostname=~dd.com","ga_landingPagePath":"/","ga_pagePath":"/","ga_secondPagePath":"(not set)","ga_source":"(direct)","ga_city":"Boden","ga_keyword":"(not set)","ga_country":"Sweden","ga_pageviews":"1","ga_bounces":"0","ga_visits":"1"}
我已经解决了其余的API请求(使用可恢复的uploadType,作业配置发送正常,压缩的blob字节可以上传,但是bigQuery表示“输入内容不包含数据。”这是我的Urlfetchapp参数。
// Sending job configuration first
var url = 'https://www.googleapis.com/upload/bigquery/v2/projects/' + bqProjectId +'/jobs?uploadType=resumable';
var options = {
'contentType': 'application/json; charset=UTF-8',
'contentLength': newJobSize,
'headers': {
'Accept-Encoding': 'gzip, deflate',
'Accept': 'application/json',
'X-Upload-Content-Length': zipSize,
'X-Upload-Content-Type': 'application/octet-stream'
},
'method' : 'post',
'payload' : jobData,
'oAuthServiceName' : 'bigQuery',
'oAuthUseToken' : 'always'
};
// Sending job data
var url = jobReq.getHeaders().Location;
var options = {
'contentType': 'application/octet-stream',
'contentLength': zipSize,
'contentRange': '0-'+zipSize,
'method' : 'put',
'payload' : zipBytes,
'oAuthServiceName' : 'bigQuery',
'oAuthUseToken' : 'always'
};
我有什么选择?我对API还是很陌生,但是我可以让Urlfetchapp为我将有效载荷压缩到GZIP吗?
[Google Apps脚本中目前尚无使用gzip的方法-UtilitiesApp.zip()方法仅使用常规zip压缩,而不使用gzip。
而不是使用UrlFetchApp进行分段上传,为什么不使用Google Apps脚本中提供的BigQuery library?
var projectId = "Bigquery-Project-Id";
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
sourceFormat: "NEWLINE_DELIMITED_JSON",
writeDisposition: "WRITE_APPEND"
}
}
};
var data = jobData;
job = BigQuery.Jobs.insert(job, projectId, data);
要启用它,您需要在两个地方打开BigQuery访问。
首先,您需要转到Apps UI中的资源下拉菜单,然后选择高级Google Services ...。在列表上找到“大查询”,然后为其切换“开/关”开关。
关闭高级服务窗口之前,您需要单击底部的Google's Developer Console链接。这将打开您的Google Apps脚本项目的开发者控制台。在控制台的API列表中找到Big Query并启用它。
就是这样-从那里,您可以使用BigQuery Apps类而不是UrlFetchApp将数据传递到BigQuery API。