Synchronisation manuelle de Query Optimizer avec le métastore watsonx.data
A propos de cette tâche
Pour fournir des requêtes optimisées, Query Optimizer extrait des données sur les définitions de tables et les statistiques d' Hive s et d'Iceberg afin de les synchroniser avec MDS dans IBM® watsonx.data. Vous pouvez sélectionner les tables Hive et Iceberg spécifiques qui doivent être disponibles pour Query Optimizer. Il est recommandé de générer des statistiques Hive et Iceberg et d'étiqueter les colonnes pour les clés primaires et étrangères afin d'obtenir les meilleurs résultats.
L'activation de Query Optimizer synchronise automatiquement les métadonnées des catalogues connectés aux moteurs Presto (C++). Cependant, vous devrez exécuter les étapes suivantes si :
- Les métadonnées des catalogues ou des schémas inaccessibles ou corrompus pendant le déploiement sont manquantes.
- Des modifications importantes sont apportées à un tableau.
- De nouvelles tables sont introduites après l'opération de synchronisation initiale.
- Un problème intermittent empêche les tables d'être synchronisées pendant le processus de synchronisation automatique lors de l'activation.
Avant de commencer
Pour synchroniser les tables d' watsonx.data, les éléments suivants sont requis :
Les instructions de cette rubrique peuvent désormais être exécutées à l'aide de la fonctionnalité améliorée Gestion des mises à jour statistiques à partir du tableau de bord Optimizer, qui permet d'améliorer les performances des requêtes et d'optimiser les capacités sur plusieurs catalogues catalogues.
-
Vérifiez que toutes les tables attendues sont synchronisées en suivant la procédure décrite dans la section Vérification de la synchronisation des tables dans watsonx.data.
-
Identifiez la liste des tables Hive et Iceberg dans watsonx.data dont vous avez besoin pour Query Optimizer.
-
Identifier les colonnes comme clés primaires et étrangères dans les tables Hive et Iceberg.
-
ANALYZETables Hive et Iceberg dans Presto (C++) pour générer des statistiques Hive et Iceberg. -
Seuls les utilisateurs disposant de privilèges d'administrateur sont autorisés à exécuter la commande
ExecuteWxdQueryOptimizer, ce qui constitue une amélioration de la sécurité. -
Si le paramètre de session
is_query_rewriter_plugin_enabledest défini surfalse, vous ne pourrez pas exécuter les commandesExecuteWxdQueryOptimizer.
Procédure
-
Connectez-vous à watsonx.data.
-
Accédez à l'espace de travail Requête.
-
Exécutez le
ANALYZEcommande duwatsonx.data console Web pour les tables que vous souhaitez synchroniser pour générer les statistiques (les statistiques correspondent au nombre de lignes, au nom de la colonne, à la taille des données, au nombre de lignes, etc.).ANALYZE catalog_name.schema_name.table_name ; -
Exécutez la commande suivante pour enregistrer manuellement les propriétés du métastore d'un catalogue dans l'Optimiseur de requêtes en utilisant le type de métastore hérité
watsonx-datapour les catalogues Hive et Iceberg :ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>', '<ARGUMENTS>', ?, ?)';a. Pour la version watsonx.data Enterprise, utilisez le type de métastore
watsonx-datahérité pour les catalogues Hive et 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>', ?, ?)Exemple :
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- Le type de métastore auquel vous vous connectez. La valeur prise en charge est :watsonx-data. -
watsonx.data <CATALOG_NAME>- comme indiqué sur la page du gestionnaire d'infrastructure (sensible à la casse). -
<THRIFT_URL>- Telle qu'elle est obtenue à partir de la page du gestionnaire d'infrastructure (cliquer sur le catalogue). -
MDS credentials (
<Username>et<Password>) dansauth.plain.credentials- Doit être créé du côté de watsonx.data. Voir Connexion à watsonx.data sur OpenShift. Si le métastore requiert une authentification PLAIN, les informations d'identification doivent être spécifiées au formatusername:passwordouibmlhapikey_<username>:apikey. Le mot de passe est stocké en toute sécurité dans une base de données logicielle. -
auth.mode- Si le métastore nécessite une authentification, indique le mode d'authentification à utiliser. Le site auth.mode doit être réglé sur PLAIN -
use.SSL- Il doit être vrai si le métastore nécessite une connexion SSL. -
<MDS certificate file path>- Ceci doit être fourni sous forme de fichier sur le db2u conteneur en tant que certificat pour valider la connexion SSL. Il n'est pas nécessaire de transmettre un certificat si la connexion SSL est établie à l'aide d'un certificat émis par une autorité de certification reconnue telle que DigiCert ou VeriSign. Par défaut, les certificats MDS sont disponibles sous le /secrets/external/ibm-lh-tls-secret/ca.crt chemin d'accès dans l'optimiseur de requêtes.-
Exécutez la commande suivante pour identifier le pod de tête de db2u Query Optimizer (OPT_POD).
oc get pod | grep oaas-db2u -
Exécutez la commande suivante pour générer le certificat en remplaçant les valeurs pour <OPT_POD> et
. 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. Pour la version watsonx.data Lite, les tables Hive et Iceberg sont gérées à l'aide de types de serveurs de métastore distincts. En fonction des besoins de votre application, vous devez enregistrer les serveurs metastore pour Hive, Iceberg, ou les deux.
-
Enregistrement d'un Hive catalogue dans la version 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>', ?, ?)';Exemple :
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- Le type de métastore auquel vous vous connectez. Pour les tables de Hive gestion du métastore, la valeur est :watsonx-data-hive.watsonx.data <CATALOG_NAME>- comme indiqué sur la page du gestionnaire d'infrastructure (sensible à la casse).<THRIFT_URL>- L'URI du serveur watsonx.data MDS Thrift. Il doit commencer parhttps://.- MDS credentials (
<Username>et<Password>) dansauth.plain.credentials- Doit être créé du côté de watsonx.data. Voir Connexion à watsonx.data sur OpenShift. Si le métastore nécessite une authentification PLAIN, les informations d'identification doivent être spécifiées au formatusername:passwordouibmlhapikey_<username>:apikey. Le mot de passe est stocké en toute sécurité dans une base de données logicielle. auth.mode- Si le métastore nécessite une authentification, indique le mode d'authentification à utiliser. Leauth.modedoit être réglé surPLAIN.use.SSL- Il doit être vrai si le métastore nécessite une connexion SSL.<MDS certificate file path>- Ceci doit être fourni sous forme de fichier sur le db2u conteneur en tant que certificat pour valider la connexion SSL. Il n'est pas nécessaire de transmettre un certificat si la connexion SSL est établie à l'aide d'un certificat émis par une autorité de certification reconnue telle que DigiCert ou VeriSign. Par défaut, les certificats MDS sont disponibles sous le /secrets/external/ibm-lh-tls-secret/ca.crt chemin d'accès dans l'optimiseur de requêtes.
-
Enregistrement d'un catalogue Iceberg à partir de la watsonx.data version 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>', ?, ?)';Exemple :
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- Le type de métastore auquel vous vous connectez. Pour le métastore gérant les tables Iceberg, la valeur est :iceberg-rest.watsonx.data <CATALOG_NAME>- comme indiqué sur la page du gestionnaire d'infrastructure (sensible à la casse).<THRIFT_URL>- L'URI du serveur watsonx.data Iceberg REST MDS. L'URI doit commencer parhttps://et contenir le chemin d'accès de base au catalogue de l'API REST. Pour watsonx.data, le chemin de base est/mds/iceberg.- MDS credentials (
<Username>et<Password>) dansauth.plain.credentials- Doit être créé du côté de watsonx.data. Voir Connexion à watsonx.data sur OpenShift. Si le métastore nécessite une authentification PLAIN, les informations d'identification doivent être spécifiées au formatusername:passwordouibmlhapikey_<username>:apikey. Le mot de passe est stocké en toute sécurité dans une base de données logicielle. auth.mode- Si le métastore nécessite une authentification, indique le mode d'authentification à utiliser. Leauth.modedoit être réglé surPLAIN.use.SSL- Il doit être vrai si le métastore nécessite une connexion SSL.<MDS certificate file path>- Ceci doit être fourni sous forme de fichier sur le db2u conteneur en tant que certificat pour valider la connexion SSL. Il n'est pas nécessaire de transmettre un certificat si la connexion SSL est établie à l'aide d'un certificat émis par une autorité de certification reconnue telle que DigiCert ou VeriSign. Par défaut, les certificats MDS sont disponibles sous le /secrets/external/ibm-lh-tls-secret/ca.crt chemin d'accès dans l'optimiseur de requêtes.
-
-
Exécutez la commande suivante pour vous inscrirewatsonx.data catalogue avec Optimiseur de requête:
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>- comme indiqué sur la page Infrastructure Manager (sensible à la casse).<Metastore_Thrift_endpoint>- Telles qu'obtenues à partir de la page Gestionnaire d'infrastructure (Cliquez sur le catalogue).- MDS Credentials (
<Username>:<apikey>)- Doit être créé sur le site watsonx.data. Voir Se connecter à watsonx.data sur IBM Cloud ou Amazon Web Services.
L'enregistrement du catalogue dans l 'optimiseur de requêtes permet de watsonx.data synchroniser les tables dans l 'optimiseur de requêtes, ce qui permet d'optimiser les requêtes. Cette opération doit être exécutée une fois pour chaque catalogue.
-
Exécutez la commande suivante pour synchroniser les tables de chaque schéma du catalogue :
ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.EXT_METASTORE_SYNC('<CATALOG_NAME>', '<SCHEMA_NAME>', '.*', '<SYNC MODE>', 'CONTINUE', 'OAAS')';<CATALOG_NAME>: Le nom du catalogue auquel appartiennent les tables à synchroniser.<SCHEMA_NAME>: Le nom du schéma auquel appartiennent les tables à synchroniser.<SYNC MODE>:SKIPest un mode de synchronisation indiquant que les objets déjà définis doivent être ignorés.REPLACEest un autre mode de synchronisation utilisé pour mettre à jour l'objet s'il a été modifié depuis la dernière synchronisation.CONTINUE: L'erreur est consignée, mais le traitement continue si plusieurs tables doivent être importées.
Lorsque la synchronisation est terminée, la sortie affiche la liste des tables synchronisées. Le nombre total de tables synchronisées doit être le double du nombre de tables dans le catalogue ou le schéma. En effet, chaque table est synchronisée deux fois. Une fois du métastore externe vers le métastore local, puis du métastore local vers le Db2 catalogue.
Vérifiez le bon déroulement de la synchronisation après quelques minutes en suivant la procédure décrite dans Vérification de la synchronisation des tables dans watsonx.data.
-
Identifiez la liste des catalogues et des schémas danswatsonx.data dont vous avez besoin pour Optimiseur de requête.
Fournir un fichier SQL pour définir les contraintes du Optimiseur de requête utiliser. Dans le fichier SQL, identifiez les clés primaires, les clés étrangères et les colonnes non nulles, le cas échéant, pour chaque table de votre ensemble de données.
Par exemple, si vous disposez des trois tableaux suivants avec les colonnes données,
Employés (EmployeeID,FirstName,LastName, Département et Salaire), Départements (DepartmentID etDepartmentName ), etEmployeeDepartmentMapping (MappingID,EmployeeID, etDepartmentI ).
Exécutez le
ALTERcommande table pour définir les contraintes :-- 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';