Mit benutzerdefinierten Connectors können Sie Metadaten aus Drittanbieter-Datenquellen wie MySQL, SQL Server und Oracle extrahieren. Diese Metadaten können Sie dann über eine Pipeline für verwaltete Verbindungen in Knowledge Catalog (früher Dataplex Universal Catalog) importieren. Mit einem benutzerdefinierten Connector können Sie Assets aus Datenquellen katalogisieren, suchen und verwalten, für die es keinen vordefinierten Connector gibt.
Sie können die PySpark-Referenzvorlage und den Python-Beispiel-Connector für die Oracle Database Express Edition (XE) auf dieser Seite als Ausgangspunkt für die Erstellung Ihres eigenen Connectors verwenden.
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 Importworkflow, z. B. das Ausführen eines Metadatenimportjobs und das Erfassen von Logs.
Die verwaltete Verbindungspipeline führt den Connector mit einem Batchjob von Managed Service for Apache Spark 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. Sie können Connectors mit Python, Java, Scala oder R entwickeln.
Anforderungen an Connectors
Für den Connector gelten die folgenden Anforderungen:
- Der Connector muss ein Artifact Registry-Image sein, das auf 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. Detaillierte Anforderungen finden Sie unter Metadaten-Importdatei. Der Connector muss die folgenden Befehlszeilenargumente akzeptieren, um Informationen von der Pipeline zu erhalten:
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 im Bucket CLOUD_STORAGE_BUCKET_ID ein neuer Ordner FOLDER_ID erstellt. Der Connector sollte Metadaten-Importdateien 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
Im Beispiel auf dieser Seite wird ein Python-Connector für Oracle Database Express Edition (XE) verwendet. Es wird davon ausgegangen, dass Sie mit Python und PySpark vertraut sind.
Prüfen Sie die folgenden Informationen:
- Konzepte für Knowledge Catalog-Metadaten
- Dokumentation zu Metadaten-Importjobs
Gehen Sie so vor: Erstellen Sie alle Ressourcen am selben Google Cloud-Standort.
-
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
-
Erstellen Sie ein Projekt in Google Cloud :
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Projekt Google Cloud aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.
Aktivieren Sie die Dataplex, Dataproc, Workflows und Artifact Registry APIs, falls sie noch nicht aktiviert sind:
Erforderliche Rollen zum Aktivieren von APIs
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 Inhaberrolle (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 Beispielmetadatenressourcen für eine Oracle-Quelle in diesem Dokument.
- Eintragsgruppe erstellen
-
Erstellen Sie benutzerdefinierte Aspekttypen 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.
-
Erstellen Sie benutzerdefinierte Eintragstypen für die Ressourcen, die Sie importieren möchten, und weisen Sie ihnen die relevanten Aspekttypen zu. 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 von Ihrem Google Cloud -Projekt aus 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 auf oberster 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 ab 3.7 werden unterstützt.
Erstellen Sie ein Python-Projekt.
Installationsanforderungen:
pip install -r requirements.txtDie folgenden 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, um Konstanten zu erstellen.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 Beispielmetadatenressourcen 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 enthält 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 Clientbibliotheksklassen von Knowledge Catalog zu verwenden, um Importelemente für Tabellen, Schemas und Ansichten zu erstellen. 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 des Connectors verbessern kann.
PySpark-Connector erstellen
Dieses Beispiel basiert auf der PySpark DataFrame API. Sie können PySpark SQL installieren und lokal 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 DataFrames in JSON-Einträge konvertiert und die Ausgabe 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 Spaltenname, Spaltendatentyp und Angabe, ob die Spalte Nullwerte enthalten darf oder erforderlich ist
Alle Spalten aller Tabellen und Ansichten werden in derselben Systemtabelle gespeichert. Sie können Spalten mit der Methode
_get_columnsauswä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, und Objekte wie Ansichten oder Synonyme bestehen nur aus einer Definition.
- 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 es in Artifact Registry. Managed Service for Apache Spark liest das Image aus Artifact Registry.
So erstellen Sie ein Dockerfile:
Verwenden Sie Conda als Paketmanager. Managed Service for Apache Spark stellt
pysparkzur Laufzeit im Container bereit. Sie müssen also 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 lautet 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 beim Aufrufen der API-Methode für Aspekttypnamen 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, indem Sie eine Orchestrierungsplattform wie Workflows verwenden.
Wenn Sie eine Pipeline für verwaltete Verbindungen mit dem Beispiel-Connector 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 Standort 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 Funktion
submit_import_jobmit 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 Aufruf der API-Methode angegeben haben. Beachten Sie, dass am Ende der einzelnen 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 (mehr als 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 Beispiel-Connector extrahiert Metadaten aus einer Oracle-Datenbank und ordnet die Metadaten den entsprechenden Knowledge Catalog-Metadatenressourcen zu.
Überlegungen zur Hierarchie
Jedes System in Knowledge Catalog hat einen Stammeintrag, der der übergeordnete Eintrag für das System ist. In der Regel hat der Stammeintrag den Eintragstyp instance.
In der folgenden Tabelle sehen Sie die Beispielhierarchie von Eintragstypen und Aspekttypen für ein Oracle-System. Der Eintragstyp oracle-database ist beispielsweise mit einem Aspekttyp verknüpft, der ebenfalls den Namen oracle-database hat.
| Eintragstyp-ID | Beschreibung | Verknüpfte Aspekttyp-ID |
|---|---|---|
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. Es enthält eine Beschreibung der Felder in einer Tabelle, Ansicht oder anderen Entität mit Spalten. Der benutzerdefinierte Aspekttyp oracle-schema enthält den Namen des Oracle-Datenbankschemas.
Beispielfelder für Importelemente
Der Connector sollte die folgenden Konventionen für Oracle-Ressourcen verwenden.
-
Vollständig qualifizierte Namen: Vollständig qualifizierte Namen für Oracle-Ressourcen verwenden die folgende Namensvorlage. Unzulässige 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 Eintrags-IDs: Einträge für Oracle-Ressourcen verwenden die folgende Namensvorlage. Unzulässige 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 Stammeintrag für das System ist, kann er ein Feld für einen ü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 im Projektdataplex-typesam Standortglobaldefinieren, finden Sie hier.-
Aspektschlüssel: Aspektschlüssel verwenden das Namensformat PROJECT.LOCATION.ASPECT_TYPE. Die folgende Tabelle enthält Beispiele für Aspektschlüssel für Oracle-Ressourcen.
Eintrag Beispiel für einen Aspektschlü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