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

Google bigquery 是否可以在以后的模块中引用以前%%sql模块中定义的查询?,google-bigquery,google-cloud-datalab,Google Bigquery,Google Cloud Datalab,上周我刚开始使用新的谷歌云数据实验室和IPython(尽管我已经使用BigQuery几个月了)。github中的教程和示例非常有用,但随着脚本和查询变得越来越复杂,我想知道一些事情。第一个问题是:我可以在以后的%%sql模块中引用在一个%%sql模块中定义的查询吗?另一个有点相关的问题是,我能否以某种方式存储一个%%sql模块的结果,然后将该信息放入后续%%sql模块中类似IN子句的内容中?以下是一些可以尝试的方法,看看它们是否满足您的需要。如果他们不这样做,我欢迎您在github中提交问题,因

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

以下是一些可以尝试的方法,看看它们是否满足您的需要。如果他们不这样做,我欢迎您在github中提交问题,因为我认为您的两个场景都是我们希望确保工作正常的事情

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

第1单元

%%sql --module m1
DEFINE QUERY q1 
SELECT ...
第2单元

%%sql --module m2
DEFINE QUERY q2
SELECT ... FROM $src ...
第三单元

import gcp.bigquery as bq

compositequery = bq.Query(m2.q2, src = m1.q1)
本质上,%%sql模块在幕后变成了自动导入的python模块

我曾经自己对每个%%sql单元格进行查询拆分,但自从引入模块以来,我还根据场景,在单个模块中定义多个查询,而不需要将一点python代码拼接在一起。取决于您的场景,哪一个更好

对于第二个问题,同样,如果查询是通过单元格分割的,则中间需要一些Python胶。执行一个查询,获取其结果,并将其用作下一个查询的参数。这适用于一般标量值,但对于IN子句和元组/值列表,我们需要解决以下问题:

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

希望有帮助


如前所述,如果您遇到了某些特定问题,但某些问题没有如您所期望的那样起作用,请务必提交一个问题,我们可以看看解决这些问题是否有意义,您或其他人甚至可能会站出来做出贡献。:)

很有魅力,谢谢!我遇到的唯一一个小问题是,在我按照您的说明进行第一次尝试时,我想要引用的早期模块实际上有3个查询,最后一个查询使用了前2个模块的结果。在下一个模块中尝试使用第三个查询的输出时,我必须显式地传递所有3个引用,而不仅仅是最后一个引用,如果这有意义的话。很高兴听到它起作用了。我认为我们可能仍然希望考虑只使用声明式的体验和部分扩展,这样就不必提供对中间查询的引用。