Zeppelin Dynami c Forms: Как передать переменную в форму Dynami c --ИЛИ - повторно использовать форму Dynami c - PullRequest
1 голос
/ 14 июля 2020

В Zeppelin абзац jdb c может быть параметризован для запроса в соответствии с вводом из формы выбора (раскрывающийся список), например,

%jdbc

SELECT *
FROM db.table
WHERE colA='${Value=0,0(a)|1(b)|2(c)}'
LIMIT 1

создает поле вывода с раскрывающимся меню Значение (инициализируется как " a "соответствует значению 0 и имеет опции" a "," b "," c "). Запрос выполняется всякий раз, когда выбирается новое значение. В этом случае возвращается одна строка table, для которой colA имеет значение, соответствующее Value.

Если пользователь выбирает «c» из формы, запрос возвращает строку, где colA=2. См .: Zeppelin Dynami c Forms

В абзаце python мы могли бы аналогичным образом создать a, используя контекст zeppelin объект z. Просто

%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')) или в абзаце jdb c, я могу ссылаться на valueDefault как, ${valueDefault}, например

%jdbc

SELECT *
FROM db.table
WHERE colA='${valueDefault}'
LIMIT 1

возвращает одну строку table с colA=0.

Мой вопрос: как я могу (i) использовать --- эквивалент --- a z.select внутри Dynami c спецификация списка

%jdbc

SELECT *
FROM db.table
WHERE colA='${Value=0,z.select(<variable_containing_list of tuples>)}'
LIMIT 1

желаемый результат: форма Dynami c (значение по умолчанию 0, список опций из переменной)

OR (ii ) определить и повторно использовать список динамических c, охватывающий всю записную книжку?

1 Ответ

0 голосов
/ 15 июля 2020

Ага! Значение формы Dynami c выводится контекстом zeppelin.

Шаг 1: создайте форму Dynami c, используя, например, %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") будет повторно запускать этот абзац каждый раз, когда значение формы Dynami c обновляется.

...