我上周刚刚开始使用新的Google Cloud Datalab和IPython(虽然我已经使用BigQuery几个月了)。 github中的教程和示例非常有用,但随着我的脚本和查询变得越来越复杂,我想知道一些事情。第一个是:我可以在稍后的%% sql模块中引用在%% sql模块中定义的查询吗?另一个有点相关的问题是,我可以以某种方式存储来自一个%% sql模块的结果,然后将该信息放入后续%% sql模块中的IN子句中吗?
答案 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中查看该查询。
希望有所帮助。
如上所述,如果您遇到某些问题没有按预期发挥作用,请提出问题,我们可以看看是否有意义解决,可能您或其他人甚至可能会提出要求贡献。 :)