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 사용 방법
(입력 폼 이름, 기본값) 의 형태로 작성
2. noteSelect 사용 방법
기본은 z.noteSelect("f2",[("o1","1"),("o2","2")],"o1") 형식으로
(입력 폼 이름, 옵션항목, 기본값) 의 형태로 작성
좀 더 응용을 하면.
3. noteCheckbox 사용 방법이 항목이 제일 난관이었음.
메뉴얼에는 $를 사용하는 것만 있음.
내가 하고 싶었던건 공통으로 체크 입력 항목을 놓고
선택된 것들에 대한 집계를 내려고 했으나,
이상하게 Class Cast 오류만 신나게 뿜어 댐.
물론 쿼리 안에다가 $를 사용하는 것은 잘 됐음.
엄청 삽질하다가 결국 알아낸 것.
(입력 폼 이름, 옵션항목, 기본값) 의 형태로 작성
좀 더 응용을 하면.
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 라고 안해도 됨.. (이게 뭐냐...)
후기.
메뉴얼이 너무 부실해서 저 체크박스 알아내는데, 정말 오래 걸렸다.
나온지 꽤 된 걸로 알고 있는데도 아직도 메뉴얼이 엉망진창이다.
이후에 개발하시는 분들은 이걸 보고 그나마 조금이라도 고생을 덜 하시길...
〜( ̄▽ ̄〜)
후기.
메뉴얼이 너무 부실해서 저 체크박스 알아내는데, 정말 오래 걸렸다.
나온지 꽤 된 걸로 알고 있는데도 아직도 메뉴얼이 엉망진창이다.
이후에 개발하시는 분들은 이걸 보고 그나마 조금이라도 고생을 덜 하시길...
〜( ̄▽ ̄〜)
댓글 없음:
댓글 쓰기