레이블이 python인 게시물을 표시합니다. 모든 게시물 표시
레이블이 python인 게시물을 표시합니다. 모든 게시물 표시

2021년 6월 3일 목요일

Apache Zeppelin Dynamic Form + JDBC 연동

Apache Zeppelin 에는 Dynamic Form 이란 것이 있다..

paragraph에 사용자가 원하는 매개변수를 입력받을 수 있게 하는 양식을 제공하는 기능이다.

일단 메뉴얼 투척~~!

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


메뉴얼 보면.. 매개 변수로 쓸 것을 ${변수명} 으로 사용하면 된다....

라고.. 아주~~~ 간단히 나와있다..


물론.. 이렇게 쓰면 되긴 된다..

그런데 말이지... 이렇게 쓰면.. 큰 문제가 생긴다..(나만 그런걸지도..)


일단 내가 하고 싶은거

공통 입력으로 시작일, 종료일, 매장 선택하여.. 매장별 매출등을 조회하고 싶음


1. 삽질 시작 

아~~ 매뉴얼 대로 쿼리 안에다가 넣으니까 폼이 생기고... 오오~~ 신기하네~~ 잘된다..

흠.. 그럼.. 한 Note에 paragraph 3개 생성해서.. jdbc로 연동한 걸

하나는 표, 차트 두개로 해 볼까?

2. 당혹

흠... 되긴 되는데.. 이렇게 되면.. 각 paragraph 마다 입력 폼이 생기잖여.. 입력은 한번만 해서 돌려써야 욕을 안 먹는데..

흠?? 메뉴얼 아래쪽에 Using form Templates (scope: note) 란거 보니.. 전역 변수로 쓸 수 있는 것 같다..

첫번째 paragraph에다가 jdbc interpreter로 쿼리를 날릴때 ${변수명} 을 사용하면 값 입력 폼이 생기고, 이걸 두번째 paragraph에다가 사용하면 되겠지?

해서 jdbc interpreter에다가 $${변수명을} 쓰고 조회!

--> null point exception이 아마 발생할 것이다...

3. 고민

완전 당황함.. sql 프로파일러로 들여다 보니.. 쿼리가 오지도 않음..

왜 이럴까.. 정말 몇일을 고민함..

stacksoverflow에 질문해도 답하는 놈이 없음.

https://stackoverflow.com/questions/67767714/exchanging-variables-between-different-paragraphs

youtube 동영상을 보니.. 다들 기초 예제만 하지..

이렇게 결합해서 하는 경우가 없음.

하여.. 계속 몇일을 삽질을 하다가..

겨우 알아냄..

4. 해결

가) 일단 메뉴얼이 좀 부실하다.. 내용도 좀 잘못된 것이 많음

나) 다른 interpreter는 모르겠으나, 나처럼 jdbc 사용하는 경우에 대해선 메뉴얼이 너무 허접함

다) 하여간 정답 공개

    a) 일단 공통으로 입력을 받을 폼은 첫번째 paragraph에 python으로 작성함.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%python
 
dtst = z.noteTextbox("시작일""20200101")
dted = z.noteTextbox("종료일""20201231")
 
print("Textbox note " + dtst)
print("Textbox note " + dted)
 
arrStore = [("001""PubDept"), ("002""Store1"), ("003""Store2")]
 
selStore = z.noteSelect("매장선택", arrStore )
 
print"Select note " +  selStore )
 
 
z.z.run("paragraph_1622092568030_1007352330")
 
cs

코드 설명 : 
1. Textbox 생성시 noteTextbox를 써야 전체 입력 form으로 생성됨
2. Select도 noteSelect로 생성. 값은 편하게 알아보기 위해서 객체로 한번 선언해주고 사용했음.
3. 하단의 z.z.run 부분은 다른 paragraph를 연속해서 실행시키라는 명령임. (paragraph ID는 각자 사용하는 것을 쓰자!)

   b) 그 다음 paragraph에서 jdbc interpreter를 사용하자

1
2
3
%jdbc
EXEC USP_BIGDATA_003 '$${시작일}''$${종료일}''$${매장선택}';
 
