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 函数? [关闭]

如何将使用 ng-repeat 动态创建的 html 表单的输入元素的值传递给 ng-controller

使用python在zeppelin中动态选择表单

Zeppelin - 动态表单中默认值的动态更新