BigQuery压缩响应

时间:2013-11-29 15:14:25

标签: google-bigquery

BigQuery是否可以返回压缩/ gzipped响应? 我在运行查询时注意到:

select * from [dataSet.tableId]

来自具有大量列(schema)但只有1mb大小的表,响应为13mb。可以理解BigQuery FLATTEN是其中一条记录,因此响应因JSON结构而变大。但是,BigQuery中生成的表格大小为2.04mb。我没有使用任何BigQuery客户端库,而是直接发出HTTP请求。是否有解决方案来获得与实际tableData相比较小的响应?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用tabledata集合来浏览表格中的数据。 (请注意,如果您正在使用jobs.getQueryResults(),那么同样的技术也可以。

另外,请注意,使用“select *”查询确实没有充分的理由,因为tabledata.list()操作可以让您从表中读取数据并且“select *”查询需要花钱,而tabledata.list()没有。

例如:

PROJECT=my_project
DATASET=my_dataset
TABLE=my_table
BASE_URL=https://www.googleapis.com/bigquery/v2
TABLES_URL=${BASE_URL}/projects/${PROJECT}/datasets/${DATASET}/tables
TABLEDATA_URL=${TABLES_URL}/${TABLE}/data
curl  -H "Authorization: Bearer ${AUTH_TOKEN}" \
    -H "Content-Type: application/json" \
    -X GET \
    "${TABLEDATA_URL}?maxResults=10"

请注意,这将返回一个名为“pageToken”的字段。您可以使用它来获取结果的下一页:

PAGE_TOKEN=<page token from response>
curl  -H "Authorization: Bearer ${AUTH_TOKEN}" \
    -H "Content-Type: application/json" \
    -X GET \
    "${TABLEDATA_URL}?maxResults=10&pageToken=${PAGE_TOKEN}"

答案 1 :(得分:2)

要使用原始HTTP API获取压缩输出,您需要指定两个标头 - User-Agent和Accpet-Encoding标头。 User-Agent必须是已知能够处理gzip的用户代理。

Accept-Encoding: deflate, gzip
User-Agent: gzip

AppEngine文档中有更多信息:http://code.google.com/appengine/kb/general.html#compression。虽然BigQuery不是AppEngine,但它与AppEngine共享许多网络基础架构,包括确定何时服务器压缩内容。