BigQuery是否可以返回压缩/ gzipped响应? 我在运行查询时注意到:
select * from [dataSet.tableId]
来自具有大量列(schema)但只有1mb大小的表,响应为13mb。可以理解BigQuery FLATTEN是其中一条记录,因此响应因JSON结构而变大。但是,BigQuery中生成的表格大小为2.04mb。我没有使用任何BigQuery客户端库,而是直接发出HTTP请求。是否有解决方案来获得与实际tableData相比较小的响应?
由于
答案 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共享许多网络基础架构,包括确定何时服务器压缩内容。