쿼리 옵티마이저를 메타스토어와 수동으로 동기화 watsonx.data
이 태스크에 대한 정보
최적화된 쿼리를 제공하기 위해, 쿼리 최적화 프로그램은 테이블 정의와 쿼리 최적화( Hive ) 및 아이스버그 통계에 관한 데이터를 가져와 IBM® watsonx.data 의 MDS와 동기화합니다. 쿼리 최적화 프로그램에 반드시 제공되어야 하는 특정 Hive 와 아이스버그 테이블을 선택할 수 있습니다. 최상의 결과를 얻으려면 Hive 및 Iceberg 통계를 생성하고 기본 키와 외래 키에 대한 열에 라벨을 붙이는 것이 좋습니다.
쿼리 옵티마이저를 활성화하면 Presto (C++) 엔진에 연결된 카탈로그의 메타데이터가 자동으로 동기화됩니다. 그러나 다음과 같은 경우에는 다음 단계를 실행해야 합니다:
- 배포 중에 액세스할 수 없거나 손상된 카탈로그 또는 스키마에 대한 메타데이터가 누락되었습니다.
- 테이블에 중요한 변경이 이루어집니다.
- 초기 동기화 작업 후에 새 테이블이 도입됩니다.
- 활성화 시 자동 동기화 프로세스 중에 테이블이 동기화되지 않는 문제가 간헐적으로 발생하고 있습니다.
시작하기 전에
watsonx.data 에서 표를 동기화하려면 다음 항목이 필요합니다
이 항목의 지침은 이제 여러 카탈로그에 걸쳐 고급 쿼리 성능 향상 및 최적화 기능을 지원하는 향상된 기능인 Optimizer 대시보드에서 통계 업데이트 관리를 사용하여 실행할 수 있습니다 카탈로그.
-
watsonx.data 의 테이블 동기화 확인 절차를 따라 모든 예상 테이블이 동기화되었는지 확인하십시오.
-
쿼리 최적화에 필요한 watsonx.data Hive 및 Iceberg 테이블 목록을 확인합니다.
-
Hive 에서 열을 기본 키와 외래 키로 식별합니다.
-
ANALYZEPresto Hive 및 Iceberg 테이블을 사용하여 Hive 및 Iceberg 통계를 생성합니다. -
보안 강화 기능으로 관리자 권한이 있는 사용자만
ExecuteWxdQueryOptimizer명령을 실행할 수 있습니다. -
세션 매개변수
is_query_rewriter_plugin_enabled가false로 설정되어 있으면ExecuteWxdQueryOptimizer명령을 실행할 수 없습니다.
프로시저
-
watsonx.data에 로그인하십시오.
-
쿼리 작업 공간 으로 이동하십시오.
-
실행
ANALYZE에서 명령watsonx.data 통계를 생성하기 위해 동기화하려는 테이블에 대한 웹 콘솔(통계는 행 수, 열 이름, data_size, 행 수 등)입니다.ANALYZE catalog_name.schema_name.table_name ; -
다음 명령을 실행하여 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 아래에 있습니다.-
다음 명령을 실행하여 db2u 쿼리 옵티마이저 헤드 포드(OPT_POD)를 식별합니다.
oc get pod | grep oaas-db2u -
다음 명령어를 실행하여 <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, 둘 다 등록해야 합니다.
-
라이트 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 아래에 있습니다.
-
라이트 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 아래에 있습니다.
-
-
등록하려면 다음 명령을 실행하세요.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>', ?, ?)';<CATALOG_NAME>- 인프라 관리자 페이지에 표시된 대로(대소문자 구분).<Metastore_Thrift_endpoint>- 인프라 관리자 페이지에서 얻은 정보(카탈로그를 클릭하세요).- MDS 자격 증명(
<Username>:<apikey>)- watsonx.data 에서 생성해야 합니다. watsonx.data 에 연결하는 방법은 IBM Cloud 또는 Amazon Web Services 를 참조하십시오.
카탈로그를 쿼리 최적 화기에 등록하면 테이블이 **쿼리 **watsonx.data 최적화기로 동기화되어 쿼리 최적화가 가능해집니다. 이는 각 카탈로그에 대해 한 번씩 실행되어야 합니다.
-
다음 명령을 실행하여 카탈로그의 각 스키마에 대한 테이블을 동기화합니다.
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 작업을 확인하십시오.
-
카탈로그 및 스키마 목록을 식별합니다.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';