코알못

[Redash] 데이터 시각화 도구를 이용 해보자! - 데이터 저장소 연결 본문

BIG DATA

[Redash] 데이터 시각화 도구를 이용 해보자! - 데이터 저장소 연결

코린이s 2022. 2. 25. 14:31
728x90

이번 시간에는 데이터 저장소 연결 하는 실습을 진행해본다.

저자의 경우 HIVE DB 를 저장소로 사용하고 있어 해당 저장소를 연결하는 실습을 진행한다.

[지난번에 생성한 redash 인스턴스] 의 public ip를 인터넷 창에 입력하여 접속 한다.

아래와 같이 Data Sources를 클릭한다.

New Data Source 를 클릭한다.

저장소를 선택할 수 있으며 저자의 경우 HIVE를 연결 해야하니 HIVE 를 선택한다.

아래와 같이 connection 정보를 입력한다.

HIVE 를 우선 EC2 에 구축하였기에 security group 설정에 해당 redash IP 에서 HIVE Port 접근을 허용한다.

  • Name : 원하는 명칭
  • Host : DB host 명
  • Port : DB port
  • Database : 데이터 베이스명 (입력이 필수가 아니지만 입력 안하면 out of index 오류 발생)
  • username : 접속할 유저명 입력(hive 접속 하는 유저명으로 패스워드 입력 안해도 접속 가능)

create 되면 아래와 같이 Connection 테스트 해볼 수 있으며 눌러서 테스트를 진행한다.

success 가 뜨면 성공이다.

다시 DataSources 를 눌러서 가보면 생성 된것을 볼 수 있다.

이제 데이터를 간단하게 조회해보자!

Query 를 클릭한다.

HIVE Glue 메타 스토어 사용시 아래와 같이 스키마 오류가 발생하는데 데이터 조회에는 이슈가 없어 (스키마 이슈 해결 완료 :: 아래 참고 사항 참고)

우선 데이터를 정상적으로 조회할 수 있는지 확인해본다.

아래와 같이 데이터가 정상적으로 나오는 것을 확인할 수 있다.

저장소 연결이 정상적으로 되었다!

끝!

<참고>

1. 스키마이슈

hive glue 메타 스토어를 이용하는 hive 스키마를 정상적으로 가져오지 못하는 이슈 발생(hive mysql 메타스토어는 정상적으로 가져와 졌다.)

그래서 처음에는 glue 메타 스토어 문제인줄 알았다. (실제로 구글링시 AWS 서비스인 아테나, 글루 메타스토어 이용시 정상적으로 가져와지지 않는다는 문서가 있었다.)

그러나 로그에 DB 내부 테이블명이 찍히는 것을 보니 정상적으로 스키마 구조를 접근할 수 있는것으로 보이며

stasusCode 가 0이니 정상적으로 스키마 정보를 가져온것으로 보인다.

그러나 에러 내용중에 데이터베이스명인 'kafka-test'의  '-' 로 인해 파싱 에러 발생한 구문이 보여 (hive 접속하여 해당 데이터 베이스 조회시에도 오류 발생)

해당 데이터 베이스 사용 여부 판단뒤 삭제 해보고 재 테스트 해보기로 한다.

scheduled_worker_1  | [2022-02-26 12:07:51,658][PID:26][INFO][pyhive.hive] USE `test_tmp`
scheduled_worker_1  | [2022-02-26 12:07:51,659][PID:26][DEBUG][pyhive.hive] TExecuteStatementReq(sessionHandle=TSessionHandle(sessionId=THandleIdentifier(guid=b'\xa9\x0b\xe1\x9f\x9f\xefI\xf2\x85;\x80\x1c;\xe7\xdb\x9f', secret=b'W\xd0\x90YW\xc2N(\xa0\xc4\xc3\xbc.\xb3^\x8a')), statement='USE `genie_tmp`', confOverlay=None, runAsync=False, queryTimeout=0)
scheduled_worker_1  | [2022-02-26 12:07:51,890][PID:26][DEBUG][pyhive.hive] TExecuteStatementResp(status=TStatus(statusCode=0, infoMessages=None, sqlState=None, errorCode=None, errorMessage=None), operationHandle=TOperationHandle(operationId=THandleIdentifier(guid=b'\x9f\x95\xf3\x9f\xe3\xa5D\x0b\xac1\xb4\xdd\x02\x18^\xc3', secret=b'E\xcb\x00+\xfdCF\x17\xb3y\x19T\x8a\x80\xca\xaa'), operationType=0, hasResultSet=False, modifiedRowCount=None))
scheduled_worker_1  | [2022-02-26 12:07:51,892][PID:26][DEBUG][pyhive.hive] TCloseOperationResp(status=TStatus(statusCode=0, infoMessages=None, sqlState=None, errorCode=None, errorMessage=None))
scheduled_worker_1  | [2022-02-26 12:07:51,893][PID:26][INFO][pyhive.hive] show columns in test_tmp.tb_user_favority_song
scheduled_worker_1  | [2022-02-26 12:12:25,170][PID:44][DEBUG][pyhive.hive] TCloseOperationResp(status=TStatus(statusCode=0, infoMessages=None, sqlState=None, errorCode=None, errorMessage=None))
.. 
scheduled_worker_1  | [2022-02-26 12:12:25,170][PID:44][INFO][pyhive.hive] show tables in kafka-test
ndRespond:ReExecDriver.java:126', 'org.apache.hive.service.cli.operation.SQLOperation:prepare:SQLOperation.java:197'], sqlState='42000', errorCode=40000, errorMessage="Error while compiling statement: FAILED: ParseException line 1:20 missing EOF at '-' near 'kafka'"), operationHandle=None)

삭제 후에 정상적으로 데이터 가져온다. hive glue 문제가 아닌 데이터 베이스 명중 잘못된 부분이 있어서 가져오지 못한것이였다.

여기서 의문이 든점은 데이터 소스 연결시 입력한 database는 무엇일까?

확인해보니 'use db명' 과 같이 접속시에 사용할 데이터 베이스 명을 의미한다.

해당 데이터 소스를 사용하면 해당 데이터 베이스에 포함되는 테이블 이용시에 데이터베이스 명을 적지 않아도 된다는 것을 의미한다.

스키마는 전체 데이터 베이스 모두 불러오기에 오류가 발생했던것이다.

728x90
Comments