במסמך הזה מובאת תבנית הפניה ליצירת מחבר בהתאמה אישית לחילוץ מטא-נתונים ממקורות צד שלישי, כמו MySQL, SQL Server ו-Oracle. אפשר להשתמש במחבר הזה כדי לייבא מטא-נתונים אל Dataplex Universal Catalog דרך צינור קישוריות מנוהל. דוגמה למחבר Python ל-Oracle Database Express Edition (XE) כלולה כנקודת התחלה. אפשר גם לפתח מחברים באמצעות Java, Scala או R.
איך מחברים עובדים
מחבר חולץ מטא-נתונים ממקור נתונים של צד שלישי, משנה את המטא-נתונים לפורמט של Dataplex Universal Catalog ImportItem ומייצר קבצים של ייבוא מטא-נתונים שאפשר לייבא באמצעות Dataplex Universal Catalog.
המחבר הוא חלק מצינור קישוריות מנוהל. צינור קישוריות מנוהל הוא תהליך עבודה מתואם שמשמש לייבוא מטא-נתונים של Dataplex Universal Catalog. צינור הקישוריות המנוהל מפעיל את המחבר ומבצע משימות אחרות בתהליך הייבוא, כמו הפעלת משימת ייבוא של מטא-נתונים ותיעוד יומנים.
צינור הקישוריות המנוהל מפעיל את המחבר באמצעות משימה באצווה של Google Cloud Serverless for Apache Spark. Serverless ל-Apache Spark מספק סביבת הפעלה של Spark ללא שרת. אפשר ליצור מחבר שלא משתמש ב-Spark, אבל מומלץ להשתמש ב-Spark כי הוא יכול לשפר את הביצועים של המחבר.
דרישות לגבי מחברים
המחבר צריך לעמוד בדרישות הבאות:
- המחבר חייב להיות תמונה ב-Artifact Registry שאפשר להריץ ב-Serverless for Apache Spark.
- המחבר צריך ליצור קובצי מטא-נתונים בפורמט שאפשר לייבא באמצעות משימת ייבוא מטא-נתונים של Dataplex Universal Catalog (השיטה
metadataJobs.createAPI). דרישות מפורטות מופיעות במאמר בנושא ייבוא קובץ מטא נתונים. המחבר צריך לקבל את הארגומנטים הבאים של שורת הפקודה כדי לקבל מידע מהצינור:
ארגומנט בשורת הפקודה הערך שהצינור מספק target_project_idPROJECT_ID target_location_idREGION target_entry_group_idENTRY_GROUP_ID output_bucketCLOUD_STORAGE_BUCKET_ID output_folderFOLDER_ID המחבר משתמש בארגומנטים האלה כדי ליצור מטא-נתונים בקבוצת רשומות יעד
projects/PROJECT_ID/locations/REGION/entryGroups/ENTRY_GROUP_ID, וכדי לכתוב לקטגוריה של Cloud Storagegs://CLOUD_STORAGE_BUCKET_ID/FOLDER_ID. בכל הפעלה של צינור הנתונים נוצרת תיקייה חדשה FOLDER_ID בדלי CLOUD_STORAGE_BUCKET_ID. המחבר אמור לכתוב קבצים של ייבוא מטא-נתונים לתיקייה הזו.
תבניות הצינור תומכות במחברי PySpark. התבניות מניחות שהדרייבר
(mainPythonFileUri)
הוא קובץ מקומי בתמונת המחבר בשם main.py. אפשר לשנות את תבניות הצינור לתרחישים אחרים, כמו מחבר Spark, מזהה משאבים אחיד (URI) אחר של מנהל התקן או אפשרויות אחרות.
כך משתמשים ב-PySpark כדי ליצור פריט ייבוא בקובץ ייבוא המטא-נתונים.
"""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()))
])
לפני שמתחילים
במדריך הזה אנחנו יוצאים מנקודת הנחה שאתם מכירים את Python ואת PySpark.
כדאי לבדוק את המידע הבא:
צריך לבצע את הפעולות הבאות. יוצרים את כל המשאבים באותו Google Cloud מיקום.
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Dataplex, Dataproc, Workflows, and Artifact Registry APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable dataplex.googleapis.com
dataproc.googleapis.com workflows.googleapis.com artifactregistry.googleapis.com -
Install the Google Cloud CLI.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
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
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
-
Set up authentication:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAMEwith a name for the service account. -
Grant the
roles/ownerIAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner
Replace the following:
SERVICE_ACCOUNT_NAME: the name of the service accountPROJECT_ID: the project ID where you created the service account
-
Ensure that you have the Create Service Accounts IAM role
(
-
יוצרים קטגוריה של Cloud Storage לאחסון קובצי ייבוא של מטא-נתונים.
-
יוצרים את משאבי המטא-נתונים הבאים באותו פרויקט.
דוגמאות לערכים מופיעות בקטע דוגמאות למשאבי מטא-נתונים למקור Oracle במסמך הזה.
- יצירת קבוצה של רשומות
-
יוצרים סוגים מותאמים אישית של היבטים לרשומות שרוצים לייבא. משתמשים במוסכמה למתן שמות
SOURCE-ENTITY_TO_IMPORT.לדוגמה, במסד נתונים של Oracle, יוצרים סוג היבט בשם
oracle-database.אפשר גם ליצור סוגי מאפיינים נוספים כדי לאחסן מידע אחר.
-
יוצרים סוגי רשומות מותאמים אישית למשאבים שרוצים לייבא, ומקצים להם את סוגי ההיבטים הרלוונטיים. משתמשים במוסכמה למתן שמות
SOURCE-ENTITY_TO_IMPORT.לדוגמה, במסד נתונים של Oracle, יוצרים סוג רשומה בשם
oracle-database. מקשרים אותו לסוג ההיבט שנקראoracle-database.
- מוודאים שאפשר לגשת למקור של הצד השלישי מ Google Cloud הפרויקט. מידע נוסף זמין במאמר בנושא הגדרת רשת ל-Serverless for Apache Spark.
- רשומה מסוג
instance, עם סוג רשומהprojects/PROJECT_ID/locations/LOCATION/entryTypes/oracle-instance. הרשומה הזו מייצגת מערכת Oracle Database XE. - רשומה של
databaseשמייצגת מסד נתונים בתוך מערכת Oracle Database XE. משכפלים את מאגר
cloud-dataplex.מגדירים סביבה מקומית. מומלץ להשתמש בסביבה וירטואלית.
mkdir venv python -m venv venv/ source venv/bin/activateמשתמשים בגרסאות active או maintenance של Python. יש תמיכה ב-Python גרסה 3.7 ואילך.
יוצרים פרויקט Python.
דרישות להתקנה:
pip install -r requirements.txtהדרישות הבאות מותקנות:
מוסיפים קובץ של צינור עיבוד נתונים
main.pyבתיקיית הבסיס של הפרויקט.כשפורסים את הקוד ב-Serverless for Apache Spark, הקובץ
main.pyמשמש כנקודת הכניסה להרצה. מומלץ לצמצם את כמות המידע שמאוחסן בקובץmain.py. אפשר להשתמש בקובץ הזה כדי להפעיל פונקציות ומחלקות שמוגדרות במחבר, כמו המחלקהsrc/bootstap.py.יוצרים תיקייה
srcכדי לאחסן את רוב הלוגיקה של המחבר.מעדכנים את הקובץ
src/cmd_reader.pyבאמצעות מחלקה של Python כדי לקבל ארגומנטים של שורת פקודה. אפשר להשתמש במודול argeparse כדי לעשות את זה.בסביבות ייצור, מומלץ לאחסן את הסיסמה בSecret Manager.
מעדכנים את הקובץ
src/constants.pyעם קוד ליצירת קבועים.מעדכנים את הקובץ
src/name_builder.pyבשיטות ליצירת משאבי המטא-נתונים שרוצים שמחבר יצור עבור משאבי Oracle. משתמשים במוסכמות שמתוארות בקטע משאבי מטא-נתונים לדוגמה למקור Oracle במסמך הזה.קובץ
name_builder.pyמשמש גם לקוד הליבה של Python וגם לקוד הליבה של PySpark, ולכן מומלץ לכתוב את השיטות כפונקציות טהורות, ולא כחברים במחלקה.מעדכנים את הקובץ
src/top_entry_builder.pyעם קוד כדי למלא את הרשומות ברמה העליונה בנתונים.מעדכנים את הקובץ
src/bootstrap.pyעם קוד כדי ליצור את קובץ ייבוא המטא-נתונים ומריצים את המחבר.מריצים את הקוד באופן מקומי.
מוחזר קובץ ייבוא של מטא-נתונים בשם
output.jsonl. בקובץ יש שתי שורות, כל אחת מייצגת פריט לייבוא. צינור הקישוריות המנוהל קורא את הקובץ הזה כשמריצים את משימת ייבוא המטא-נתונים.אופציונלי: אפשר להרחיב את הדוגמה הקודמת כדי להשתמש במחלקות של ספריית הלקוח של Dataplex Universal Catalog כדי ליצור פריטי ייבוא לטבלאות, לסכימות ולתצוגות. אפשר גם להריץ את דוגמת ה-Python ב-Serverless for Apache Spark.
מומלץ ליצור מחבר שמשתמש ב-Spark (ומופעל ב-Serverless for Apache Spark), כי הוא יכול לשפר את הביצועים של המחבר.
משכפלים את מאגר
cloud-dataplex.מתקינים את PySpark:
pip install pysparkדרישות להתקנה:
pip install -r requirements.txtהדרישות הבאות מותקנות:
מעדכנים את הקובץ
oracle_connector.pyעם קוד לקריאת נתונים ממקור נתונים של Oracle ולהחזרת DataFrames.מוסיפים שאילתות SQL כדי להחזיר את המטא-נתונים שרוצים לייבא. השאילתות צריכות להחזיר את הפרטים הבאים:
- סכימות של מסדי נתונים
- טבלאות ששייכות לסכימות האלה
- עמודות ששייכות לטבלאות האלה, כולל שם העמודה, סוג הנתונים בעמודה והאם העמודה יכולה להכיל ערך null או שהיא נדרשת
כל העמודות של כל הטבלאות והתצוגות מאוחסנות באותה טבלת מערכת. אפשר לבחור עמודות באמצעות השיטה
_get_columns. בהתאם לפרמטרים שאתם מספקים, אתם יכולים לבחור עמודות לטבלאות או לתצוגות בנפרד.שימו לב לנקודות הבאות:
- ב-Oracle, סכימת מסד נתונים נמצאת בבעלות של משתמש מסד נתונים, והשם שלה זהה לשם של המשתמש.
- אובייקטים של סכימה הם מבנים לוגיים שנוצרים על ידי משתמשים. אובייקטים כמו טבלאות או אינדקסים יכולים להכיל נתונים, ואובייקטים כמו תצוגות או מילים נרדפות מכילים רק הגדרה.
- הקובץ
ojdbc11.jarמכיל את Oracle JDBC driver.
מעדכנים את הקובץ
src/entry_builder.pyבשיטות משותפות להחלת טרנספורמציות של Spark.שימו לב לנקודות הבאות:
- השיטות יוצרות את משאבי המטא-נתונים שהמחבר יוצר עבור משאבי Oracle. משתמשים במוסכמות שמתוארות בקטע משאבי מטא-נתונים לדוגמה למקור Oracle במסמך הזה.
- השיטה
convert_to_import_itemsחלה על סכימות, טבלאות ותצוגות. צריך לוודא שהפלט של המחבר הוא פריט ייבוא אחד או יותר שאפשר לעבד באמצעות השיטהmetadataJobs.create, ולא רשומות נפרדות. - גם בתצוגה, העמודה נקראת
TABLE_NAME.
מעדכנים את הקובץ
bootstrap.pyעם קוד כדי ליצור את קובץ ייבוא המטא-נתונים ומריצים את המחבר.בדוגמה הזו, קובץ ייבוא המטא-נתונים נשמר כקובץ JSON Lines יחיד. אפשר להשתמש בכלים של PySpark כמו המחלקה
DataFrameWriterכדי להפיק קבוצות של JSON במקביל.המחבר יכול לכתוב רשומות לקובץ ייבוא המטא-נתונים בכל סדר.
מעדכנים את הקובץ
gcs_uploader.pyעם קוד להעלאת קובץ ייבוא המטא-נתונים לקטגוריה של Cloud Storage.יוצרים את תמונת המחבר.
אם המחבר מכיל כמה קבצים, או אם רוצים להשתמש בספריות שלא נכללות ב קובץ אימג' של Docker שמוגדר כברירת מחדל, צריך להשתמש בקונטיינר בהתאמה אישית. Serverless ל-Apache Spark מריץ עומסי עבודה (workloads) בתוך קונטיינרים של Docker. יוצרים קובץ אימג' מותאם אישית של Docker למחבר ומאחסנים את קובץ האימג' ב-Artifact Registry. Serverless for Apache Spark קורא את התמונה מ-Artifact Registry.
יוצרים Dockerfile:
משתמשים ב-Conda כמנהל החבילות. Serverless for Apache Spark מבצעת mount של
pysparkבקונטיינר בזמן הריצה, כך שלא צריך להתקין תלות ב-PySpark בקובץ האימג' של הקונטיינר המותאם אישית.יוצרים את קובץ האימג' של הקונטיינר בהתאמה אישית ומעבירים אותו בדחיפה ל-Artifact Registry.
לתמונה אחת יכולים להיות כמה שמות, ולכן אפשר להשתמש בתג Docker כדי להקצות לתמונה כינוי.
מריצים את המחבר ב-Serverless for Apache Spark. כדי לשלוח משימה באצווה של PySpark באמצעות קובץ האימג' של הקונטיינר בהתאמה אישית, מריצים את הפקודה
gcloud dataproc batches submit pyspark.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_ARGUMENTSשימו לב לנקודות הבאות:
- קובצי ה-JAR הם דרייברים ל-Spark. כדי לקרוא מ-Oracle, מ-MySQL או מ-Postgres, צריך לספק ל-Apache Spark חבילה ספציפית. החבילה יכולה להיות ממוקמת ב-Cloud Storage או בתוך הקונטיינר. אם קובץ ה-JAR נמצא בתוך המאגר, הנתיב דומה ל-
file:///path/to/file/driver.jar. בדוגמה הזו, הנתיב לקובץ ה-JAR הוא/opt/spark/jars/. - PIPELINE_ARGUMENTS הם הארגומנטים בשורת הפקודה של המחבר.
המחבר מחלץ מטא-נתונים ממסד הנתונים של Oracle, יוצר קובץ לייבוא מטא-נתונים ושומר את הקובץ הזה בקטגוריה של Cloud Storage.
- קובצי ה-JAR הם דרייברים ל-Spark. כדי לקרוא מ-Oracle, מ-MySQL או מ-Postgres, צריך לספק ל-Apache Spark חבילה ספציפית. החבילה יכולה להיות ממוקמת ב-Cloud Storage או בתוך הקונטיינר. אם קובץ ה-JAR נמצא בתוך המאגר, הנתיב דומה ל-
כדי לייבא ידנית את המטא-נתונים בקובץ ייבוא המטא-נתונים אל Dataplex Universal Catalog, מריצים משימת מטא-נתונים. משתמשים בשיטה
metadataJobs.create.בשורת הפקודה, מוסיפים משתני סביבה ויוצרים כינוי לפקודת curl.
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"'קוראים ל-method של ה-API ומעבירים את סוגי הרשומות ואת סוגי ההיבטים שרוצים לייבא.
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 )"המאפיין
schemaהוא מאפיין גלובלי שמוגדר על ידי Dataplex Universal Catalog.שימו לב: הפורמט שבו משתמשים בשמות של סוגי היבטים כשקוראים לשיטת ה-API שונה מהפורמט שבו משתמשים בקוד של מחבר.
אופציונלי: אפשר להשתמש ב-Cloud Logging כדי לראות את היומנים של משימת המטא-נתונים. מידע נוסף זמין במאמר בנושא מעקב אחרי יומנים של Dataplex Universal Catalog.
כדי להריץ צינור קישוריות מנוהל באמצעות מחבר לדוגמה, פועלים לפי השלבים לייבוא מטא-נתונים באמצעות Workflows. צריך לבצע את הפעולות הבאות:
- יוצרים את תהליך העבודה באותו Google Cloud מיקום שבו נמצא המחבר.
בקובץ ההגדרה של תהליך העבודה, מעדכנים את הפונקציה
submit_pyspark_extract_jobבאמצעות הקוד הבא כדי לחלץ נתונים ממסד הנתונים של Oracle באמצעות המחבר שיצרתם.- 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.ORACE_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_MESSAGEבקובץ הגדרת תהליך העבודה, מעדכנים את הפונקציה
submit_import_jobעם הקוד הבא כדי לייבא את הרשומות. הפונקציה מפעילה את שיטתmetadataJobs.createAPI כדי להריץ עבודת ייבוא של מטא-נתונים.- 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_RESPONSEצריך לספק את אותם סוגי רשומות וסוגי היבטים שכללתם כשקראתם לשיטת ה-API באופן ידני. שימו לב שאין פסיק בסוף כל מחרוזת.
כשמריצים את תהליך העבודה, מספקים את הארגומנטים הבאים של זמן הריצה:
{ "CLOUD_REGION": "us-central1", "ORACLE_USER": "system", "ORACLE_HOST_PORT": "x.x.x.x:1521", "ORACLE_DATABASE": "xe", "ADDITIONAL_CONNECTOR_ARGS": [], }
אופציונלי: אפשר להשתמש ב-Cloud Logging כדי להציג יומנים של צינור הנתונים של הקישוריות המנוהלת. המטען הייעודי (Payload) של היומן כולל קישור ליומנים של משימת אצווה של Serverless for Apache Spark ומשימת ייבוא המטא-נתונים, בהתאם. מידע נוסף זמין במאמר בנושא הצגת יומני זרימת עבודה.
אופציונלי: כדי לשפר את האבטחה, הביצועים והפונקציונליות של צינור הקישוריות המנוהל, כדאי לבצע את הפעולות הבאות:
- משתמשים ב-Secret Manager כדי לאחסן את פרטי הכניסה למקור הנתונים של צד שלישי.
- משתמשים ב-PySpark כדי לכתוב את הפלט של JSON Lines לכמה קבצים של ייבוא מטא-נתונים במקביל.
- כדי לפצל קבצים גדולים (מעל 100 MB) לקבצים קטנים יותר, צריך להשתמש בקידומת.
- מוסיפים עוד היבטים מותאמים אישית שכוללים מטא-נתונים עסקיים וטכניים נוספים מהמקור.
-
שמות שמוגדרים במלואם: שמות שמוגדרים במלואם למשאבי Oracle משתמשים בתבנית השמות הבאה. תווים אסורים מסומנים בתו בריחה (escape) של גרש הפוך.
משאב תבנית דוגמה Instance SOURCE:ADDRESSמשתמשים במארח ובמספר היציאה או בשם הדומיין של המערכת.
oracle:`localhost:1521`אוoracle:`myinstance.com`מסד נתונים SOURCE:ADDRESS.DATABASEoracle:`localhost:1521`.xeסכימה SOURCE:ADDRESS.DATABASE.SCHEMAoracle:`localhost:1521`.xe.sysטבלה SOURCE:ADDRESS.DATABASE.SCHEMA.TABLE_NAMEoracle:`localhost:1521`.xe.sys.ordersהצגה SOURCE:ADDRESS.DATABASE.SCHEMA.VIEW_NAMEoracle:`localhost:1521`.xe.sys.orders_view -
שמות של רשומות או מזהים של רשומות: רשומות של משאבי Oracle משתמשים בתבנית השמות הבאה. תווים אסורים מוחלפים בתו מותר. המשאבים משתמשים בקידומת
projects/PROJECT/locations/LOCATION/entryGroups/ENTRY_GROUP/entries.משאב תבנית דוגמה Instance HOST_PORT/PREFIXprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521מסד נתונים PREFIX/HOST_PORT/databases/DATABASEprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xeסכימה 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/sysטבלה 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/ordersהצגה 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 -
רשומות הורה: אם רשומה מסוימת היא לא רשומת הבסיס של המערכת, יכול להיות שיהיה לה שדה של רשומת הורה שמתאר את המיקום שלה בהיררכיה. השדה צריך להכיל את השם של רשומת ההורה. מומלץ ליצור את הערך הזה.
בטבלה הבאה מפורטים רשומות ההורה של משאבי Oracle.
הערך רשומה של הורה Instance ""(מחרוזת ריקה)מסד נתונים שם המכונה סכימה שם מסד הנתונים טבלה שם הסכימה הצגה שם הסכימה מפת היבטים: מפת ההיבטים צריכה להכיל לפחות היבט אחד שמתאר את הישות לייבוא. הנה דוגמה למפת היבטים של טבלת Oracle.
"example-project.us-central1.oracle-table": { "aspect_type": "example-project.us-central1.oracle-table", "path": "", "data": {} },
אפשר למצוא סוגי היבטים מוגדרים מראש (כמו
schema) שמגדירים את המבנה של הטבלה או התצוגה בפרויקטdataplex-types, במיקוםglobal.-
מפתחות מאפיינים: מפתחות מאפיינים משתמשים בפורמט השמות PROJECT.LOCATION.ASPECT_TYPE. בטבלה הבאה מוצגות דוגמאות למפתחות מאפיינים של משאבי Oracle.
הערך דוגמה למקש יחס גובה-רוחב Instance example-project.us-central1.oracle-instanceמסד נתונים example-project.us-central1.oracle-databaseסכימה example-project.us-central1.oracle-schemaטבלה example-project.us-central1.oracle-tableהצגה example-project.us-central1.oracle-view
יצירת מחבר Python בסיסי
מחבר Python בסיסי לדוגמה יוצר רשומות ברמה העליונה למקור נתונים של Oracle באמצעות מחלקות של ספריית הלקוח Dataplex Universal Catalog. לאחר מכן מציינים את הערכים בשדות של הרשומה.
המחבר יוצר קובץ ייבוא של מטא-נתונים עם הרשומות הבאות:
כדי ליצור מחבר Python בסיסי:
יצירת מחבר PySpark
הדוגמה הזו מבוססת על PySpark DataFrame API. אפשר להתקין את PySpark SQL ולהריץ אותו באופן מקומי לפני שמריצים אותו ב-Serverless for Apache Spark. אם מתקינים ומריצים את PySpark באופן מקומי, צריך להתקין את ספריית PySpark באמצעות pip, אבל לא צריך להתקין אשכול Spark מקומי.
מסיבות שקשורות לביצועים, בדוגמה הזו לא נעשה שימוש במחלקות מוגדרות מראש מהספרייה של PySpark. במקום זאת, בדוגמה נוצרים אובייקטים מסוג DataFrame, הם מומרים לרשומות JSON, והפלט נכתב לקובץ ייבוא של מטא-נתונים בפורמט JSON Lines שאפשר לייבא ל-Dataplex Universal Catalog.
כדי ליצור מחבר באמצעות PySpark:
הגדרת תזמור של צינורות עיבוד נתונים
בקטעים הקודמים הראינו איך ליצור מחבר לדוגמה ולהריץ אותו באופן ידני.
בסביבת ייצור, מפעילים את המחבר כחלק מצינור קישוריות מנוהל, באמצעות פלטפורמת תזמור כמו Workflows.
דוגמאות למשאבי מטא-נתונים למקור Oracle
מחבר לדוגמה מחלץ מטא-נתונים ממסד נתונים של Oracle וממפה את המטא-נתונים למשאבי מטא-נתונים תואמים ב-Dataplex Universal Catalog.
שיקולים לגבי ההיררכיה
לכל מערכת ב-Dataplex Universal Catalog יש רשומת בסיס שהיא רשומת ההורה של המערכת. בדרך כלל, רשומת הבסיס היא מסוג instance.
בטבלה הבאה מוצגת היררכיה לדוגמה של סוגי רשומות וסוגי היבטים במערכת Oracle. לדוגמה, סוג הרשומה oracle-database מקושר לסוג מאפיין שנקרא גם oracle-database.
| מזהה סוג רשומה | תיאור | מזהה סוג ההיבט המקושר |
|---|---|---|
oracle-instance |
הבסיס של המערכת המיובאת. | oracle-instance |
oracle-database |
מסד הנתונים של Oracle. | oracle-database |
oracle-schema |
סכימת מסד הנתונים. | oracle-schema |
oracle-table |
טבלה. |
|
oracle-view |
תצוגה. |
|
המאפיין schema הוא מאפיין גלובלי שמוגדר על ידי Dataplex Universal Catalog. הוא מכיל תיאור של השדות בטבלה, בתצוגה או בישות אחרת שיש לה עמודות. המאפיין oracle-schema custom aspect type מכיל את השם של סכמת מסד הנתונים של Oracle.
דוגמה לייבוא של שדות פריטים
המחבר צריך להשתמש במוסכמות הבאות למשאבי Oracle.