【发布时间】:2020-11-04 00:54:26
【问题描述】:
在 Zeppelin 中,可以参数化 jdbc 段落以根据选择表单(下拉菜单)的输入进行查询,例如
%jdbc
SELECT *
FROM db.table
WHERE colA='${Value=0,0(a)|1(b)|2(c)}'
LIMIT 1
创建一个带有下拉菜单值的输出字段(初始化为与值 0 对应的“a”,并具有选项“a”、“b”、“c”)。 Whenever a new Value is selected, the query runs.在这种情况下,返回一行table,其中colA 的值与Value 对应。
如果用户从表单中选择“c”,则查询将返回 colA=2 所在的行。
见:Zeppelin Dynamic Forms
在 Python 段落中,我们可以类似地使用 zeppelin context 对象 z 创建 a。很简单,
%python
value_list = [(0,'a'),(1,'b'),(2,'c')]
value_default = value_list[0]
z.select('Value',value_list,value_default)
此外,zeppelin 上下文能够共享变量。在上面的 python 示例中,我可以添加行 z.put('valueDefault',value_default) 并在 scala (val valueDefault = z.get('valueDefault')) 或 jdbc 段落中使用它,我可以将 valueDefault 称为 ${valueDefault} 例如
%jdbc
SELECT *
FROM db.table
WHERE colA='${valueDefault}'
LIMIT 1
用colA=0返回一行table。
我的问题是:我该怎么做 (i) 在动态列表规范中使用---相当于---a z.select
%jdbc
SELECT *
FROM db.table
WHERE colA='${Value=0,z.select(<variable_containing_list of tuples>)}'
LIMIT 1
期望的结果:动态表单(默认值 0,来自变量的选项列表)
或 (ii) 定义和重用一个范围为整个笔记本的动态列表?
【问题讨论】: