쿼리 옵티마이저를 메타스토어와 수동으로 동기화 watsonx.data

이 태스크에 대한 정보

최적화된 쿼리를 제공하기 위해, 쿼리 최적화 프로그램은 테이블 정의와 쿼리 최적화( Hive ) 및 아이스버그 통계에 관한 데이터를 가져와 IBM® watsonx.data 의 MDS와 동기화합니다. 쿼리 최적화 프로그램에 반드시 제공되어야 하는 특정 Hive 와 아이스버그 테이블을 선택할 수 있습니다. 최상의 결과를 얻으려면 Hive 및 Iceberg 통계를 생성하고 기본 키와 외래 키에 대한 열에 라벨을 붙이는 것이 좋습니다.

쿼리 옵티마이저를 활성화하면 Presto (C++) 엔진에 연결된 카탈로그의 메타데이터가 자동으로 동기화됩니다. 그러나 다음과 같은 경우에는 다음 단계를 실행해야 합니다:

  • 배포 중에 액세스할 수 없거나 손상된 카탈로그 또는 스키마에 대한 메타데이터가 누락되었습니다.
  • 테이블에 중요한 변경이 이루어집니다.
  • 초기 동기화 작업 후에 새 테이블이 도입됩니다.
  • 활성화 시 자동 동기화 프로세스 중에 테이블이 동기화되지 않는 문제가 간헐적으로 발생하고 있습니다.

시작하기 전에

watsonx.data 에서 표를 동기화하려면 다음 항목이 필요합니다

이 항목의 지침은 이제 여러 카탈로그에 걸쳐 고급 쿼리 성능 향상 및 최적화 기능을 지원하는 향상된 기능인 Optimizer 대시보드에서 통계 업데이트 관리를 사용하여 실행할 수 있습니다 카탈로그.

  1. watsonx.data 의 테이블 동기화 확인 절차를 따라 모든 예상 테이블이 동기화되었는지 확인하십시오.

  2. 쿼리 최적화에 필요한 watsonx.data Hive 및 Iceberg 테이블 목록을 확인합니다.

  3. Hive 에서 열을 기본 키와 외래 키로 식별합니다.

  4. ANALYZE Presto Hive 및 Iceberg 테이블을 사용하여 Hive 및 Iceberg 통계를 생성합니다.

  5. 보안 강화 기능으로 관리자 권한이 있는 사용자만 ExecuteWxdQueryOptimizer 명령을 실행할 수 있습니다.

  6. 세션 매개변수 is_query_rewriter_plugin_enabledfalse 로 설정되어 있으면 ExecuteWxdQueryOptimizer 명령을 실행할 수 없습니다.

