Sincronización manual del optimizador de consultas con el metastore watsonx.data

Acerca de esta tarea

Para proporcionar consultas optimizadas, Query Optimizer extrae datos sobre definiciones de tablas y estadísticas de Hive e Iceberg para sincronizarse con MDS en IBM® watsonx.data. Puede seleccionar la tabla Hive e Iceberg específica que debe estar disponible para el Optimizador de consultas. Se recomienda generar estadísticas Hive e Iceberg y etiquetar las columnas de claves primarias y foráneas para obtener los mejores resultados.

Al activar Optimizador de consultas se sincronizan automáticamente los metadatos de los catálogos que están conectados a motores Presto (C++). Sin embargo, tendrá que ejecutar los siguientes pasos si:

  • Faltan metadatos de catálogos o esquemas inaccesibles o dañados durante la implantación.
  • Se realizan cambios significativos en una tabla.
  • Se introducen nuevas tablas tras la operación de sincronización inicial.
  • Un problema intermitente está impidiendo que se sincronicen las tablas durante el proceso de sincronización automática tras la activación.

Antes de empezar

Para sincronizar tablas de watsonx.data, se requieren los siguientes elementos:

Las instrucciones de este tema pueden ejecutarse ahora utilizando la función mejorada Gestión de actualizaciones estadísticas desde el panel de control Optimizer, que permite mejoras avanzadas del rendimiento de las consultas y funciones de optimización en varios catálogos.

  1. Verifique que todas las tablas esperadas estén sincronizadas siguiendo el procedimiento en Verificar sincronización de tablas en watsonx.data.

  2. Identifique la lista de tablas Hive e Iceberg en watsonx.data que necesita para el Optimizador de consultas.

  3. Identificar columnas como claves primarias y foráneas en las tablas Hive e Iceberg.

  4. ANALYZE Tablas Hive e Iceberg en Presto (C++) para generar estadísticas Hive e Iceberg.

  5. Sólo los usuarios con privilegios de administrador pueden ejecutar el comando ExecuteWxdQueryOptimizer como una característica de mejora de la seguridad.

  6. Si el parámetro de sesión is_query_rewriter_plugin_enabled se establece en false, no podrá ejecutar los comandos ExecuteWxdQueryOptimizer.

