Dieses Dokument enthält eine Referenzvorlage zum Erstellen eines benutzerdefinierten Connectors zum Extrahieren von Metadaten aus Drittanbieterquellen wie MySQL, SQL Server und Oracle. Sie können diesen Connector verwenden, um Metadaten über eine Pipeline für verwaltete Verbindungen in Knowledge Catalog (ehemals Dataplex Universal Catalog) zu importieren. Als Ausgangspunkt ist ein Python-Beispiel-Connector für Oracle Database Express Edition (XE) enthalten. Sie können Connectors auch mit Java, Scala oder R entwickeln.
Funktionsweise von Connectors
Ein Connector extrahiert Metadaten aus einer Drittanbieter-Datenquelle, wandelt die Metadaten in das ImportItem-Format von Knowledge Catalog um und generiert Metadaten-Importdateien, die von Knowledge Catalog importiert werden können.
Der Connector ist Teil einer Pipeline für verwaltete Verbindungen. Eine Pipeline für verwaltete Verbindungen ist ein orchestrierter Workflow, mit dem Sie Knowledge Catalog-Metadaten importieren. Die Pipeline für verwaltete Verbindungen führt den Connector aus und übernimmt andere Aufgaben im Import-Workflow, z. B. das Ausführen eines Metadatenimportjobs und das Erfassen von Logs.
Die Pipeline für verwaltete Verbindungen führt den Connector mit einem Managed Service for Apache Spark-Batchjob aus. Managed Service for Apache Spark bietet eine serverlose Spark-Ausführungsumgebung. Sie können zwar einen Connector erstellen, der Spark nicht verwendet, wir empfehlen jedoch, Spark zu verwenden, da dies die Leistung Ihres Connectors verbessern kann.
Connector-Anforderungen
Für den Connector gelten die folgenden Anforderungen:
- Der Connector muss ein Artifact Registry-Image sein, das in Managed Service for Apache Spark ausgeführt werden kann.
- Der Connector muss Metadatendateien in einem Format generieren, das von einem Knowledge Catalog-Metadatenimportjob (der API-Methode
metadataJobs.create) importiert werden kann. Ausführliche Informationen zu den Anforderungen finden Sie unter Metadaten-Importdatei. Der Connector muss die folgenden Befehlszeilenargumente akzeptieren, um Informationen aus der Pipeline zu empfangen:
Befehlszeilenargument Wert, den die Pipeline bietet target_project_idPROJECT_ID target_location_idREGION target_entry_group_idENTRY_GROUP_ID output_bucketCLOUD_STORAGE_BUCKET_ID output_folderFOLDER_ID Der Connector verwendet diese Argumente, um Metadaten in einer Zieleintragsgruppe
projects/PROJECT_ID/locations/REGION/entryGroups/ENTRY_GROUP_IDzu generieren und in einen Cloud Storage-Bucketgs://CLOUD_STORAGE_BUCKET_ID/FOLDER_IDzu schreiben. Bei jeder Ausführung der Pipeline wird ein neuer Ordner FOLDER_ID im Bucket CLOUD_STORAGE_BUCKET_ID erstellt. Der Connector sollte Metadatenimportdateien in diesen Ordner schreiben.
Die Pipelinevorlagen unterstützen PySpark-Connectors. In den Vorlagen wird davon ausgegangen, dass der Treiber (mainPythonFileUri) eine lokale Datei im Connector-Image mit dem Namen main.py ist. Sie können die Pipelinevorlagen für andere Szenarien ändern, z. B. für einen Spark-Connector, einen anderen Treiber-URI oder andere Optionen.
So verwenden Sie PySpark, um ein Importelement in der Metadaten-Importdatei zu erstellen.
"""PySpark schemas for the data."""
entry_source_schema = StructType([
StructField("display_name", StringType()),
StructField("source", StringType())])
aspect_schema = MapType(StringType(),
StructType([
StructField("aspect_type", StringType()),
StructField("data", StructType([
]))
])
)
entry_schema = StructType([
StructField("name", StringType()),
StructField("entry_type", StringType()),
StructField("fully_qualified_name", StringType()),
StructField("parent_entry", StringType()),
StructField("entry_source", entry_source_schema),
StructField("aspects", aspect_schema)
])
import_item_schema = StructType([
StructField("entry", entry_schema),
StructField("aspect_keys", ArrayType(StringType())),
StructField("update_mask", ArrayType(StringType()))
])
Hinweis
In diesem Leitfaden wird davon ausgegangen, dass Sie mit Python und PySpark vertraut sind.
Lesen Sie die folgenden Informationen:
- Knowledge Catalog-Metadaten – Konzepte
- Dokumentation zu Metadaten-Importjobs
Gehen Sie so vor: Erstellen Sie alle Ressourcen am selben Google CloudStandort.
-
Google Cloud Projekt erstellen oder auswählen
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Projekt in Google Cloud , das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Projekt in Google Cloud aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch Ihren Google Cloud Projektnamen.
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die Dataplex API, die Dataproc API, die Workflows API und die Artifact Registry API, falls sie noch nicht aktiviert sind:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable dataplex.googleapis.com
dataproc.googleapis.com workflows.googleapis.com artifactregistry.googleapis.com -
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Weisen Sie Ihrem Nutzerkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/resourcemanager.projectCreator, roles/billing.projectManager, roles/serviceusage.admin, roles/iam.serviceAccountCreator, roles/iam.securityAdmin, roles/storage.admin, roles/artifactregistry.writer, roles/dataplex.entryGroupOwner, roles/dataplex.entryOwner, roles/dataplex.aspectTypeOwnergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID.USER_IDENTIFIER: Die Kennung für Ihr Nutzerkonto . Beispiel:myemail@example.comROLE: Die IAM-Rolle, die Sie Ihrem Nutzerkonto zuweisen.
-
Richten Sie die Authentifizierung ein:
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) und die Rolle „Project IAM Admin“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen -
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie
SERVICE_ACCOUNT_NAMEmit einem Namen für das Dienstkonto. -
Weisen Sie dem Dienstkonto die IAM-Rolle
roles/ownerzu.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner
Dabei gilt:
SERVICE_ACCOUNT_NAME: der Name des DienstkontosPROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
-
Erstellen Sie einen Cloud Storage-Bucket zum Speichern der Metadaten-Importdateien.
-
Erstellen Sie die folgenden Metadatenressourcen im selben Projekt.
Beispielwerte finden Sie im Abschnitt Beispiel-Metadatenressourcen für eine Oracle-Quelle in diesem Dokument.
- Eintragsgruppe erstellen
-
Benutzerdefinierte Aspekttypen erstellen für die Einträge, die Sie importieren möchten. Verwenden Sie die Namenskonvention
SOURCE–ENTITY_TO_IMPORT.Erstellen Sie beispielsweise für eine Oracle-Datenbank einen Aspekttyp mit dem Namen
oracle-database.Optional können Sie zusätzliche Aspekttypen erstellen, um andere Informationen zu speichern.
-
Benutzerdefinierte Eintragstypen erstellen für die Ressourcen, die Sie importieren möchten, und die entsprechenden Aspekttypen zuweisen. Verwenden Sie die Namenskonvention
SOURCE–ENTITY_TO_IMPORT.Erstellen Sie beispielsweise für eine Oracle-Datenbank einen Eintragstyp mit dem Namen
oracle-database. Verknüpfen Sie ihn mit dem Aspekttyporacle-database.
- Achten Sie darauf, dass Ihre Drittanbieterquelle über Ihr Google Cloud -Projekt zugänglich ist. Weitere Informationen finden Sie unter Netzwerkkonfiguration für Managed Service for Apache Spark.
Einfachen Python-Connector erstellen
Im Beispiel für einen einfachen Python-Connector werden mithilfe der Klassen der Knowledge Catalog-Clientbibliothek Einträge der obersten Ebene für eine Oracle-Datenquelle erstellt. Anschließend geben Sie die Werte für die Eintragsfelder an.
Der Connector erstellt eine Metadaten-Importdatei mit den folgenden Einträgen:
- Ein
instance-Eintrag mit dem Eintragstypprojects/PROJECT_ID/locations/LOCATION/entryTypes/oracle-instance. Dieser Eintrag stellt ein Oracle Database XE-System dar. - Ein
database-Eintrag, der eine Datenbank im Oracle Database XE-System darstellt.
So erstellen Sie einen einfachen Python-Connector:
Klonen Sie das
cloud-dataplex-Repository.Lokale Umgebung einrichten Wir empfehlen, eine virtuelle Umgebung zu verwenden.
mkdir venv python -m venv venv/ source venv/bin/activateVerwenden Sie die aktiven oder Wartungsversionen von Python. Python-Versionen 3.7 und höher werden unterstützt.
Erstellen Sie ein Python-Projekt.
Installationsanforderungen:
pip install -r requirements.txtFolgende Anforderungen sind installiert:
Fügen Sie im Stammverzeichnis des Projekts eine
main.py-Pipelinedatei hinzu.Wenn Sie Ihren Code in Managed Service for Apache Spark bereitstellen, dient die Datei
main.pyals Einstiegspunkt für die Ausführung. Wir empfehlen, die Menge der in der Dateimain.pygespeicherten Informationen zu minimieren. Verwenden Sie diese Datei, um Funktionen und Klassen aufzurufen, die in Ihrem Connector definiert sind, z. B. die Klassesrc/bootstrap.py.Erstellen Sie einen
src-Ordner, um den Großteil der Logik für Ihren Connector zu speichern.Aktualisieren Sie die Datei
src/cmd_reader.pymit einer Python-Klasse, um Befehlszeilenargumente zu akzeptieren. Dazu können Sie das Modul argeparse verwenden.In Produktionsumgebungen empfehlen wir, das Passwort in Secret Manager zu speichern.
Aktualisieren Sie die Datei
src/constants.pymit Code zum Erstellen von Konstanten.Aktualisieren Sie die Datei
src/name_builder.pymit Methoden zum Erstellen der Metadatenressourcen, die der Connector für Ihre Oracle-Ressourcen erstellen soll. Verwenden Sie die Konventionen, die im Abschnitt Beispiel für Metadatenressourcen für eine Oracle-Quelle dieses Dokuments beschrieben werden.Da die Datei
name_builder.pysowohl für den Python- als auch für den PySpark-Kerncode verwendet wird, empfehlen wir, die Methoden als reine Funktionen und nicht als Mitglieder einer Klasse zu schreiben.Aktualisieren Sie die Datei
src/top_entry_builder.pymit Code, um die Einträge auf oberster Ebene mit Daten zu füllen.Aktualisieren Sie die Datei
src/bootstrap.pymit Code, um die Metadaten-Importdatei zu generieren und den Connector auszuführen.Führen Sie den Code lokal aus.
Eine Metadaten-Importdatei mit dem Namen
output.jsonlwird zurückgegeben. Die Datei hat zwei Zeilen, die jeweils ein Importelement darstellen. Die Pipeline für verwaltete Verbindungen liest diese Datei, wenn der Metadatenimportjob ausgeführt wird.Optional: Erweitern Sie das vorherige Beispiel, um die Knowledge Catalog-Clientbibliotheksklassen zum Erstellen von Importelementen für Tabellen, Schemas und Ansichten zu verwenden. Sie können das Python-Beispiel auch in Managed Service for Apache Spark ausführen.
Wir empfehlen, einen Connector zu erstellen, der Spark verwendet und in Managed Service for Apache Spark ausgeführt wird, da dies die Leistung Ihres Connectors verbessern kann.
PySpark-Connector erstellen
Dieses Beispiel basiert auf der PySpark DataFrame API. Sie können PySpark SQL lokal installieren und ausführen, bevor Sie es in Managed Service for Apache Spark ausführen. Wenn Sie PySpark lokal installieren und ausführen, installieren Sie die PySpark-Bibliothek mit pip. Sie müssen jedoch keinen lokalen Spark-Cluster installieren.
Aus Leistungsgründen werden in diesem Beispiel keine vordefinierten Klassen aus der PySpark-Bibliothek verwendet. Stattdessen werden im Beispiel DataFrames erstellt, die in JSON-Einträge konvertiert werden. Die Ausgabe wird dann in eine Metadaten-Importdatei im JSON Lines-Format geschrieben, die in Knowledge Catalog importiert werden kann.
So erstellen Sie einen Connector mit PySpark:
Klonen Sie das
cloud-dataplex-Repository.PySpark installieren:
pip install pysparkInstallationsanforderungen:
pip install -r requirements.txtDie folgenden Anforderungen sind installiert:
Aktualisieren Sie die Datei
oracle_connector.pymit Code, um Daten aus einer Oracle-Datenquelle zu lesen und DataFrames zurückzugeben.Fügen Sie SQL-Abfragen hinzu, um die Metadaten zurückzugeben, die Sie importieren möchten. Die Abfragen müssen die folgenden Informationen zurückgeben:
- Datenbankschemas
- Tabellen, die zu diesen Schemas gehören
- Spalten, die zu diesen Tabellen gehören, einschließlich des Spaltennamens, des Spaltendatentyps und der Angabe, ob die Spalte Nullwerte zulässt oder erforderlich ist
Alle Spalten aller Tabellen und Ansichten werden in derselben Systemtabelle gespeichert. Mit der Methode
_get_columnskönnen Sie Spalten auswählen. Je nach den von Ihnen angegebenen Parametern können Sie Spalten für die Tabellen oder für die Ansichten separat auswählen.Wichtige Hinweise:
- In Oracle gehört ein Datenbankschema einem Datenbanknutzer und hat denselben Namen wie dieser Nutzer.
- Schemaobjekte sind logische Strukturen, die von Nutzern erstellt werden. Objekte wie Tabellen oder Indexe können Daten enthalten, während Objekte wie Ansichten oder Synonyme nur aus einer Definition bestehen.
- Die Datei
ojdbc11.jarenthält den Oracle JDBC-Treiber.
Aktualisieren Sie die Datei
src/entry_builder.pymit freigegebenen Methoden zum Anwenden von Spark-Transformationen.Wichtige Hinweise:
- Mit den Methoden werden die Metadatenressourcen erstellt, die der Connector für Ihre Oracle-Ressourcen erstellt. Verwenden Sie die Konventionen, die im Abschnitt Beispielmetadatenressourcen für eine Oracle-Quelle dieses Dokuments beschrieben werden.
- Die Methode
convert_to_import_itemsgilt für Schemas, Tabellen und Ansichten. Achten Sie darauf, dass die Ausgabe des Connectors aus einem oder mehreren Importelementen besteht, die mit der MethodemetadataJobs.createverarbeitet werden können, und nicht aus einzelnen Einträgen. - Auch in einer Ansicht heißt die Spalte
TABLE_NAME.
Aktualisieren Sie die Datei
bootstrap.pymit Code, um die Metadaten-Importdatei zu generieren und den Connector auszuführen.In diesem Beispiel wird die Metadaten-Importdatei als einzelne JSON Lines-Datei gespeichert. Sie können PySpark-Tools wie die Klasse
DataFrameWriterverwenden, um JSON-Batches parallel auszugeben.Der Connector kann Einträge in beliebiger Reihenfolge in die Metadaten-Importdatei schreiben.
Aktualisieren Sie die Datei
gcs_uploader.pymit Code, um die Metadaten-Importdatei in einen Cloud Storage-Bucket hochzuladen.Erstellen Sie das Connector-Image.
Wenn Ihr Connector mehrere Dateien enthält oder Sie Bibliotheken verwenden möchten, die nicht im Standard-Docker-Image enthalten sind, müssen Sie einen benutzerdefinierten Container verwenden. Managed Service for Apache Spark führt Arbeitslasten in Docker-Containern aus. Erstellen Sie ein benutzerdefiniertes Docker-Image des Connectors und speichern Sie das Image in Artifact Registry. Managed Service for Apache Spark liest das Image aus Artifact Registry.
Erstellen Sie ein Dockerfile:
Verwenden Sie Conda als Paketmanager. Managed Service for Apache Spark stellt
pysparkzur Laufzeit im Container bereit. Daher müssen Sie keine PySpark-Abhängigkeiten in Ihrem benutzerdefinierten Container-Image installieren.Erstellen Sie das benutzerdefinierte Container-Image und übertragen Sie es per Push an Artifact Registry.
Da ein Image mehrere Namen haben kann, können Sie dem Image mit dem Docker-Tag einen Alias zuweisen.
Führen Sie den Connector in Managed Service for Apache Spark aus. Führen Sie den Befehl
gcloud dataproc batches submit pysparkaus, um einen PySpark-Batchjob mit dem benutzerdefinierten Container-Image zu senden.gcloud dataproc batches submit pyspark main.py --project=PROJECT \ --region=REGION --batch=BATCH_ID \ --container-image=CUSTOM_CONTAINER_IMAGE \ --service-account=SERVICE_ACCOUNT_NAME \ --jars=PATH_TO_JAR_FILES \ --properties=PYSPARK_PROPERTIES \ -- PIPELINE_ARGUMENTSWichtige Hinweise:
- Die JAR-Dateien sind Treiber für Spark. Wenn Sie Daten aus Oracle, MySQL oder Postgres lesen möchten, müssen Sie Apache Spark ein bestimmtes Paket zur Verfügung stellen. Das Paket kann sich in Cloud Storage oder im Container befinden. Wenn sich die JAR-Datei im Container befindet, sieht der Pfad in etwa so aus:
file:///path/to/file/driver.jar. In diesem Beispiel ist der Pfad zur JAR-Datei/opt/spark/jars/. - PIPELINE_ARGUMENTS sind die Befehlszeilenargumente für den Connector.
Der Connector extrahiert Metadaten aus der Oracle-Datenbank, generiert eine Metadaten-Importdatei und speichert sie in einem Cloud Storage-Bucket.
- Die JAR-Dateien sind Treiber für Spark. Wenn Sie Daten aus Oracle, MySQL oder Postgres lesen möchten, müssen Sie Apache Spark ein bestimmtes Paket zur Verfügung stellen. Das Paket kann sich in Cloud Storage oder im Container befinden. Wenn sich die JAR-Datei im Container befindet, sieht der Pfad in etwa so aus:
Wenn Sie die Metadaten in der Metadatenimportdatei manuell in Knowledge Catalog importieren möchten, führen Sie einen Metadatenjob aus. Verwenden Sie die Methode
metadataJobs.create:Fügen Sie in der Befehlszeile Umgebungsvariablen hinzu und erstellen Sie einen Alias für den curl-Befehl.
PROJECT_ID=PROJECT LOCATION_ID=LOCATION DATAPLEX_API=dataplex.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION_ID alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'Rufen Sie die API-Methode auf und übergeben Sie die Eintragstypen und Aspekttypen, die Sie importieren möchten.
gcurl https://${DATAPLEX_API}/metadataJobs?metadata_job_id="JOB_ID" -d "$(cat <<EOF { "type": "IMPORT", "import_spec": { "source_storage_uri": "gs://BUCKET/FOLDER/", "entry_sync_mode": "FULL", "aspect_sync_mode": "INCREMENTAL", "scope": { "entry_groups": ["projects/PROJECT/locations/LOCATION/entryGroups/ENTRY_GROUP_ID"], "entry_types": [ "projects/PROJECT/locations/LOCATION/entryTypes/oracle-instance", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-database", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-schema", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-table", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-view"], "aspect_types": [ "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-instance", "projects/dataplex-types/locations/global/aspectTypes/schema", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-database", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-schema", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-table", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-view"], }, }, } EOF )"Der Aspekttyp
schemaist ein globaler Aspekttyp, der von Knowledge Catalog definiert wird.Das Format, das Sie für Namen von Aspekttypen beim Aufrufen der API-Methode verwenden, unterscheidet sich von dem Format, das Sie im Connector-Code verwenden.
Optional: Verwenden Sie Cloud Logging, um Logs für den Metadatenjob aufzurufen. Weitere Informationen finden Sie unter Knowledge Catalog-Logs überwachen.
Pipeline-Orchestrierung einrichten
In den vorherigen Abschnitten wurde gezeigt, wie Sie einen Beispiel-Connector erstellen und manuell ausführen.
In einer Produktionsumgebung führen Sie den Connector als Teil einer Pipeline für verwaltete Verbindungen aus. Dazu verwenden Sie eine Orchestrierungsplattform wie Workflows.
Wenn Sie eine Pipeline für verwaltete Verbindungen mit dem Beispielconnector ausführen möchten, folgen Sie der Anleitung zum Importieren von Metadaten mit Workflows. Gehen Sie so vor:
- Erstellen Sie den Workflow am selben Google Cloud Speicherort wie den Connector.
Aktualisieren Sie in der Workflow-Definitionsdatei die Funktion
submit_pyspark_extract_jobmit dem folgenden Code, um Daten aus der Oracle-Datenbank mit dem von Ihnen erstellten Connector zu extrahieren.- submit_pyspark_extract_job: call: http.post args: url: ${"https://dataproc.googleapis.com/v1/projects/" + args.TARGET_PROJECT_ID + "/locations/" + args.CLOUD_REGION + "/batches"} auth: type: OAuth2 scopes: "https://www.googleapis.com/auth/cloud-platform" headers: Content-Type: "application/json" query: batchId: ${WORKFLOW_ID} body: pysparkBatch: mainPythonFileUri: file:///main.py jars: file:///opt/spark/jars/ojdbc11.jar args: - ${"--host_port=" + args.ORACLE_HOST_PORT} - ${"--user=" + args.ORACLE_USER} - ${"--password=" + args.ORACLE_PASSWORD} - ${"--database=" + args.ORACLE_DATABASE} - ${"--project=" + args.TARGET_PROJECT_ID} - ${"--location=" + args.CLOUD_REGION} - ${"--entry_group=" + args.TARGET_ENTRY_GROUP_ID} - ${"--bucket=" + args.CLOUD_STORAGE_BUCKET_ID} - ${"--folder=" + WORKFLOW_ID} runtimeConfig: version: "2.0" containerImage: "us-central1-docker.pkg.dev/PROJECT/REPOSITORY/oracle-pyspark" environmentConfig: executionConfig: serviceAccount: ${args.SERVICE_ACCOUNT} result: RESPONSE_MESSAGEAktualisieren Sie in der Workflow-Definitionsdatei die
submit_import_job-Funktion mit dem folgenden Code, um die Einträge zu importieren. Die Funktion ruft die API-MethodemetadataJobs.createauf, um einen Metadatenimportjob auszuführen.- submit_import_job: call: http.post args: url: ${"https://dataplex.googleapis.com/v1/projects/" + args.TARGET_PROJECT_ID + "/locations/" + args.CLOUD_REGION + "/metadataJobs?metadata_job_id=" + WORKFLOW_ID} auth: type: OAuth2 scopes: "https://www.googleapis.com/auth/cloud-platform" body: type: IMPORT import_spec: source_storage_uri: ${"gs://" + args.CLOUD_STORAGE_BUCKET_ID + "/" + WORKFLOW_ID + "/"} entry_sync_mode: FULL aspect_sync_mode: INCREMENTAL scope: entry_groups: - ${"projects/" + args.TARGET_PROJECT_ID + "/locations/" + args.CLOUD_REGION + "/entryGroups/"+args.TARGET_ENTRY_GROUP_ID} entry_types: -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-instance" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-database" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-schema" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-table" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-view" aspect_types: -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-instance" -"projects/dataplex-types/locations/global/aspectTypes/schema" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-database" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-schema" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-table" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-view" result: IMPORT_JOB_RESPONSEGeben Sie dieselben Eintragstypen und Aspekttypen an, die Sie beim manuellen Aufrufen der API-Methode angegeben haben. Beachten Sie, dass am Ende jedes Strings kein Komma steht.
Geben Sie beim Ausführen des Workflows die folgenden Laufzeitargumente an:
{ "CLOUD_REGION": "us-central1", "ORACLE_USER": "system", "ORACLE_HOST_PORT": "x.x.x.x:1521", "ORACLE_DATABASE": "xe", "ADDITIONAL_CONNECTOR_ARGS": [], }
Optional: Verwenden Sie Cloud Logging, um Logs für die verwaltete Konnektivitätspipeline aufzurufen. Die Log-Nutzlast enthält einen Link zu den Logs für den Managed Service for Apache Spark-Batchjob und den Metadatenimportjob, sofern relevant. Weitere Informationen finden Sie unter Workflow-Logs ansehen.
Optional: Wenn Sie die Sicherheit, Leistung und Funktionalität Ihrer Pipeline für verwaltete Verbindungen verbessern möchten, können Sie Folgendes tun:
- Verwenden Sie Secret Manager, um die Anmeldedaten für Ihre Drittanbieter-Datenquelle zu speichern.
- Verwenden Sie PySpark, um die JSON Lines-Ausgabe parallel in mehrere Metadaten-Importdateien zu schreiben.
- Verwenden Sie ein Präfix, um große Dateien (über 100 MB) in kleinere Dateien aufzuteilen.
- Fügen Sie weitere benutzerdefinierte Aspekte hinzu, die zusätzliche geschäftliche und technische Metadaten aus Ihrer Quelle erfassen.
Beispiel für Metadatenressourcen für eine Oracle-Quelle
Der Beispielconnector extrahiert Metadaten aus einer Oracle-Datenbank und ordnet sie den entsprechenden Knowledge Catalog-Metadatenressourcen zu.
Hinweise zur Hierarchie
Jedes System in Knowledge Catalog hat einen Stamm-Eintrag, der der übergeordnete Eintrag für das System ist. Der Stamm-Eintrag hat in der Regel den Eintragstyp instance.
In der folgenden Tabelle sehen Sie die Beispielhierarchie der Eintragstypen und Aspekttypen für ein Oracle-System. Der Eintragstyp oracle-database ist beispielsweise mit einem Aspekttyp verknüpft, der ebenfalls oracle-database heißt.
| Eintragstyp-ID | Beschreibung | ID des verknüpften Aspekttyps |
|---|---|---|
oracle-instance |
Das Stammverzeichnis des importierten Systems. | oracle-instance |
oracle-database |
Die Oracle-Datenbank. | oracle-database |
oracle-schema |
Das Datenbankschema. | oracle-schema |
oracle-table |
Eine Tabelle. |
|
oracle-view |
Eine Ansicht. |
|
Der Aspekttyp schema ist ein globaler Aspekttyp, der von Knowledge Catalog definiert wird. Sie enthält eine Beschreibung der Felder in einer Tabelle, Ansicht oder einem anderen Element mit Spalten. Der benutzerdefinierte Aspekttyp oracle-schema enthält den Namen des Oracle-Datenbankschemas.
Beispiel für Importartikel-Felder
Der Connector sollte die folgenden Konventionen für Oracle-Ressourcen verwenden.
-
Vollständig qualifizierte Namen: Für vollständig qualifizierte Namen für Oracle-Ressourcen wird die folgende Namensvorlage verwendet. Verbotene Zeichen werden mit Graviszeichen maskiert.
Ressource Vorlage Beispiel Instanz SOURCE:ADDRESSVerwenden Sie den Host und die Portnummer oder den Domainnamen des Systems.
oracle:`localhost:1521`oderoracle:`myinstance.com`Datenbank SOURCE:ADDRESS,DATABASEoracle:`localhost:1521`.xeSchema SOURCE:ADDRESS,DATABASE,SCHEMAoracle:`localhost:1521`.xe.sysTabelle SOURCE:ADDRESS,DATABASE,SCHEMA,TABLE_NAMEoracle:`localhost:1521`.xe.sys.ordersAnsehen SOURCE:ADDRESS,DATABASE,SCHEMA,VIEW_NAMEoracle:`localhost:1521`.xe.sys.orders_view -
Eintragsnamen oder ‑IDs: Für Einträge für Oracle-Ressourcen wird die folgende Namensvorlage verwendet. Verbotene Zeichen werden durch ein zulässiges Zeichen ersetzt. Ressourcen verwenden das Präfix
projects/PROJECT/locations/LOCATION/entryGroups/ENTRY_GROUP/entries.Ressource Vorlage Beispiel Instanz PREFIX/HOST_PORTprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521Datenbank PREFIX/HOST_PORT/databases/DATABASEprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xeSchema PREFIX/HOST_PORT/databases/DATABASE/database_schemas/SCHEMAprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xe/database_schemas/sysTabelle PREFIX/HOST_PORT/databases/DATABASE/database_schemas/SCHEMA/tables/TABLEprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xe/database_schemas/sys/tables/ordersAnsehen PREFIX/HOST_PORT/databases/DATABASE/database_schemas/SCHEMA/views/VIEWprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xe/database_schemas/sys/views/orders_view -
Übergeordnete Einträge: Wenn ein Eintrag kein Stamm-Eintrag für das System ist, kann er ein Feld für den übergeordneten Eintrag haben, das seine Position in der Hierarchie beschreibt. Das Feld sollte den Namen des übergeordneten Eintrags enthalten. Wir empfehlen, diesen Wert zu generieren.
In der folgenden Tabelle sind die übergeordneten Einträge für Oracle-Ressourcen aufgeführt.
Eintrag Übergeordneter Eintrag Instanz ""(leerer String)Datenbank Instanzname Schema Datenbankname Tabelle Schemaname Ansehen Schemaname Aspektzuordnung: Die Aspektzuordnung muss mindestens einen Aspekt enthalten, der die zu importierende Entität beschreibt. Hier ist ein Beispiel für eine Aspektzuordnung für eine Oracle-Tabelle.
"example-project.us-central1.oracle-table": { "aspect_type": "example-project.us-central1.oracle-table", "path": "", "data": {} },
Vordefinierte Aspekttypen (z. B.
schema), die die Tabellen- oder Ansichtsstruktur definieren, finden Sie imdataplex-types-Projekt am Speicherortglobal.-
Aspektschlüssel: Aspektschlüssel verwenden das Namensformat PROJECT.LOCATION.ASPECT_TYPE. In der folgenden Tabelle finden Sie Beispiel-Aspektschlüssel für Oracle-Ressourcen.
Eintrag Beispiel für einen Aspekt-Schlüssel Instanz example-project.us-central1.oracle-instanceDatenbank example-project.us-central1.oracle-databaseSchema example-project.us-central1.oracle-schemaTabelle example-project.us-central1.oracle-tableAnsehen example-project.us-central1.oracle-view