프로시저

  1. watsonx.data에 로그인하십시오.

  2. 쿼리 작업 공간 으로 이동하십시오.

  3. 실행 ANALYZE 에서 명령watsonx.data 통계를 생성하기 위해 동기화하려는 테이블에 대한 웹 콘솔(통계는 행 수, 열 이름, data_size, 행 수 등)입니다.

    ANALYZE catalog_name.schema_name.table_name ;
    
  4. 다음 명령을 실행하여 Hive 및 Iceberg 카탈로그 모두에 대해 레거시 메타스토어 유형 watsonx-data 을 사용하여 쿼리 옵티마이저에 카탈로그의 메타스토어 속성을 수동으로 등록합니다:

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>', '<ARGUMENTS>', ?, ?)';
    

    a. 엔터프라이즈 watsonx.data 버전의 경우, 및 Iceberg Hive 카탈로그 모두에 레거시 watsonx-data 메타스토어 유형을 사용하십시오:

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>','type=watsonx-data,uri=thrift://<THRIFT_URL>,use.SSL=true,auth.mode=PLAIN,ssl.cert=/secrets/external/ibm-lh-tls-secret/ca.crt,auth.plain.credentials=<USERNAME>:<PASSWORD>', ?, ?)
    

    예를 들어, 다음과 같습니다.

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('iceberg_data','type=watsonx-data,uri=thrift://ibm-lh-lakehouse-mds-thrift-svc.zen.svc.cluster.local:8380,use.SSL=true,auth.mode=PLAIN,ssl.cert=/secrets/external/ibm-lh-tls-secret/ca.crt,auth.plain.credentials=admin:password', ?, ?)';
    
    • type- 연결하려는 메타스토어 유형입니다. 지원되는 값은 watsonx-data 입니다.

    • watsonx.data <CATALOG_NAME>- 인프라 관리자 페이지에 표시된 대로 입력합니다(대소문자 구분).

    • <THRIFT_URL>- 인프라 관리자 페이지(카탈로그 클릭)에서 가져옵니다.

    • auth.plain.credentials 의 MDS 자격증명(<Username><Password>)은 watsonx.data 에서 생성해야 합니다. [연결 방법 watsonx.data ]을 참조하십시오 OpenShift. 메타스토어에 일반 인증이 필요한 경우 자격 증명을 username:password 또는 ibmlhapikey_<username>:apikey 형식으로 지정해야 합니다. 비밀번호는 소프트웨어 키 저장소에 안전하게 저장됩니다.

    • auth.mode- 메타스토어에 인증이 필요한 경우 사용할 인증 모드를 나타냅니다. auth.mode 을 일반으로 설정해야 합니다

    • use.SSL- 메타스토어에 SSL 연결이 필요한 경우 해당 항목이 참이어야 합니다.

    • <MDS certificate file path>- SSL 연결을 검증하기 위한 인증서로 db2u 컨테이너에 파일 형태로 제공되어야 합니다. SSL 연결이 또는 DigiCert 과 같은 잘 알려진 인증 기관(CA)에서 발급한 인증서를 VeriSign 사용하여 설정된 경우 인증서를 전달할 필요가 없습니다. 기본적으로 MDS 인증서는 쿼리 최적화기에서 경로 /secrets/external/ibm-lh-tls-secret/ca.crt 아래에 있습니다.

      1. 다음 명령을 실행하여 db2u 쿼리 옵티마이저 헤드 포드(OPT_POD)를 식별합니다.

        oc get pod | grep oaas-db2u
        
      2. 다음 명령어를 실행하여 <OPT_POD> 및 <OPT_PAD> 값을 대체하여 인증서를 생성하십시오 .

        oc exec -it <OPT_POD> -c db2u -- bash -c "echo QUIT | openssl s_client -showcerts -connect <Metastore Thrift endpoint> | awk '/-----BEGIN    CERTIFICATE-----/           {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' > /tmp/mds.pem"
        

    b. 라이트 watsonx.data 버전에서는 Iceberg 테이블이 별도의 메타스토어 Hive 서버 유형을 사용하여 관리됩니다. 애플리케이션 요구 사항에 따라 Iceberg용 메타스토어 서버를 등록하거나 Hive, 둘 다 등록해야 합니다.

    1. 라이트 watsonx.data 버전에서 Hive 카탈로그 등록:

      ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>','type=watsonx-data-hive,uri=https://<THRIFT_URL>/mds/thrift,use.SSL=true,auth.mode=PLAIN,ssl.cert=/secrets/external/ibm-lh-tls-secret/ca.crt,auth.plain.credentials=<USERNAME>:<PASSWORD>', ?, ?)';
      

      예를 들어, 다음과 같습니다.

      ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('iceberg_data','type=watsonx-data,uri=thrift://ibm-lh-lakehouse-mds-thrift-svc.zen.svc.cluster.local:8380,use.SSL=true,auth.mode=PLAIN,ssl.cert=/secrets/external/ibm-lh-tls-secret/ca.crt,auth.plain.credentials=admin:password', ?, ?)';
      
      • type- 연결하려는 메타스토어 유형입니다. 테이블을 Hive 관리하는 메타스토어의 경우 값은 다음과 같습니다: watsonx-data-hive.
      • watsonx.data <CATALOG_NAME>- 인프라 관리자 페이지에 표시된 대로 입력합니다(대소문자 구분).
      • <THRIFT_URL>- MDS 스리프트 watsonx.data 서버의 URI. 반드시. https:// 로 시작해야 합니다.
      • auth.plain.credentials 의 MDS 자격증명(<Username><Password>)은 watsonx.data 에서 생성해야 합니다. 연결 방법에 watsonx.data 대해서는 을 참조하십시오 OpenShift. 메스토어가 PLAIN 인증을 요구하는 경우, 자격 증명은 또는 username:password 형식으로 ibmlhapikey_<username>:apikey 지정해야 합니다. 비밀번호는 소프트웨어 키 저장소에 안전하게 저장됩니다.
      • auth.mode- 메타스토어에 인증이 필요한 경우 사용할 인증 모드를 나타냅니다. 는 로 auth.mode 설정되어야 PLAIN 합니다.
      • use.SSL- 메타스토어에 SSL 연결이 필요한 경우 해당 항목이 참이어야 합니다.
      • <MDS certificate file path>- SSL 연결을 검증하기 위한 인증서로 db2u 컨테이너에 파일 형태로 제공되어야 합니다. SSL 연결이 또는 DigiCert 과 같은 잘 알려진 인증 기관(CA)에서 발급한 인증서를 VeriSign 사용하여 설정된 경우 인증서를 전달할 필요가 없습니다. 기본적으로 MDS 인증서는 쿼리 최적화기에서 경로 /secrets/external/ibm-lh-tls-secret/ca.crt 아래에 있습니다.
    2. 라이트 watsonx.data 버전에서 아이스버그 카탈로그 등록:

      ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>','type=iceberg-rest,catalog.name=<CATALOG_NAME>,uri=https://<REST_URL>/mds/iceberg,auth.mode=basic,ssl.cert=/secrets/external/ibm-lh-tls-secret/ca.crt,auth.plain.credentials=<USERNAME>:<PASSWORD>', ?, ?)';
      

      예를 들어, 다음과 같습니다.

      ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('iceberg_data','type=iceberg-rest,catalog.name=iceberg_data,uri=https://ibm-lh-lakehouse-mds-rest-svc.zen.svc.cluster.local:8180/mds/iceberg,auth.mode=basic,ssl.cert=/secrets/external/ibm-lh-tls-secret/ca.crt,auth.plain.credentials=admin:password', ?, ?)';
      
      • type- 연결하려는 메타스토어 유형입니다. 아이스버그 테이블을 관리하는 메타스토어의 값은 다음과 같습니다: iceberg-rest.
      • watsonx.data <CATALOG_NAME>- 인프라 관리자 페이지에 표시된 대로 입력합니다(대소문자 구분).
      • <THRIFT_URL>- 아이스버그 watsonx.data REST MDS 서버의 URI. URI는 로 시작해야 https:// 하며 REST API 카탈로그의 기본 경로를 포함해야 합니다. 의 watsonx.data 기본 경로는 입니다 /mds/iceberg.
      • auth.plain.credentials 의 MDS 자격증명(<Username><Password>)은 watsonx.data 에서 생성해야 합니다. 연결 방법에 watsonx.data 대해서는 을 참조하십시오 OpenShift. 메스토어가 PLAIN 인증을 요구하는 경우, 자격 증명은 또는 username:password 형식으로 ibmlhapikey_<username>:apikey 지정해야 합니다. 비밀번호는 소프트웨어 키 저장소에 안전하게 저장됩니다.
      • auth.mode- 메타스토어에 인증이 필요한 경우 사용할 인증 모드를 나타냅니다. 는 로 auth.mode 설정되어야 PLAIN 합니다.
      • use.SSL- 메타스토어에 SSL 연결이 필요한 경우 해당 항목이 참이어야 합니다.
      • <MDS certificate file path>- SSL 연결을 검증하기 위한 인증서로 db2u 컨테이너에 파일 형태로 제공되어야 합니다. SSL 연결이 또는 DigiCert 과 같은 잘 알려진 인증 기관(CA)에서 발급한 인증서를 VeriSign 사용하여 설정된 경우 인증서를 전달할 필요가 없습니다. 기본적으로 MDS 인증서는 쿼리 최적화기에서 경로 /secrets/external/ibm-lh-tls-secret/ca.crt 아래에 있습니다.
  5. 등록하려면 다음 명령을 실행하세요.watsonx.data 카탈로그쿼리 최적화 프로그램:

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>','type=watsonx-data,uri=thrift://<Metastore_Thrift_endpoint>,use.SSL=true,auth.mode=PLAIN,auth.plain.credentials=<Username>:<apikey>', ?, ?)';
    

    카탈로그를 쿼리 최적 화기에 등록하면 테이블이 **쿼리 **watsonx.data 최적화기로 동기화되어 쿼리 최적화가 가능해집니다. 이는 각 카탈로그에 대해 한 번씩 실행되어야 합니다.

  6. 다음 명령을 실행하여 카탈로그의 각 스키마에 대한 테이블을 동기화합니다.

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.EXT_METASTORE_SYNC('<CATALOG_NAME>', '<SCHEMA_NAME>', '.*', '<SYNC MODE>', 'CONTINUE', 'OAAS')';
    
    • <CATALOG_NAME>: 동기화할 테이블이 속한 카탈로그의 이름입니다.
    • <SCHEMA_NAME>: 동기화할 테이블이 속한 스키마 이름입니다.
    • <SYNC MODE>:SKIP 이미 정의된 개체를 건너뛰어야 함을 나타내는 동기화 모드입니다.REPLACE 마지막 동기화 이후 개체가 수정된 경우 개체를 업데이트하는 데 사용되는 또 다른 동기화 모드입니다.
    • CONTINUE: 오류가 기록되지만 여러 테이블을 가져오는 경우 처리가 계속됩니다.

    동기화가 완료되면 출력에 동기화된 테이블 목록이 표시됩니다. 동기화된 테이블의 총 개수는 카탈로그 또는 스키마 내 테이블 수의 두 배여야 합니다. 이는 각 테이블이 두 번 동기화되기 때문입니다. 외부 메타스토어에서 로컬 메타스토어로, 그리고 로컬 메타스토어에서 Db2 카탈로그로.

    몇 분 후에 테이블 동기화 확인 절차에 따라 동기화 watsonx.data 작업을 확인하십시오.

  7. 카탈로그 및 스키마 목록을 식별합니다.watsonx.data 당신이 요구하는쿼리 최적화 프로그램.

    제약 조건을 정의하는 SQL 파일을 제공합니다.쿼리 최적화 프로그램 사용. SQL 파일에서 데이터 세트의 각 테이블에 적용 가능한 기본 키, 외래 키 및 null이 아닌 열을 식별합니다.

    예를 들어, 주어진 열이 포함된 다음 세 개의 테이블이 있는 경우

    직원 (EmployeeID,FirstName,LastName, 부서 및 급여), 부서 (DepartmentID 그리고DepartmentName ), 그리고EmployeeDepartmentMapping (MappingID,EmployeeID, 그리고DepartmentI ).

    실행 ALTER 제약 조건을 정의하는 table 명령:

    -- NOT NULL
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Employees ALTER COLUMN FirstName SET NOT NULL ALTER COLUMN LasttName SET NOT NULL ALTER COLUMN Salary SET NOT NULL ALTER COLUMN EmployeeID SET NOT NULL';
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Departments ALTER COLUMN DepartmentName SET NOT NULL ALTER COLUMN DepartmentID SET NOT NULL ';
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ALTER COLUMN MappingID SET NOT NULL ';
    -- PRIMARY KEY
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Employees ADD PRIMARY KEY (EmployeeID) NOT ENFORCED';
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Departments ADD PRIMARY KEY (DepartmentID) NOT ENFORCED';
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ADD PRIMARY KEY (MappingID) NOT ENFORCED';
    -- FOREIGN KEY
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ADD FOREIGN KEY (EmployeeID) REFERENCES "catalog_name".schema_name.Employees(EmployeeID) NOT ENFORCED';
    ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ADD FOREIGN KEY (DepartmentID) REFERENCES "catalog_name".schema_name.Departments(DepartmentID) NOT ENFORCED';