추출3
2025.03.05 17:08
#!/bin/bash # 스크립트 설정 IMPALA_HOST="your_impala_host" # Impala 데몬 호스트 IMPALA_PORT="21050" # Impala 포트 (기본값: 21050) DATABASE="your_database" # 대상 데이터베이스 OUTPUT_FILE="view_table_mapping.txt" # 출력 파일명 # 오류 처리 함수 error_exit() { echo "ERROR: $1" >&2 exit 1 } # 필수 명령어 확인 command -v impala-shell >/dev/null 2>&1 || error_exit "impala-shell이 설치되어 있지 않습니다." command -v awk >/dev/null 2>&1 || error_exit "awk가 설치되어 있지 않습니다." # Impala 쿼리 실행 함수 execute_impala_query() { impala-shell -i "${IMPALA_HOST}:${IMPALA_PORT}" -d "$DATABASE" -q "$1" --quiet -B 2>/dev/null } # 테이블명 추출 함수 (복잡한 쿼리 지원) extract_tables() { local DDL="$1" # 쿼리를 단일 라인으로 변환하고 불필요한 공백 정리 DDL=$(echo "$DDL" | tr '\n' ' ' | sed 's/[[:space:]]\+/ /g') # FROM, JOIN, WITH(CTE)에서 테이블명 추출 TABLES=$(echo "$DDL" | awk -v RS=' ' ' BEGIN { IGNORECASE=1 } # FROM/JOIN 절 처리 /FROM|JOIN/ { getline next_word if (next_word !~ /^(SELECT|WHERE|GROUP|ORDER|LIMIT|ON|USING|,|\(|\)|$)/) { if (next_word ~ /\(/) next split(next_word, arr, ".") table = (length(arr) > 1) ? arr[1]"."arr[2] : arr[1] gsub(/[[:space:]]+AS[[:space:]]+[a-zA-Z0-9_]+/, "", table) gsub(/[^a-zA-Z0-9_\.]/, "", table) if (table && table !~ /^[0-9]/) print table } } # CTE (WITH 절) 처리 /WITH/ { while (getline > 0) { if ($0 ~ /AS[[:space:]]*\(/) break if ($0 ~ /^[a-zA-Z0-9_\.]+/) { gsub(/[^a-zA-Z0-9_\.]/, "", $0) if ($0) print $0 } } } ' | grep -v -E "^(SELECT|WHERE|GROUP|ORDER|LIMIT|AS|ON|USING)$" | sort -u) echo "$TABLES" } # 결과 파일 초기화 echo "View와 물리 테이블 매핑 정보" > "$OUTPUT_FILE" echo "실행 시간: $(date)" >> "$OUTPUT_FILE" echo "----------------------------------------" >> "$OUTPUT_FILE" # 모든 View 목록 가져오기 echo "View 목록을 조회 중..." VIEWS=$(execute_impala_query "SHOW VIEWS;" | grep -v "^$" || error_exit "View 목록 조회 실패") # View가 없는 경우 if [ -z "$VIEWS" ]; then echo "데이터베이스 $DATABASE에 View가 존재하지 않습니다." >> "$OUTPUT_FILE" exit 0 fi # 각 View의 물리 테이블 추출 echo "View 정의 분석 중..." for VIEW_NAME in $VIEWS; do echo "처리 중: $VIEW_NAME" # View의 생성 쿼리 가져오기 VIEW_DDL=$(execute_impala_query "SHOW CREATE VIEW $VIEW_NAME;") if [ $? -ne 0 ]; then echo "$VIEW_NAME: 정의 추출 실패" >> "$OUTPUT_FILE" continue fi # 테이블명 추출 TABLES=$(extract_tables "$VIEW_DDL") # 결과 출력 echo "View: $VIEW_NAME" >> "$OUTPUT_FILE" if [ -n "$TABLES" ]; then echo "Physical Tables:" >> "$OUTPUT_FILE" echo "$TABLES" | while read TABLE; do echo " - $TABLE" >> "$OUTPUT_FILE" done else echo "Physical Tables: (추출 실패 - 복잡한 쿼리일 가능성)" >> "$OUTPUT_FILE" fi echo "----------------------------------------" >> "$OUTPUT_FILE" done echo "처리 완료. 결과는 $OUTPUT_FILE에 저장되었습니다."
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
32 |
테스트
![]() | 관리자 | 2025.03.22 | 6 |
» | 추출3 | 관리자 | 2025.03.05 | 3 |
30 | 추출2 | 관리자 | 2025.03.05 | 3 |
29 | 추출 | 관리자 | 2025.03.05 | 4 |
28 | 쏜 기초영양소 가품 구분해보기 | 관리자 | 2025.01.03 | 1 |
27 | 경기침제 지표 top5 | 관리자 | 2024.12.22 | 7 |
26 | 경제지표 | 관리자 | 2024.09.28 | 4 |
25 | 마젠토 오픈소스 2.4.7 설명 | 관리자 | 2024.08.30 | 8 |
24 | https://www.cameron.co.kr/theme | 관리자 | 2024.08.26 | 6 |
23 | XE의 새로운 버젼 rhymix (https://xetown.com/) | gooper | 2024.08.23 | 7 |
22 | xe에서 wordpress로 마이그레이션 참고 자료 | gooper | 2024.08.23 | 2 |
21 | Once issued, the INVALIDATE METADATA statement cannot be cancelled. | gooper | 2024.07.30 | 20 |
20 | 질문 | gooper | 2024.07.12 | 9 |
19 | 제로보드 XE, 워드프레스로 이전 참고 사이트 | gooper | 2024.04.09 | 11 |
18 | 한국인 해외주식 보유헌황 | gooper | 2024.03.05 | 19 |
17 | 미국주식 공매도 현황 | gooper | 2024.03.01 | 152 |
16 | silver 미결제 확인 | gooper | 2022.12.05 | 107 |
15 | gold 미결제 뫅인 | gooper | 2022.12.05 | 5 |
14 | 종로골드및 골드테크 정보 | gooper | 2022.08.19 | 144 |
13 | 개인사업자 부가세신고 방법 종결 포스팅 - 국세청 홈택스 셀프 신고 | gooper | 2022.07.14 | 8 |