2021년 7월 15일 목요일

APACHE ZEPPELIN DYNAMIC FORM 고급 응용


APACHE ZEPPELIN DYNAMIC FORM 고급 응용

제목은 거창하지만, 실제론 dynamic form 메뉴얼의 부실함을 보강하고자 포스팅 함.

jdbc 는 지난번 글을 잘 따라 했으면 별 이상이 없을 것이다.

그리고 zeppelin의 dynamic form이란걸 써보면.. (아래 링크 가서 좀 보고 오자!)

https://zeppelin.apache.org/docs/0.9.0/usage/dynamic_form/intro.html

오~~! 귀찮은 검색 항목 만드는 거 안해도 되네?

텍스트 입력에, 셀렉트, 비번, 거기다가 체크박스 까지!!!


오늘도 삽질의 대가는 열심히 삽질을 합니다..

사실.. 오늘이 아니라.. 1달 넘었습니다.


진짜.. 메뉴얼이 너무 부실해서.. 환장하겠음..

그리고 기본 설명이 $를 사용하는 거만 나와서리..

응용을 어떻게 해야하는 막연함이 느껴진다.

기본 응용 (해당 내용들도 여기저기 흩어져 있어서 찾기도 힘들다..)

https://zeppelin.apache.org/docs/0.9.0/interpreter/python.html



1. noteTextbox 에 placeholder 처럼 기본 값을 표시하고 싶다.

z.noteTextbox("최초입고시작일", "YYYYMMDD");
(입력 폼 이름, 기본값) 의 형태로 작성

2. noteSelect 사용 방법
기본은 z.noteSelect("f2",[("o1","1"),("o2","2")],"o1") 형식으로
(입력 폼 이름, 옵션항목, 기본값) 의 형태로 작성
좀 더 응용을 하면.

arrRetYear = [("2021","2021"),("2020","2020"),("2019","2019"),("2018","2018"),("2017","2017"),("2016","2016")]; 
selRetYear = z.noteSelect("조회년도", arrRetYear, "2021"); 
arrChkOpt2 = [("N","미출력"), ("Y","출력"), ] 
selChkOpt2 = z.noteSelect("합계출력", arrChkOpt2);
이런 식으로 옵션의 항목을 따로 코드로 작성하고 할당하는 식으로 코드를 작성했다.


3. noteCheckbox 사용 방법이 항목이 제일 난관이었음.
메뉴얼에는 $를 사용하는 것만 있음.
내가 하고 싶었던건 공통으로 체크 입력 항목을 놓고
선택된 것들에 대한 집계를 내려고 했으나,
이상하게 Class Cast 오류만 신나게 뿜어 댐.
물론 쿼리 안에다가 $를 사용하는 것은 잘 됐음.
엄청 삽질하다가 결국 알아낸 것.


가. 일단 공통으로 쓸 체크박스 폼을 python 에서 작성한다. (매우 중요!)

arrRetYear = [("2021","2021"),("2020","2020"),("2019","2019"),("2018","2018"),("2017","2017"),("2016","2016")]; 
selRetYear = z.noteCheckbox("조회년도", arrRetYear, "2021");

위의 예를 보면.. 셀렉트와 완전 같다. 기본값 지정하는 것도.

나. python으로 작성된 paragraph를 미리 한번 실행해서 공통 입력을 받을 체크박스 폼을 생성한다.

다. jdbc를 연동한 paragraph 에 체크박스 폼의 값을 사용하는 곳에 입력을 한다.

$${checkbox(:):조회년도=,2021|2020|2019|2018|2017|2016}'


위의 예제설명:

{checkbox(구분자):폼양식명(python에서 사용한것과 일치!)=기본값(여기선 선택안함),체크박스 배열의 key 또는 이름}

여기서 제일 마지막 항목의 체크박스 배열의 key 또는 이름은 두개다 사용해 봤는데,
키 값을 넣던, 이름을 넣던 상관없이 python에서 준 코드 값으로 넘어갔다.

4. paragraph를 연속적으로 실행
지난번에 z.run(paragraphId) 로 해당 paragraph를 실행하라고 했는데, 3가지 선택사항이 있다.

가. z.run(paragraphId) : 해당 paragraph 1개 실행
나. z.run(noteId, paragraphId) : 해당 note의 해당 paragraph 1개 실행
다. z.runNote(noteId) : 해당 note의 모든 paragraph 실행

디버깅 할 때는 z.run이 편하고, 완성하고 runNote로 교체하니 코드가 깔끔하게 정리가 됐다.
참고로, 메뉴얼에 z.run 이라고 써 있다고 그대로 하면 안된다.. z.z.run 이라고 해야 함. 
(; ̄Д ̄)
z.runNote 는 z.z 라고 안해도 됨.. (이게 뭐냐...)

후기.
메뉴얼이 너무 부실해서 저 체크박스 알아내는데, 정말 오래 걸렸다.
나온지 꽤 된 걸로 알고 있는데도 아직도 메뉴얼이 엉망진창이다.
이후에 개발하시는 분들은 이걸 보고 그나마 조금이라도 고생을 덜 하시길...
〜( ̄▽ ̄〜)

댓글 없음:

댓글 쓰기

BE Band (비밴드) - 2024년 03월 02일 잠실새내 락앤롤욱스 공연

나의 10~20대를 보낸 잠실에서의 공연.. 오랜만에 가보니.. 여기가.. 마눌님과 자주 가던 영화관이었는데... 여긴 뭐가 있었는데... 란 추억도 떠올리며 기분좋게 감.​ 공연장은 좀 협소한 편이었고, 인천의 쥐똥나무 보다는 약간 크고... 인천 ...