이전 문제 해결하기

이 문서는 데이터 웨어하우스 (예: Teradata, Amazon Redshift, Oracle, Apache Hive)를 BigQuery로 마이그레이션할 때 발생하는 일반적인 문제를 해결하는 데 도움이 됩니다. 여기에는 마이그레이션 평가, 대화형 및 일괄 SQL 변환, dwh-migration-dumper 명령줄 추출 도구를 사용한 메타데이터 생성과 관련된 문제가 포함됩니다.

이전된 쿼리 및 작업의 작업 실행 세부정보, 오류 코드, 슬롯 사용량을 검사하려면 INFORMATION_SCHEMA.JOBS 뷰를 쿼리해도 됩니다.

마이그레이션 평가

다음 섹션에서는 데이터 웨어하우스를 BigQuery로 마이그레이션하기 위한 일반적인 문제와 문제 해결 기법을 설명합니다.

dwh-migration-dumper 도구 오류

메타데이터 또는 쿼리 로그 추출 중에 발생한 dwh-migration-dumper 도구 터미널 출력의 오류 및 경고를 해결하려면 메타데이터 생성 문제 해결을 참조하세요.

Hive 마이그레이션 오류

다음 섹션에서는 Hive에서 BigQuery로 데이터 웨어하우스를 마이그레이션하려고 할 때 발생할 수 있는 일반적인 문제를 설명합니다.

hadoop-migration-assessment 쿼리 로그 추출 로깅 후크는 hive-server2 로그에 디버그 로그 메시지를 기록합니다. 문제가 발생하면 MigrationAssessmentLoggingHook 문자열이 포함된 로깅 후크 디버그 로그를 검토합니다.

ClassNotFoundException 오류 처리

