Manuelle Synchronisierung von Query Optimizer mit watsonx.data Metaspeicher

Informationen zu dieser Task

Um optimierte Abfragen bereitzustellen, ruft der Abfrageoptimierer Daten zu Tabellendefinitionen und Hive- und Iceberg-Statistiken ab, um sie mit MDS in IBM® watsonx.data zu synchronisieren. Sie können die spezifische Hive und Iceberg-Tabelle auswählen, die für den Abfrageoptimierer verfügbar sein muss. Es wird empfohlen, Hive und Iceberg-Statistiken zu erstellen und Spalten für Primär- und Fremdschlüssel zu kennzeichnen, um die besten Ergebnisse zu erzielen.

Die Aktivierung von Query Optimizer synchronisiert automatisch Metadaten für Kataloge, die mit Presto (C++) Engines verbunden sind. Sie müssen jedoch die folgenden Schritte ausführen, wenn:

  • Metadaten für unzugängliche oder beschädigte Kataloge oder Schemata während der Bereitstellung fehlen.
  • An einer Tabelle werden wesentliche Änderungen vorgenommen.
  • Neue Tabellen werden nach der ersten Synchronisierung eingeführt.
  • Ein gelegentlich auftretendes Problem verhindert, dass Tabellen während des automatischen Synchronisierungsprozesses bei der Aktivierung synchronisiert werden.

Vorbereitende Schritte

Um Tabellen von watsonx.data zu synchronisieren, sind folgende Elemente erforderlich:

Die Anweisungen in diesem Thema können jetzt mit der erweiterten Funktion Verwalten von statistischen Aktualisierungen über das Optimizer-Dashboard ausgeführt werden, die erweiterte Abfrageleistungsverbesserungen und Optimierungsfunktionen über mehrere kataloge ermöglicht.

  1. Überprüfen Sie, ob alle erwarteten Tabellen synchronisiert sind, indem Sie das Verfahren unter "Tabellensynchronisierung überprüfen" in watsonx.data befolgen.

  2. Ermitteln Sie die Liste der Hive und Iceberg-Tabellen in watsonx.data die Sie für den Abfrageoptimierer benötigen.

  3. Identifizieren Sie Spalten als Primär- und Fremdschlüssel in Hive.

  4. ANALYZE Hive und Iceberg-Tabellen in Presto (C++) zur Erstellung von Hive und Iceberg-Statistiken.

  5. Nur Benutzer mit Administratorrechten dürfen den ExecuteWxdQueryOptimizer-Befehl ausführen, um die Sicherheit zu erhöhen.

  6. Wenn der Sitzungsparameter is_query_rewriter_plugin_enabled auf false gesetzt ist, können Sie die Befehle ExecuteWxdQueryOptimizer nicht ausführen.

