是否可以在以后的模块中引用先前%% sql模块中定义的查询?

时间:2015-11-08 05:14:37

标签: google-bigquery google-cloud-datalab

我上周刚刚开始使用新的Google Cloud Datalab和IPython(虽然我已经使用BigQuery几个月了)。 github中的教程和示例非常有用,但随着我的脚本和查询变得越来越复杂,我想知道一些事情。第一个是:我可以在稍后的%% sql模块中引用在%% sql模块中定义的查询吗?另一个有点相关的问题是,我可以以某种方式存储来自一个%% sql模块的结果,然后将该信息放入后续%% sql模块中的IN子句中吗?

1 个答案:

答案 0 :(得分:1)

这里有一些尝试,看看它们是否符合您的需求。如果他们不这样做,我欢迎你在github上提交问题,因为我认为你的两个场景都是我们想要确保工作顺利的事情。

首先,它需要sql单元和代码单元的组合[现在]

Cell 1

%%sql --module m1
DEFINE QUERY q1 
SELECT ...

Cell 2

%%sql --module m2
DEFINE QUERY q2
SELECT ... FROM $src ...

Cell 3

import gcp.bigquery as bq

compositequery = bq.Query(m2.q2, src = m1.q1)

基本上,%% sql模块在幕后变成了自动导入的python模块。

我曾经自己拆分每个%% sql单元的查询,但是自从引入模块以来,我也依赖于场景,在单个模块中定义多个查询,在那里你不需要一点python代码拼接一起。取决于你的情况,这是更好的。

对于第二个问题,再次,如果查询是跨单元格分割的,那么中间需要一些python粘合剂。执行一个查询,获取其结果,并将其用作下一个查询的参数。这适用于一般标量值,但对于IN子句和元组/值列表,我们需要解决此问题:https://github.com/GoogleCloudPlatform/datalab/issues/615

有关如何在BigQuery中使用JOIN在下一个查询中使用的一个查询中生成标量结果的更多想法,您还可以在BigQuery教程笔记本中标题为“SQL Query Composition”的步骤3中查看该查询。

希望有所帮助。

如上所述,如果您遇到某些问题没有按预期发挥作用,请提出问题,我们可以看看是否有意义解决,可能您或其他人甚至可能会提出要求贡献。 :)