메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


#!/bin/bash

##########################################
# Impala View - Physical Table 매핑 스크립트
##########################################

# === [환경 설정] ===
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
}

# === [View DDL에서 물리 테이블 추출 함수] ===
extract_tables() {
  local DDL="$1"
  DDL=$(echo "$DDL" | tr '\n' ' ' | sed 's/[[:space:]]\+/ /g')

  TABLES=$(echo "$DDL" | awk -v RS=' ' '
    BEGIN { IGNORECASE=1 }
    /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
      }
    }
    /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_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에 저장되었습니다."
 

번호 제목 날짜 조회 수
» [Shellscript]Impala view의 실제 참조 테이블 추출용 shellscript파일 2025.03.22 133
748 Failed to resolve 'acme-v02.api.letsencrypt.org' ([Errno -3] Temporary failure in name resolution)" 2024.11.27 789
747 Apache Kudu에서 동일한 이름의 테이블을 반복적으로 DROP → CREATE → INSERT하는 로직을 2분 간격으로 10회 수행할 때 발생할 수 있는 주요 이슈 2025.01.26 405
746 운영계 하둡클러스터에 노드 4대를 EdgeNode로 추가하는 방법/절차 2025.01.12 466
745 Oracle 10g 혹은 12c 를 19c로 Upgrade시 Cloudera Cluster작업에 필요한 작업 2025.01.12 985
744 beeline을 이용한 impala JDBC 테스트 방법(Kerberos 설정된 상태임) 2024.11.29 772
743 외부에서 ImpalaJDBC42.jar를 통해서 Impala에 접속시 sessions정보 2024.11.26 652
742 [Kerberos]Kerberos authentication cache를 FILE로 지정해도 KCM으로 저장되는 경우 조치방법 2024.11.03 915
741 How to Install Magento 2.4.7 on Ubuntu 24.04 2024.09.04 2318
740 [CDP7.1.7]Hive Replication수행시 Target Cluster에서 Specified catalog.database.table does not exist 오류 2024.05.08 2663
739 [Impala] alter table구문수행시 "WARNINGS: Impala does not have READ_WRITE access to path 'hdfs://nameservice1/DATA/Temp/DB/source/table01_ccd'" 발생시 조치 2024.04.26 1075
738 [CDP7.1.7] oozie sqoop action으로 import혹은 export수행시 발생한 오류에 대한 자세한 로그 확인 하는 방법 2024.04.19 1142
737 [CDP7.1.7]Hive Replication수행중 Specified catalog.database.table does not exist : hive.db명.table명 오류 발생시 조치방법 2024.04.05 2806
736 [Active Directory] AD Kerberos보안 설정 변경 방법 (Maximum lifetime for user ticket, Maximum lifetime for user ticket renewal) 2024.03.12 2581
735 [CDP7.1.7]BDR작업후 오류로 Diagnostic Data를 수집하는 동안 "No content to map due to end-of-input at [Source: (String)""; line: 1, column: 0]" 오류 발생시 조치 2024.02.20 3019
734 [CDP7.1.7, Replication]Encryption Zone내 HDFS파일을 비Encryption Zone으로 HDFS Replication시 User hdfs가 아닌 hadoop으로 수행하는 방법 2024.01.15 1004
733 [CDP7.1.7]Oozie job에서 ERROR: Kudu error(s) reported, first error: Timed out: Failed to write batch of 774 ops to tablet 8003f9a064bf4be5890a178439b2ba91가 발생하면서 쿼리가 실패하는 경우 2024.01.05 3253
732 [CDP7.1.7][Replication]Table does not match version in getMetastore(). Table view original text mismatch 2024.01.02 2508
731 [CDP7.1.7, Hive Replication]Hive Replication진행중 "The following columns have types incompatible with the existing columns in their respective positions " 오류 2023.12.27 2965
730 [CDP7.1.7]impala-shell을 이용하여 kudu table에 insert/update수행시 발생하는 오류(Transport endpoint is not connected (error 107)) 발생시 확인할 내용 2023.11.30 3700
위로