Vorgehensweise

  1. Melden Sie sich bei watsonx.data an.

  2. Gehen Sie zum Arbeitsbereich „Abfrage “.

  3. Führen Sie den ANALYZE Befehl aus demwatsonx.data Webkonsole für die Tabellen, die Sie synchronisieren möchten, um die Statistiken zu generieren (Statistiken sind die Anzahl der Zeilen, der Spaltenname, die Datengröße, die Zeilenanzahl und mehr).

    ANALYZE catalog_name.schema_name.table_name ;
    
  4. Führen Sie den folgenden Befehl aus, um die Metaspeichereigenschaften eines Katalogs im Query Optimizer manuell zu registrieren, indem Sie den Legacy-Metaspeichertyp watsonx-data sowohl für Hive als auch für Iceberg-Kataloge verwenden:

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

    a. Für watsonx.data die Enterprise-Version verwenden Sie den Legacy-Metastore-Typ sowohl watsonx-data für als Hive auch für Iceberg-Kataloge:

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

    Zum Beispiel:

    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- Der Typ des Metaspeichers, mit dem Sie eine Verbindung herstellen wollen. Der unterstützte Wert ist: watsonx-data.

    • watsonx.data <CATALOG_NAME>- wie auf der Seite des Infrastruktur-Managers angegeben (Groß- und Kleinschreibung beachten).

    • <THRIFT_URL>- Wie auf der Seite des Infrastrukturmanagers (klicken Sie auf den Katalog).

    • MDS-Zugangsdaten (<Username> und <Password>) in auth.plain.credentials- müssen auf der Seite watsonx.data erstellt werden. Siehe „Verbinden mit“ watsonx.data auf OpenShift. Wenn der Metaspeicher eine PLAIN-Authentifizierung erfordert, müssen die Anmeldeinformationen im Format username:password oder ibmlhapikey_<username>:apikey angegeben werden. Das Passwort wird sicher in einem Software-Keystore gespeichert.

    • auth.mode- Wenn der Metaspeicher eine Authentifizierung erfordert, geben Sie den zu verwendenden Authentifizierungsmodus an. Die auth.mode muss auf PLAIN eingestellt sein

    • use.SSL- Sie muss true sein, wenn der Metaspeicher eine SSL-Verbindung erfordert.

    • <MDS certificate file path>- Dies muss als Datei auf dem db2u Container als Zertifikat zur Validierung der SSL-Verbindung bereitgestellt werden. Es ist nicht erforderlich, ein Zertifikat zu übermitteln, wenn die SSL-Verbindung mit einem Zertifikat hergestellt wird, das von einer bekannten Zertifizierungsstelle wie DigiCert oder ausgestellt VeriSign wurde. Standardmäßig sind die MDS-Zertifikate unter dem /secrets/external/ibm-lh-tls-secret/ca.crt Pfad im Abfrageoptimierer verfügbar.

      1. Führen Sie den folgenden Befehl aus, um den db2u Query Optimizer Head Pod (OPT_POD) zu identifizieren.

        oc get pod | grep oaas-db2u
        
      2. Führen Sie den folgenden Befehl aus, um das Zertifikat zu generieren, indem Sie die Werte für <OPT_POD> und .

        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. Bei der watsonx.data Lite-Version werden Iceberg-Tabellen mit unterschiedlichen Hive Metastore-Servertypen verwaltet. Je nach den Anforderungen Ihrer Anwendung müssen Sie Metastore-Server für Hive, Iceberg oder beides registrieren.

    1. Registrierung eines Hive Katalogs in watsonx.data der Lite-Version:

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

      Zum Beispiel:

      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- Der Typ des Metaspeichers, mit dem Sie eine Verbindung herstellen wollen. Für die Hive Metastore-Verwaltungstabellen lautet der Wert: watsonx-data-hive.
      • watsonx.data <CATALOG_NAME>- wie auf der Seite des Infrastruktur-Managers angegeben (Groß- und Kleinschreibung beachten).
      • <THRIFT_URL>- Die URI des watsonx.data MDS-Thrift-Servers. Es muss mit beginnen https://.
      • MDS-Zugangsdaten (<Username> und <Password>) in auth.plain.credentials- müssen auf der Seite watsonx.data erstellt werden. Siehe „Verbinden mit watsonx.data auf OpenShift.“ Wenn der Metastore eine PLAIN-Authentifizierung erfordert, müssen die Anmeldedaten im Format username:password oder angegeben ibmlhapikey_<username>:apikey werden. Das Passwort wird sicher in einem Software-Keystore gespeichert.
      • auth.mode- Wenn der Metaspeicher eine Authentifizierung erfordert, geben Sie den zu verwendenden Authentifizierungsmodus an. Der auth.mode muss auf PLAIN gesetzt werden.
      • use.SSL- Sie muss true sein, wenn der Metaspeicher eine SSL-Verbindung erfordert.
      • <MDS certificate file path>- Dies muss als Datei auf dem db2u Container als Zertifikat zur Validierung der SSL-Verbindung bereitgestellt werden. Es ist nicht erforderlich, ein Zertifikat zu übergeben, wenn die SSL-Verbindung mit einem Zertifikat hergestellt wird, das von einer bekannten Zertifizierungsstelle wie DigiCert oder ausgestellt VeriSign wurde. Standardmäßig sind die MDS-Zertifikate im /secrets/external/ibm-lh-tls-secret/ca.crt Pfad im Abfrageoptimierer verfügbar.
    2. Registrieren eines Iceberg-Katalogs aus der watsonx.data Lite-Version:

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

      Zum Beispiel:

      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- Der Typ des Metaspeichers, mit dem Sie eine Verbindung herstellen wollen. Für den Metastore, der Iceberg-Tabellen verwaltet, lautet der Wert: iceberg-rest.
      • watsonx.data <CATALOG_NAME>- wie auf der Seite des Infrastruktur-Managers angegeben (Groß- und Kleinschreibung beachten).
      • <THRIFT_URL>- Die URI des watsonx.data Iceberg REST MDS-Servers. Die URI muss mit beginnen https:// und den Basis-Pfad zum REST-API-Katalog enthalten. Für ist der watsonx.data/mds/iceberg Basispfad.
      • MDS-Zugangsdaten (<Username> und <Password>) in auth.plain.credentials- müssen auf der Seite watsonx.data erstellt werden. Siehe „Verbinden mit watsonx.data auf OpenShift.“ Wenn der Metastore eine PLAIN-Authentifizierung erfordert, müssen die Anmeldedaten im Format username:password oder angegeben ibmlhapikey_<username>:apikey werden. Das Passwort wird sicher in einem Software-Keystore gespeichert.
      • auth.mode- Wenn der Metaspeicher eine Authentifizierung erfordert, geben Sie den zu verwendenden Authentifizierungsmodus an. Der auth.mode muss auf PLAIN gesetzt werden.
      • use.SSL- Sie muss true sein, wenn der Metaspeicher eine SSL-Verbindung erfordert.
      • <MDS certificate file path>- Dies muss als Datei auf dem db2u Container als Zertifikat zur Validierung der SSL-Verbindung bereitgestellt werden. Es ist nicht erforderlich, ein Zertifikat zu übergeben, wenn die SSL-Verbindung mit einem Zertifikat hergestellt wird, das von einer bekannten Zertifizierungsstelle wie DigiCert oder ausgestellt VeriSign wurde. Standardmäßig sind die MDS-Zertifikate im /secrets/external/ibm-lh-tls-secret/ca.crt Pfad im Abfrageoptimierer verfügbar.
  5. Führen Sie zur Registrierung den folgenden Befehl auswatsonx.data Katalog mit Abfrage-Optimierer:

    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>- wie auf der Seite "Infrastructure Manager" angegeben (Groß-/Kleinschreibung beachten).
    • <Metastore_Thrift_endpoint>- Wie auf der Seite "Infrastrukturmanager" (Klicken Sie auf den Katalog) angegeben.
    • MDS-Zugangsdaten (<Username>:<apikey>) – müssen auf watsonx.data erstellt werden. Siehe Verbindung zu watsonx.data über IBM Cloud oder Amazon Web Services.

    Durch die Registrierung des Katalogs beim Abfrageoptimierer können watsonx.data Tabellen mit dem Abfrageoptimierer synchronisiert werden, wodurch eine Abfrageoptimierung ermöglicht wird. Dies muss für jeden Katalog einmal ausgeführt werden.

  6. Führen Sie den folgenden Befehl aus, um die Tabellen für jedes Schema im Katalog zu synchronisieren:

    ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.EXT_METASTORE_SYNC('<CATALOG_NAME>', '<SCHEMA_NAME>', '.*', '<SYNC MODE>', 'CONTINUE', 'OAAS')';
    
    • <CATALOG_NAME>: Der Name des Katalogs, zu dem die zu synchronisierenden Tabellen gehören.
    • <SCHEMA_NAME>: Der Name des Schemas, zu dem die zu synchronisierenden Tabellen gehören.
    • <SYNC MODE>:SKIP ist ein Synchronisierungsmodus, der angibt, dass bereits definierte Objekte übersprungen werden sollen.REPLACE ist ein weiterer Synchronisierungsmodus, der zum Aktualisieren des Objekts verwendet wird, wenn es seit der letzten Synchronisierung geändert wurde.
    • CONTINUE: Der Fehler wird protokolliert, die Verarbeitung wird jedoch fortgesetzt, wenn mehrere Tabellen importiert werden sollen.

    Wenn die Synchronisierung abgeschlossen ist, zeigt die Ausgabe die Liste der synchronisierten Tabellen an. Die Gesamtzahl der synchronisierten Tabellen muss doppelt so hoch sein wie die Anzahl der Tabellen innerhalb des Katalogs oder Schemas. Das liegt daran, dass jede Tabelle zwei Mal synchronisiert wird. Einmal vom externen Metastore zum lokalen Metastore und dann vom lokalen Metastore zum Db2 Katalog.

    Überprüfen Sie den Synchronisierungsvorgang in wenigen Minuten, indem Sie die Schritte unter Überprüfen der Tabellensynchronisierung in befolgen watsonx.data.

  7. Identifizieren Sie die Liste der Kataloge und Schemata inwatsonx.data die Sie benötigen für Abfrage-Optimierer.

    Geben Sie eine SQL-Datei an, um die Einschränkungen für die Abfrage-Optimierer benutzen. Identifizieren Sie in der SQL-Datei Primärschlüssel, Fremdschlüssel und Nicht-Null-Spalten (sofern zutreffend) für jede Tabelle in Ihrem Datensatz.

    Wenn Sie beispielsweise die folgenden drei Tabellen mit den angegebenen Spalten haben,

    Mitarbeiter (EmployeeID,FirstName,LastName, Abteilung und Gehalt), Abteilungen (DepartmentID UndDepartmentName ), UndEmployeeDepartmentMapping (MappingID,EmployeeID, UndDepartmentI ).

    Führen Sie den ALTER Tabellenbefehl zum Definieren der Einschränkungen:

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