【发布时间】:2017-05-09 14:45:00
【问题描述】:
我正在使用 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 下载所有数据(数千万行)是否不如将结果写入表,然后将其导出到谷歌存储,然后下载它?是否有任何现有的工具可以为我抽象出所有这些,让我运行一个查询,然后为我发送/下载完整的输出?
【问题讨论】:
-
这根本无法扩展。你的脚本对这些数据做了什么? BigQuery 专为分析和聚合而设计,而不是通过网络将数千万行拉入 bash 脚本。
-
就这个问题而言,脚本的作用并不重要,实际上我有多个管道,其中处理步骤执行各种不同的事情。我确实在使用 BigQuery 进行分析和聚合,但我需要以简单的方式处理数据。这对于我正在迁移的 AWS RedShift 来说是微不足道的。使用我的
head示例或从 GCS 下载似乎可以使用 BigQuery,但我想找到一个从我那里抽象出来的命令。 -
改用 Cloud Dataflow 管道怎么样?还是必须留在 bash 中?
标签: google-bigquery google-cloud-storage