cs

 코드 설명 :
1. jdbc interpreter는 이 글을 볼 정도면 알아서 잘했을 것이다. 그래도 모르겠다... 하시는 분들은.. 실력 좀 올려서 오자!! (기본적인 연동은 구글링하면 나온다... jdbc 연동 글 보기 : https://jaymz96.blogspot.com/2021/02/apache-zeppelin.html)
2. 내 경우엔 query 말고 procedure를 날려서 실행하게 했음.
3. python interpreter에서 선언한 이름을 $$개 붙여서 가져와 쓸 수 있다!!
4. 이제 전체 실행, 또는 공통 form에서 값을 입력하고 실행하면. z.z.run으로 연결된 paragraph들이 함께 실행됨을 볼 수 있다.
5. 이후는 입맛대로 진행


5. 교훈
가) 외국꺼라고 다 제대로 됐다고 생각하면 오산이다.
나) 양키 놈들도 아는척~~만 하는거지 제대로 아는 넘들은 없다
다) 네이년 다니는 쉑들도 다 사기꾼들임. 내가 더 잘났다. (옛날에 면접보고 떨어져서 이러는 거 아님.........)
라) 빅데이터는 사기이자 쑈다. 윗 선에 딱 흑세무민 하기 좋은 툴이다.

6. 끗~
이제 나도 윗선에 구라쳐서 이쁨 좀 받아보자!
진짜 끗~!



2021-07-14 내용 추가
jdbc 연동이 잘 안된다면.. 
jdbc 설정시에 zeppelin.jdbc.interpolation 이 항목이 false 라면 true 변경하라!



2021년 5월 27일 목요일

Apache Zeppellin 0.9.0 - Dynamic Form에서 Python 을 실행하면 오류가 발생한다??!

하아... 진짜.. 이거 오픈소스라고 하지만..

너무너무 귀찮은 일들이 자꾸 생긴다..

심지어 메뉴얼에 있는 걸 갖다가 붙여도 오류가 남..


이 오픈소스 관리하는 쉐리는 검증은 하고 올리는 건가...

%pyspark 인터프리터 쓰면.. 일단 안됨!

%python으로 변경해야 하며, 실행해도 type 관련 오류가 발생함..


일단.. 개발 환경은

Ubuntu 20.4 LTS + Apache Zeppelin 0.9.0 preview 1


구글링해서 본 글은 거의 다 쓰레기...

결국 찾아냄..

https://stackoverflow.com/questions/63754720/apache-zeppelin-issues-python-errors

요약하면.. 0.9.0 preview 2에서 버그가 있는데.. python 3.8에선 호환이 안된다는 거임..

Ubuntu 20.4 LTS 기본이 3.8을 사용하는 지라.. 다운드레이드를 할까 하다가..

그냥 설치하고.. interpreter 설정에 python 경로를 넣는 곳에 3.7을 지정하는 걸로 해결.


설치 할 줄 모르는 냥반들을 위한 코드 투척..

  1. sudo add-apt-repository ppa:deadsnakes/ppa
  2. sudo apt-get update
  3. sudo apt-get install python3.7


설치하고 Zeppelin의 interpreter 설정에서 zeppelin.python 항목을 python 3.7 이 깔린 경로로 넣어주자 (bin이 들어간 경로 넣으면 됨)

참고로.. 다운그레이드 후 pyspark 써 봤으나.. 동일하게 오류 발생..

(걱정말라구!! 이 글을 본 사람이 한 삽질은 내가 다 먼저 했다규!!! ㅜ_ㅜ)

그나저나.. 생각보다.. 너무 삽질을 많이해서.. 짜증이 그냥.....

끗!



[낯선] 2026.06.20 이태원 MZK MuzikBar 공연

간만의 공연 이태원 비틀즈가 이전하여 MZK MuzikBar 로 새 단장 오픈을 한 뒤로 2번째 공연 새 베이시스트가 합류한 뒤로 첫 공연이기도 함.. 이래저래 틀린 부분도 많지만.. 그래도 간만에 그럭저럭 잘했다.. https://www.youtub...