Zeppelin 动态表单:如何将变量传递给动态表单——或者——重用动态表单
Posted
技术标签:
【中文标题】Zeppelin 动态表单:如何将变量传递给动态表单——或者——重用动态表单【英文标题】:Zeppelin Dynamic Forms: How to pass a variable into a dynamic form --OR-- reuse a dynamic form 【发布时间】: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) 定义和重用一个范围为整个笔记本的动态列表?
【问题讨论】:
【参考方案1】:啊哈!动态表单的值由 zeppelin 上下文输出。
第 1 步:使用例如创建动态表单%python
解释器和 put
它在变量中输出,例如 value_choice
:
%python
value_list = [(0,'a'),(1,'b'),(2,'c')]
value_default = value_list[0]
z.put('value_choice', z.select('Value', value_list, value_default));
第 2 步:在某些 %jdbc
段落中,例如“paragraph_1_1”,使用变量:
%jdbc
SELECT *
FROM db.table
WHERE colA=value_choice
LIMIT 1
注意类型不匹配。您可能需要转换 value_choice 或 colA。
第 3 步(可选):添加运行依赖项。在%python
段落中添加行,z.z.run("paragraph_1_1")
将在每次更新动态表单的值时重新运行该段落。
【讨论】:
以上是关于Zeppelin 动态表单:如何将变量传递给动态表单——或者——重用动态表单的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cordova 将动态数据从表单传递到 Firestore?
如何动态地将 id 传递给 Bootstrap 验证器规则的 url:远程用于相同的表单输入字段?
如何将变量传递给动态创建的 javascript onclick 函数? [关闭]