【发布时间】:2018-01-30 05:25:34
【问题描述】:
我是 Google BigQuery 的新手,所以我想了解如何最好地完成我的用例。
我有存储在 BigQuery 中的每日客户访问数据,我希望使用我用 Python 编写的一些算法来分析这些数据。由于有多个脚本使用每日数据的子集,我想知道获取和临时存储数据的最佳方式是什么。此外,脚本以顺序方式运行。每个脚本都会修改一些数据列,随后的脚本会使用这些修改后的数据。在所有脚本运行后,我想将修改后的数据存储回 BigQuery。
我想到的一些方法是:
将 bigquery 表作为 db 文件导出到 GAE (Google App Engine) 实例中,并使用 sqlite3 python package 从 db 文件中查询每个脚本的相关数据。一旦所有脚本都运行完毕,将修改后的表存储回 BigQuery,然后从 GAE 实例中删除 db 文件。
每次我想使用 google-cloud python client library 或 pandas gbq package 运行脚本时,都从 BigQuery 查询数据。运行每个脚本后修改 BigQuery 表。
有人可以知道其中哪一个是实现这一目标的更好方法(就效率/成本而言)或提出替代方案吗?
谢谢!
【问题讨论】:
-
这可能取决于几个因素,因此您可能需要测试一些选项以查看最适合您的选项。选项
1将不起作用,因为 GAE 在大多数情况下是短暂的,因此您不能将其用作存储解决方案。选项2是可能的,您也可以先将数据导出到GCS,然后从那里下载所有脚本(这可能会降低成本)。不过,如果您有大数据,那么您可能希望使用 Dataproc 而不是 pandas 来使用分布式处理来处理数据。 -
将您的代码带到数据中,而不是相反。 SQL 和/或 JavaScript (UDF) 可以为您完成这项工作吗?
-
@WillianFuks:永久数据存储在 BigQuery 上,所以一旦所有 python 脚本运行,我想从 GAE 中删除数据。我不知道 Dataproc,谢谢,我会看看。
标签: python sqlite google-app-engine google-bigquery