이 오류는 로깅 후크 JAR 파일을 잘못 배치하여 발생할 수 있습니다. JAR 파일을 Hive 클러스터의 auxlib 폴더에 추가했는지 확인하세요. 또는 hive.aux.jars.path 속성에서 JAR 파일의 전체 경로를 지정할 수 있습니다(예: file://AUXLIB_PATH/HiveMigrationAssessmentQueryLogsHooks_deploy.jar).

구성된 폴더에 하위 폴더가 표시되지 않음

이 문제는 로깅 후크 초기화 중 잘못된 구성이나 문제로 인해 발생할 수 있습니다.

hive-server2 디버그 로그에서 다음 로깅 후크 메시지를 검색합니다.

Unable to initialize logger, logging disabled
Log dir configuration key 'dwhassessment.hook.base-directory' is not set,
logging disabled.
Error while trying to set permission

문제 세부정보를 검토하고 문제를 해결하기 위해 수정해야 하는 사항이 있는지 확인하세요.

폴더에 파일이 표시되지 않음

이 문제는 이벤트 처리 중 또는 파일에 쓰는 중에 발생한 문제로 인해 발생할 수 있습니다.

hive-server2 디버그 로그에서 다음 로깅 후크 메시지를 검색합니다.

Failed to close writer for file
Got exception while processing event
Error writing record for query

문제 세부정보를 검토하고 문제를 해결하기 위해 수정해야 하는 사항이 있는지 확인하세요.

일부 쿼리 이벤트가 누락됨

이 문제는 로깅 후크 스레드 큐 오버플로로 인해 발생할 수 있습니다.

hive-server2 디버그 로그에서 다음 로깅 후크 메시지를 검색합니다.

Writer queue is full. Ignoring event

이 메시지가 표시되면 dwhassessment.hook.queue.capacity 파라미터를 늘리는 것이 좋습니다.

대화형 SQL 변환기

다음 섹션에서는 대화형 SQL 변환기를 사용할 때 일반적으로 발생하는 오류를 설명합니다.

RelationNotFound 또는 AttributeNotFound 변환 문제

대화형 SQL 변환기를 사용하여 쿼리를 변환한 후 RelationNotFound 또는 AttributeNotFound 오류와 함께 변환이 실패할 수 있습니다.

Google Cloud 콘솔의 BigQuery에서 변환 세부정보 페이지로 이동하여 로그 메시지 탭을 열면 실패한 변환을 확인할 수 있습니다.

가장 정확한 변환을 보장하기 위해 쿼리 자체 전에 쿼리에 사용된 모든 테이블의 데이터 정의 언어 (DDL) 문을 입력할 수 있습니다. 예를 들어 Amazon Redshift 쿼리 select table1.field1, table2.field1 from table1, table2 where table1.id = table2.id;를 변환하려면 다음 SQL 문을 대화형 SQL 변환기에 입력합니다.

create table schema1.table1 (id int, field1 int, field2 varchar(16));
create table schema1.table2 (id int, field1 varchar(30), field2 date);

select table1.field1, table2.field1
from table1, table2
where table1.id = table2.id;

Gemini로 번역 문제 해결하기

RelationNotFound 또는 AttributeNotFound 오류로 인해 실패한 변환 작업을 수정하려면 Gemini를 사용하여 다음 문제를 해결할 수도 있습니다.

  1. Google Cloud 콘솔의 BigQuery에서 변환 세부정보 페이지로 이동하여 로그 메시지 탭을 엽니다.
  2. 카테고리 열에 RelationNotFound 또는 AttributeNotFound 메시지가 있는 쿼리를 클릭합니다.
  3. 추천 수정을 클릭합니다.
  4. 적용을 클릭합니다.
  5. 쿼리를 다시 번역하려면 번역을 클릭합니다.

일괄 SQL 변환기

다음 섹션에서는 일괄 SQL 변환기를 사용할 때 일반적으로 발생하는 오류를 설명합니다.

RelationNotFound 또는 AttributeNotFound 변환 문제

일괄 SQL 변환기를 사용하여 쿼리를 변환한 후 RelationNotFound 또는 AttributeNotFound 오류와 함께 변환이 실패할 수 있습니다.

Google Cloud 콘솔의 BigQuery에서 변환 세부정보 페이지로 이동하여 로그 메시지 탭을 열면 실패한 변환을 확인할 수 있습니다.

변환은 메타데이터 DDL에서 가장 잘 작동합니다. SQL 객체 정의를 찾을 수 없으면 변환 엔진이 RelationNotFound 또는 AttributeNotFound 문제를 일으킵니다. 모든 객체 정의가 제공되도록 하려면 메타데이터 추출자를 사용해서 메타데이터 패키지를 생성하는 것이 좋습니다. 메타데이터 부족으로 인해 간접적으로 발생하는 많은 기타 오류를 해결할 수 있으므로, 대부분의 변환 오류를 해결하기 위해서는 우선 메타데이터를 추가하는 것이 좋습니다.

자세한 내용은 변환 및 평가를 위한 메타데이터 생성을 참고하세요.

Gemini로 번역 문제 해결하기

RelationNotFound 또는 AttributeNotFound 오류로 인해 실패한 변환 작업을 수정하려면 Gemini를 사용하여 다음 문제를 해결할 수도 있습니다.

  1. 번역 세부정보 페이지로 이동하여 로그 메시지 탭을 엽니다.
  2. 카테고리 열에 RelationNotFound 또는 AttributeNotFound 메시지가 있는 쿼리를 클릭합니다.
  3. 코드 탭에서 오류가 포함된 파일과 줄로 이동하려면

    오류 메시지

  4. 작업 열에서 추천 수정을 클릭합니다.

  5. 다음 옵션 중 하나를 선택합니다. 적용 또는 적용 후 다시 실행

    • 생성된 스키마 파일을 출력 디렉터리에서 입력 디렉터리로 복사하려면 적용을 클릭합니다.
    • 생성된 스키마 파일을 출력 디렉터리에서 입력 디렉터리로 복사하고 다시 실행 창을 열려면 적용 및 다시 실행을 클릭합니다.

변환 및 평가를 위한 메타데이터 생성

다음 섹션에서는 dwh-migration-dumper 도구의 일반적인 문제와 문제 해결 방법을 설명합니다.

메모리 부족 오류

dwh-migration-dumper 도구 터미널 출력의 java.lang.OutOfMemoryError 오류는 검색된 데이터를 처리하기에 메모리가 부족한 것과 관련이 있는 경우가 많습니다. 이 문제를 해결하려면 사용 가능한 메모리를 늘리거나 처리 스레드 수를 줄이세요.

JAVA_OPTS 환경 변수를 내보내 최대 메모리를 늘릴 수 있습니다.

Linux

export JAVA_OPTS="-Xmx4G"

Windows

set JAVA_OPTS="-Xmx4G"

--thread-pool-size 플래그 값을 포함하면 처리 스레드 수를 줄일 수 있습니다 (기본값: 32). 이 옵션은 hiveql 및 redshift* 커넥터에만 지원됩니다.

dwh-migration-dumper --thread-pool-size=1

WARN...Task failed 오류 처리

dwh-migration-dumper 도구 터미널 출력에 WARN [main] o.c.a.d.MetadataDumper [MetadataDumper.java:107] Task failed: … 오류가 표시될 수도 있습니다. 추출 도구가 소스 시스템에 여러 쿼리를 제출하고 각 쿼리의 출력이 자체 파일에 기록됩니다. 이 문제가 보이면 이러한 쿼리 중 하나가 실패한 것입니다. 하지만 쿼리 하나가 실패하더라도 다른 쿼리의 실행이 방지되지는 않습니다. WARN 오류가 두 번 이상 표시되면 문제 세부정보를 검토하고 쿼리가 올바르게 실행되도록 수정해야 하는 것이 있는지 확인합니다. 예를 들어 추출 도구를 실행할 때 지정한 데이터베이스 사용자에게 모든 메타데이터를 읽을 수 있는 권한이 없으면 올바른 권한을 가진 사용자로 다시 시도합니다.

손상된 ZIP 파일

dwh-migration-dumper 도구 ZIP 파일의 유효성을 검사하려면 SHA256SUMS.txt 파일을 다운로드하고 다음 명령어를 실행합니다.

Bash

sha256sum --check SHA256SUMS.txt

OK 결과는 체크섬 확인에 성공했음을 나타냅니다. 다른 메시지는 인증 오류를 나타냅니다.

  • FAILED: computed checksum did NOT match: ZIP 파일이 손상되어 다시 다운로드해야 합니다.
  • FAILED: listed file could not be read: ZIP 파일 버전을 찾을 수 없습니다. 동일한 출시 버전에서 체크섬 및 ZIP 파일을 다운로드하여 동일한 디렉터리에 배치합니다.

Windows PowerShell

(Get-FileHash RELEASE_ZIP_FILENAME).Hash -eq ((Get-Content SHA256SUMS.txt) -Split " ")[0]

RELEASE_ZIP_FILENAME을 dwh-migration-dumper 명령줄 추출 도구 출시의 다운로드된 ZIP 파일 이름으로 바꿉니다(예: dwh-migration-tools-v1.0.52.zip).

True 결과는 체크섬 확인에 성공했음을 나타냅니다.

False 결과는 인증 오류를 나타냅니다. 동일한 출시 버전에서 체크섬 및 ZIP 파일을 다운로드하고 동일한 디렉터리에 배치합니다.

Teradata 쿼리 로그 추출이 느림

-Dteradata-logs.query-logs-table 및 -Dteradata-logs.sql-logs-table 플래그로 지정된 테이블 조인 성능을 높이기 위해서는 JOIN 조건으로 DATE 유형의 추가 열을 포함할 수 있습니다. 이 열은 두 테이블에 모두 정의되어야 하며 파티션을 나눈 기본 색인의 일부여야 합니다. 이 열을 포함하려면 -Dteradata-logs.log-date-column 플래그를 사용하세요.

다음 예시에서는 -Dteradata-logs.log-date-column 플래그를 사용하는 방법을 보여줍니다.

Bash

dwh-migration-dumper \
  -Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV \
  -Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl \
  -Dteradata-logs.log-date-column=ArchiveLogDate

Windows PowerShell

dwh-migration-dumper `
  "-Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV" `
  "-Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl" `
  "-Dteradata-logs.log-date-column=ArchiveLogDate"

Teradata 행 크기 한도 초과

Teradata 버전 15의 행 크기 한도는 64KB입니다. 한도를 초과하면 추출 도구가 다음 메시지와 함께 실패합니다.

[Error 9804] [SQLState HY000] Response Row size or Constant Row size overflow

이 오류를 해결하려면 행 한도를 1MB로 늘리거나 행을 여러 행으로 분할합니다.

  • 1MB Perm 및 Response Rows 기능과 현재 TTU 소프트웨어를 설치하고 사용 설정합니다. 자세한 내용은 Teradata 데이터베이스 메시지 9804를 참고하세요.
  • -Dteradata.metadata.max-text-length 및 -Dteradata-logs.max-sql-length 플래그를 사용하여 긴 쿼리 텍스트를 여러 행으로 분할합니다.

다음 명령어는 -Dteradata.metadata.max-text-length 플래그를 사용하여 각각 최대 10,000자(영문 기준)의 여러 행으로 긴 쿼리 텍스트를 분할하는 방법을 보여줍니다.

Bash

dwh-migration-dumper \
  --connector teradata \
  -Dteradata.metadata.max-text-length=10000

Windows PowerShell

dwh-migration-dumper `
  --connector teradata `
  "-Dteradata.metadata.max-text-length=10000"

다음 명령어는 -Dteradata-logs.max-sql-length 플래그를 사용하여 각각 최대 10,000자(영문 기준)의 여러 행으로 긴 쿼리 텍스트를 분할하는 방법을 보여줍니다.

Bash

dwh-migration-dumper \
  --connector teradata-logs \
  -Dteradata-logs.max-sql-length=10000

Windows PowerShell

dwh-migration-dumper `
  --connector teradata-logs `
  "-Dteradata-logs.max-sql-length=10000"

Oracle 연결 문제

잘못된 비밀번호나 호스트 이름과 같은 일반적인 경우 dwh-migration-dumper 도구는 근본적인 문제를 설명하는 의미 있는 오류 메시지를 출력합니다. 하지만 경우에 따라 Oracle 서버에서 반환된 오류 메시지가 일반적이라 조사하기 어려울 수 있습니다.

이러한 문제 중 하나는 IO Error: Got minus one from a read call입니다. 이 오류는 Oracle 서버에 대한 연결이 설정되었지만 서버에서 클라이언트를 수락하지 않고 연결을 닫았음을 나타냅니다. 이 문제는 일반적으로 서버가 TCPS 연결만 허용하는 경우에 발생합니다. 기본적으로 dwh-migration-dumper 도구는 TCP 프로토콜을 사용합니다. 이 문제를 해결하려면 Oracle JDBC 연결 URL을 재정의해야 합니다.

oracle-service, host, port 플래그를 제공하는 대신 다음 형식으로 url 플래그를 제공하여 이 문제를 해결할 수 있습니다. jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE 일반적으로 Oracle 서버에서 사용하는 TCPS 포트 번호는 2484입니다.

다음 예시는 명령어에서 연결 URL을 지정하는 방법을 보여줍니다.

dwh-migration-dumper \
  --connector oracle-stats \
  --url "jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE" \
  --assessment \
  --driver "JDBC_DRIVER_PATH" \
  --user "USER" \
  --password

연결 프로토콜을 TCPS로 변경하는 것 외에도 Oracle 서버 인증서를 확인하는 데 필요한 trustStore SSL 구성을 제공해야 할 수 있습니다. SSL 구성이 누락되면 Unable to find valid certification path 오류 메시지가 표시됩니다. 이 문제를 해결하려면 JAVA_OPTS 환경 변수를 설정하세요.

set JAVA_OPTS=-Djavax.net.ssl.trustStore="JKS_FILE_LOCATION" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword="PASSWORD"

Oracle 서버 구성에 따라 keyStore 구성을 제공해야 할 수도 있습니다. 구성 옵션에 관한 자세한 내용은 Oracle JDBC 드라이버를 사용한 SSL을 참고하세요.

다음 단계