我正在使用BigQuery进行一些数据处理,并希望将某些查询的输出用作数据处理管道下一阶段的输入,理想情况下允许我这样做:
bigquery $QUERY | ./process.sh
我能够通过以下方式实现类似的目标:
bq --nosync query --max_rows 100000000 --use_cache --batch --use_legacy_sql=false $QUERY
bq wait $JOBID
bq --format csv head -j $JOBID --max_rows 100000000 | ./process.sh
但我不确定使用head
下载所有数据(数千万行)是否效率低于将结果写入表格,然后将其导出到Google存储,然后下载吗?是否有任何现有的工具可以为我提取所有这些,让我运行一个查询,然后为我发送/下载完整的输出?
答案 0 :(得分:0)
使用head
您可能会达到API配额限制,而且这些数据的性能非常差,因为它不是它的目的。另请注意,设置max_rows above the limit只会返回限制。您想要导出目标表是正确的方法。
您可以找到有关导出here以及从gcs here下载的详细信息。
bq extract --destination_format=NEWLINE_DELIMITED_JSON 'bigquery-public-data:samples.shakespeare' gs://example-bucket/shakespeare.json
gsutil cp -r gs://example-bucket/shakespeare.json local_dir