Procedimiento

  1. Inicie sesión en watsonx.data.

  2. Ir al espacio de trabajo de consultas.

  3. Ejecute el ANALYZE comando de lawatsonx.data consola web para las tablas que desea sincronizar para generar las estadísticas (las estadísticas son el número de filas, el nombre de la columna, el tamaño de los datos, el recuento de filas y más).

    ANALYZE catalog_name.schema_name.table_name ;
    
  4. Ejecute el siguiente comando para registrar manualmente las propiedades del metastore de un catálogo en el Optimizador de consultas utilizando el tipo de metastore heredado watsonx-data para los catálogos Hive e Iceberg:

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

    a. Para la versión watsonx.data Enterprise, utilice el tipo de metastore heredado watsonx-data tanto para Hive como para los catálogos Iceberg:

    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>', ?, ?)
    

    Por ejemplo:

    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- El tipo de metastore al que se está conectando. El valor admitido es: watsonx-data.

    • watsonx.data <CATALOG_NAME>- como se muestra en la página del Gestor de Infraestructura (distingue mayúsculas de minúsculas).

    • <THRIFT_URL>- Tal y como se obtiene de la página del Gestor de Infraestructuras (haga clic en el catálogo).

    • Credenciales MDS (<Username> y <Password>) en auth.plain.credentials- Deben crearse en el lado watsonx.data. Consulte Conexión a watsonx.data en OpenShift. Si el metastore requiere autenticación PLAIN, las credenciales deben especificarse en el formato username:password o ibmlhapikey_<username>:apikey. La contraseña se almacena de forma segura en un almacén de claves de software.

    • auth.mode- Si el metastore requiere autenticación, indica el modo de autenticación a utilizar. La dirección auth.mode debe ser PLAIN

    • use.SSL- Debe ser true si el metastore requiere una conexión SSL.

    • <MDS certificate file path>- Debe proporcionarse como un archivo en el db2u contenedor como certificado para validar la conexión SSL. No es necesario pasar un certificado si la conexión SSL se establece utilizando un certificado emitido por una CA conocida, como DigiCert o VeriSign. De forma predeterminada, los certificados MDS están disponibles en la /secrets/external/ibm-lh-tls-secret/ca.crt ruta en el optimizador de consultas.

      1. Ejecute el siguiente comando para identificar el pod principal del optimizador de consultas db2u (OPT_POD).

        oc get pod | grep oaas-db2u
        
      2. Ejecute el siguiente comando para generar el certificado sustituyendo los valores de <OPT_POD> y .

        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. En la versión watsonx.data Lite, Hive las tablas Iceberg se gestionan utilizando distintos tipos de servidores de metadatos. Dependiendo de las necesidades de su aplicación, debe registrar servidores metastore para Hive, Iceberg o ambos.

    1. Registrar un Hive catálogo en la versión watsonx.data Lite:

      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>', ?, ?)';
      

      Por ejemplo:

      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- El tipo de metastore al que se está conectando. Para las tablas de Hive gestión de metadatos, el valor es: watsonx-data-hive.
      • watsonx.data <CATALOG_NAME>- como se muestra en la página del Gestor de Infraestructura (distingue mayúsculas de minúsculas).
      • <THRIFT_URL>- El URI del servidor watsonx.data MDS Thrift. Debe comenzar con https://.
      • Credenciales MDS (<Username> y <Password>) en auth.plain.credentials- Deben crearse en el lado watsonx.data. Consulte Conexión a watsonx.data en OpenShift. Si el metastore requiere autenticación PLAIN, las credenciales deben especificarse en el formato username:password o ibmlhapikey_<username>:apikey. La contraseña se almacena de forma segura en un almacén de claves de software.
      • auth.mode- Si el metastore requiere autenticación, indica el modo de autenticación a utilizar. El auth.mode debe estar configurado en PLAIN.
      • use.SSL- Debe ser true si el metastore requiere una conexión SSL.
      • <MDS certificate file path>- Debe proporcionarse como un archivo en el db2u contenedor como certificado para validar la conexión SSL. No es necesario pasar un certificado si la conexión SSL se establece utilizando un certificado emitido por una CA conocida como DigiCert o VeriSign. Por defecto, los certificados MDS están disponibles en la /secrets/external/ibm-lh-tls-secret/ca.crt ruta en el optimizador de consultas.
    2. Registrar un catálogo Iceberg desde la versión watsonx.data Lite:

      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>', ?, ?)';
      

      Por ejemplo:

      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- El tipo de metastore al que se está conectando. Para el metastore que gestiona las tablas Iceberg, el valor es: iceberg-rest.
      • watsonx.data <CATALOG_NAME>- como se muestra en la página del Gestor de Infraestructura (distingue mayúsculas de minúsculas).
      • <THRIFT_URL>- El URI del servidor watsonx.data Iceberg REST MDS. La URI debe comenzar con https:// y contener la ruta base al catálogo de la API REST. Para watsonx.data, la ruta base es /mds/iceberg.
      • Credenciales MDS (<Username> y <Password>) en auth.plain.credentials- Deben crearse en el lado watsonx.data. Consulte Conexión a watsonx.data en OpenShift. Si el metastore requiere autenticación PLAIN, las credenciales deben especificarse en el formato username:password o ibmlhapikey_<username>:apikey. La contraseña se almacena de forma segura en un almacén de claves de software.
      • auth.mode- Si el metastore requiere autenticación, indica el modo de autenticación a utilizar. El auth.mode debe estar configurado en PLAIN.
      • use.SSL- Debe ser true si el metastore requiere una conexión SSL.
      • <MDS certificate file path>- Debe proporcionarse como un archivo en el db2u contenedor como certificado para validar la conexión SSL. No es necesario pasar un certificado si la conexión SSL se establece utilizando un certificado emitido por una CA conocida como DigiCert o VeriSign. Por defecto, los certificados MDS están disponibles en la /secrets/external/ibm-lh-tls-secret/ca.crt ruta en el optimizador de consultas.
  5. Ejecute el siguiente comando para registrarsewatsonx.data catálogo con Optimizador de consultas:

    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>- como se muestra en la página del Administrador de infraestructura (distingue entre mayúsculas y minúsculas).
    • <Metastore_Thrift_endpoint>- Según se obtiene de la página del Administrador de Infraestructura (Haga clic en el catálogo).
    • Credenciales MDS (<Username>:<apikey>): Deben crearse en el watsonx.data. Consulte Conexión a watsonx.data en IBM Cloud o Amazon Web Services.

    El registro del catálogo en el optimizador de consultas permite watsonx.data sincronizar las tablas con el optimizador de consultas, lo que permite optimizar las consultas. Esto debe ejecutarse una vez para cada catálogo.

  6. Ejecute el siguiente comando para sincronizar las tablas de cada esquema del catálogo:

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.EXT_METASTORE_SYNC('<CATALOG_NAME>', '<SCHEMA_NAME>', '.*', '<SYNC MODE>', 'CONTINUE', 'OAAS')';
    
    • <CATALOG_NAME>: El nombre del catálogo al que pertenecen las tablas a sincronizar.
    • <SCHEMA_NAME>: El nombre del esquema al que pertenecen las tablas a sincronizar.
    • <SYNC MODE>:SKIP es un modo de sincronización que indica que los objetos que ya están definidos deben omitirse.REPLACE es otro modo de sincronización que se utiliza para actualizar el objeto si se ha modificado desde la última sincronización.
    • CONTINUE: El error se registra, pero el procesamiento continúa si se van a importar varias tablas.

    Una vez finalizada la sincronización, la salida muestra la lista de tablas sincronizadas. El número total de tablas sincronizadas debe ser el doble del número de tablas del catálogo o esquema. Esto se debe a que cada tabla se sincroniza dos veces. Una vez desde el metastore externo al metastore local, y luego desde el metastore local al Db2 catálogo.

    Comprueba la operación de sincronización en unos minutos siguiendo el procedimiento descrito en Comprobación de la sincronización de tablas en watsonx.data.

  7. Identificar la lista de catálogos y esquemas enwatsonx.data que requieres para Optimizador de consultas.

    Proporcione un archivo SQL para definir las restricciones para el Optimizador de consultas usar. En el archivo SQL, identifique las claves primarias, las claves externas y las columnas no nulas cuando corresponda para cada tabla de su conjunto de datos.

    Por ejemplo, si tiene las siguientes tres tablas con las columnas dadas,

    Empleados (EmployeeID,FirstName,LastName, Departamento y Salario), Departamentos (DepartmentID yDepartmentName ), yEmployeeDepartmentMapping (MappingID,EmployeeID, yDepartmentI ).

    Ejecute el ALTER comando de tabla para definir las restricciones:

    -- 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';