使用python导出BigQuery数据以进行分析

时间:2018-01-30 05:25:34

标签: python sqlite google-app-engine google-bigquery

我是Google BigQuery的新手,所以我试图了解如何最好地完成我的用例。

我每天都有存储在BigQuery中的客户访问数据,我希望使用python编写的一些算法进行分析。因为,有多个脚本使用每日数据的子集,我想知道什么是获取和临时存储数据的最佳方法。此外,脚本以顺序方式运行。每个脚本都会修改数据的某些列,后续脚本会使用此修改后的数据。在所有脚本运行之后,我想将修改后的数据存储回BigQuery。

我想到的一些方法是:

  1. 将bigquery表导出为GAE(Google App Engine)实例作为db文件,并使用sqlite3 python package从db文件中查询每个脚本的相关数据。一旦所有脚本都运行,将修改后的表存储回BigQuery,然后从GAE实例中删除db文件。

  2. 每次我想使用google-cloud python client librarypandas gbq package运行脚本时,都会从BigQuery查询数据。运行每个脚本后修改BigQuery表。

  3. 有人知道哪一种更好的方法可以实现这一目标(在效率/成本方面)或建议替代方案?

    谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题的答案主要取决于您的使用案例和您将要处理的数据的大小,因此没有绝对正确的答案。

但是,在您所描述的场景中,您可能需要考虑一些关于BigQuery的使用以及它的某些功能如何对您感兴趣的要点。

让我快速浏览一下你应该看看的主题:

  • 定价:不考虑存储的计费,并专注于查询本身的成本(与您的用例更相关),BigQuery billing基于字节数在每个查询上处理。每月有1TB的免费配额,从那时起,每TB处理数据的成本为5美元,是最小可测量单位10MB的数据。
  • 缓存当BigQuery返回一些信息时,它会存储在temporary cached table(如果您愿意的话,还是永久存储的信息)中,并且它们会被维护大约24小时,但有一些例外情况。你可能会在同一个文档链接中找到它们(它们也是尽力而为,所以早期的删除也可能发生)。从缓存表返回的结果不计费(因为根据计费的定义,成本基于处理的字节数,并且访问缓存表意味着没有进行处理),只要您是运行完全相同的查询。我认为值得看看这个功能,因为从你的句子“因为有多个脚本使用每日数据的子集”,也许(但只是在这里猜测)它适用于你的用例来执行单个查询一次,然后从缓存版本多次检索结果,而不必将其存储在其他任何位置。
  • 分区:BigQuery提供了partitioned tables的概念,它是按日期划分为较小细分的单个表,可以让您根据需要更轻松地每天查询数据。< / LI>
  • 速度:BigQuery提供了一个实时分析平台,因此您可以执行快速查询,检索所需信息,应用一些初始处理,以后可以在自定义Python算法中使用

因此,一般来说,我会说您不需要将任何其他数据库与部分结果保存在BigQuery存储中。在资源和成本效率方面,BigQuery为您提供了足够的功能,可以在本地处理您的数据,而无需处理巨大的费用或数据检索的延迟。但是,这最终将取决于您的用例以及您要存储并需要同时处理的数据量;但总的来说,我会自己选择BigQuery。