我正在尝试在Apache Zeppelin上完成以下用例:
当我编写sql
查询时,例如
%sql SELECT * FROM table1 WHERE column1 = ${column1=1,1|2|3|4}
我得到一个显示这些值为(1,2,3,4)
的组合框作为选项。
我想要做的是使用此列可用的所有不同值填充此列表(或者事实上,我可能希望从变量形式的另一个段落中获取任何其他值集)。所以目前我仍然坚持如何在另一段中的sql
语句中使用一个段落中定义的变量?
深入了解代码,我在Zeppelin解释器中看到一个名为Input.java
的文件检查模式${someColumn=someValues}
,填充组合框选项,然后创建一个简单的查询,因此我放弃了通过在同一段落中运行查询来填充它的想法。
答案 0 :(得分:1)
您可以使用ZeppelinContext来完成此操作,因为它允许您使用put()和get()来设置和检索段落之间的对象。
从链接页面引用示例,请注意 z 对象是ZeppelinContext的默认实例:
// Put object from scala
%spark
val myObject = ...
z.put("objName", myObject)
# Get object from python
%spark.pyspark
myObject = z.get("objName")
答案 1 :(得分:1)
我正在使用一个段落中的Scala
变量到另一段落中的Shell Script
。这就是答案。
在Scala单元格中
%spark2
val myVal = "test-value-across-paragraphs"
z.put("objName", myVal)
在壳单元中
%sh
echo {objName}
这需要启用对象插值,这可以通过将属性zeppelin.shell.interpolation
的值设置为true
来完成。检查Apache Zeppelin以获得更多帮助。
更新2019年5月19日
以上过程可能在Zeppelin 2.2
中无效,但显然在Zeppelin 2.3
中有效。同样在2.3
中,可以从sh.config
单元中更改内插值。
%sh.conf
zeppelin.shell.interpolation true