首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON有效负载压缩到GZIP,以便用Url取章节加载到bigQuery中?( Utilities.zip不兼容gzip )

将JSON有效负载压缩到GZIP,以便用Url取章节加载到bigQuery中?( Utilities.zip不兼容gzip )
EN

Stack Overflow用户
提问于 2014-01-02 02:46:58
回答 2查看 2.1K关注 0票数 4

我的智慧在这里结束了,所以任何指点都很感激。

我正在查询,将响应转换为适当的JSON格式,并使用Url记忆体p使用多部分请求将其加载到bigQuery中。但是,这会导致我每天非常快地访问Url取章节100 me的配额,因此我正在研究将JSON压缩到GZIP并将其加载到bigQuery中的方法(我考虑过,但我也会遇到同样的问题,因为将数据保存到GCS首先需要的也是Url记忆章,所以这就是为什么这是一个Google脚本问题)。

我已经将数据转换为blob,然后使用Utilities.zip压缩数据并发送字节,但是经过多次调试,结果证明格式是.zip,而不是.gzip。

下面是在我的应用程序脚本(NEWLINE_DELIMITED_JSON)中创建的json字符串

代码语言:javascript
复制
{"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可恢复,作业配置发送of,压缩的blob字节上传良好,但bigQuery说“输入没有数据”)。这是我的Url记忆体的参数。

代码语言:javascript
复制
        // 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相当陌生,但我可以让Url记忆章将有效负载压缩到GZIP吗?

EN

回答 2

Stack Overflow用户

发布于 2014-09-15 17:35:16

目前在Google脚本中没有任何方法可以使用gzip -- UtilitiesApp.zip()方法只使用常规压缩,而不是gzip。

与其使用UrlFetchApp形成多部分上传,为什么不使用Google脚本中存在的BigQuery库呢?

代码语言:javascript
复制
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开发人员控制台链接。这将打开您的Google脚本项目的开发者控制台。在控制台中的API列表中查找大型查询并启用它。

就是这样-在那里,您可以使用BigQuery应用程序类而不是UrlFetchApp将数据传递给BigQuery API。

票数 1
EN

Stack Overflow用户

发布于 2020-06-06 00:35:41

2020状态

对于那些在2020年查看这个问题的人来说,对gzip的支持已经增加了一段时间,并且可以在Utilities服务方法gzip()及其相应的覆盖下使用。

全球合作框架选项

使用BigQuery高级服务的另一个选择是将UrlFetchApp和Google脚本项目改为云功能。在这里,人们可以选择编写和使用压缩所需的库/包的首选语言(例如,NodeJS有一个现成的Zlib 模块 )。

参考资料

  1. gzip方法参考文献
  2. 云函数参考文献
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20875581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档