【发布时间】:2014-01-19 11:11:11
【问题描述】:
我在我的智慧在这里结束,所以任何指针都非常感谢。
我正在查询 Google Analytics API,将响应转换为适当的 JSON 格式,并使用 Urlfetchapp 使用多部分请求将其加载到 bigQuery。但这导致我很快就达到了 Urlfetchapp 每天 100MB 的配额,所以我正在寻找将 JSON 压缩为 GZIP 并将其加载到 bigQuery 的方法(我考虑过 Google Cloud Storage,但我会遇到与保存数据相同的问题到 GCS 首先也需要 Urlfetchapp,这就是为什么这是一个 Google Apps 脚本问题。
我已将数据转换为 blob,然后使用 Utilities.zip 对其进行压缩并发送字节,但经过大量调试后发现格式是 .zip,而不是 .gzip..
这是在我的 Apps 脚本中创建的 json 字符串 (NEWLINE_DELIMITED_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 吗?
【问题讨论】:
-
能否包含分配 zipSize 和 zipBytes 的代码?
标签: json google-apps-script google-bigquery google-cloud-storage urlfetch