מחברים בהתאמה אישית מאפשרים לחלץ מטא-נתונים ממקורות נתונים של צד שלישי, כמו MySQL, SQL Server ו-Oracle. אחר כך אתם יכולים לייבא את המטא-נתונים האלה ל-Knowledge Catalog (לשעבר Dataplex Universal Catalog) באמצעות צינור עיבוד נתונים מנוהל לקישוריות. פיתוח מחבר בהתאמה אישית עוזר לכם לקטלג, לחפש ולנהל נכסים ממקורות נתונים שאין להם מחבר מובנה.
אתם יכולים להשתמש בתבנית העזר של PySpark ובמחבר לדוגמה של Python ל-Oracle Database Express Edition (XE) שבדף הזה כנקודת התחלה ליצירת מחבר משלכם.
איך המחברים פועלים
המחבר מחלץ מטא-נתונים ממקור נתונים של צד שלישי, ממיר את המטא-נתונים לפורמט של Knowledge Catalog ImportItem ויוצר קובצי ייבוא של מטא-נתונים שאפשר לייבא באמצעות Knowledge Catalog.
המחבר הוא חלק מצינור עיבוד נתונים מנוהל של קישוריות. צינור עיבוד נתונים מנוהל של קישוריות הוא תהליך עבודה מתוזמר שמשמש לייבוא מטא-נתונים של Knowledge Catalog. צינור עיבוד הנתונים של הקישוריות המנוהלת מפעיל את המחבר ומבצע משימות אחרות בתהליך הייבוא, כמו הפעלת משימה לייבוא מטא-נתונים ותיעוד ביומנים.
צינור עיבוד הנתונים של הקישוריות המנוהלת מריץ את המחבר באמצעות משימה באצווה של Managed Service for Apache Spark. Managed Service for Apache Spark מספק סביבת הרצה של Spark ללא שרת (serverless). אפשר ליצור מחבר שלא משתמש ב-Spark, אבל מומלץ להשתמש ב-Spark כי הוא יכול לשפר את הביצועים של המחבר. אתם יכולים לפתח מחברים באמצעות Python, Java, Scala או R.
דרישות לגבי מחברים
הדרישות של המחבר:
- המחבר חייב להיות קובץ אימג' של Artifact Registry שאפשר להריץ ב-Managed Service for Apache Spark.
- המחבר צריך ליצור קובצי מטא-נתונים בפורמט שאפשר לייבא באמצעות משימת ייבוא מטא-נתונים של Knowledge Catalog (ה-method של
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. אפשר לשנות את תבניות הצינורות (pipeline) לתרחישים אחרים, כמו מחבר 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 ל-Oracle Database Express Edition (XE), והיא מבוססת על ההנחה שאתם מכירים את Python ואת PySpark.
בודקים את הפרטים הבאים:
מבצעים את הפעולות הבאות: יוצרים את כל המשאבים באותו מיקום ב- Google Cloud.
-
יוצרים או בוחרים פרויקט ב- Google Cloud .
התפקידים שנדרשים כדי לבחור או ליצור פרויקט
- בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים?
-
יוצרים פרויקט ב- Google Cloud :
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של הפרויקט ב- Google Cloud שאתם יוצרים. -
בוחרים את הפרויקט שיצרתם ב- Google Cloud :
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Dataplex, Dataproc, Workflows ו-Artifact Registry, אם הם עדיין לא מופעלים:
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable dataplex.googleapis.com
dataproc.googleapis.com workflows.googleapis.com artifactregistry.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
נותנים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
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
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: התפקיד ב-IAM שאתם נותנים לחשבון המשתמש.
-
-
מגדירים את האימות:
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
roles/iam.serviceAccountCreator) ואת התפקיד "אדמין של פרויקט" (roles/resourcemanager.projectIamAdmin) ב-IAM. איך מקצים תפקידים -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
מקצים לחשבון השירות את התפקיד
roles/ownerב-IAM:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
-
יוצרים קטגוריה של Cloud Storage כדי לאחסן את קובצי הייבוא של המטא-נתונים.
-
יוצרים את משאבי המטא-נתונים הבאים באותו פרויקט.
בקטע דוגמאות למשאבי מטא-נתונים של מקור Oracle במסמך הזה מפורטות דוגמאות לערכים.
- יוצרים קבוצת רשומות.
-
יוצרים סוגי היבטים בהתאמה אישית לרשומות שרוצים לייבא. משתמשים במוסכמה למתן שמות
SOURCE-ENTITY_TO_IMPORT.לדוגמה, למסד נתונים של Oracle, יוצרים סוג היבט בשם
oracle-database.אפשר גם ליצור סוגי היבטים נוספים כדי לאחסן מידע אחר.
-
יוצרים סוגי רשומות בהתאמה אישית למשאבים שרוצים לייבא, ומקצים להם את סוגי ההיבטים הרלוונטיים. משתמשים במוסכמה למתן שמות
SOURCE-ENTITY_TO_IMPORT.לדוגמה, למסד נתונים של Oracle, יוצרים סוג רשומה בשם
oracle-database. מקשרים אותו לסוג ההיבט שנקראoracle-database.
- מוודאים שאפשר לגשת למקור של הצד השלישי מהפרויקט ב- Google Cloud . מידע נוסף מופיע במאמר הגדרת הרשת של Managed Service for Apache Spark.
יצירת מחבר בסיסי ב-Python
המחבר הבסיסי לדוגמה ב-Python יוצר רשומות ברמה העליונה למקור נתונים של Oracle באמצעות המחלקות של ספריית הלקוח של Knowledge Catalog. לאחר מכן, אתם מספקים את הערכים לשדות הקלט.
המחבר יוצר קובץ ייבוא של מטא-נתונים עם הרשומות הבאות:
- רשומה מסוג
instance, עם סוג הרשומהprojects/PROJECT_ID/locations/LOCATION/entryTypes/oracle-instance. הרשומה הזו מייצגת מערכת Oracle Database XE. - רשומה של
database, שמייצגת מסד נתונים במערכת Oracle Database XE.
כדי ליצור מחבר בסיסי ב-Python:
משכפלים את המאגר
cloud-dataplex.מגדירים סביבה מקומית. מומלץ להשתמש בסביבה וירטואלית.
mkdir venv python -m venv venv/ source venv/bin/activateמשתמשים בגרסאות הפעילות או התחזוקה של Python. יש תמיכה בגרסאות Python 3.7 ואילך.
יוצרים פרויקט ב-Python.
דרישות ההתקנה:
pip install -r requirements.txtהדרישות הבאות מותקנות:
מוסיפים קובץ צינור עיבוד נתונים של
main.pyבתיקיית הבסיס של הפרויקט.כשפורסים את הקוד ב-Managed Service for Apache Spark, הקובץ
main.pyמשמש כנקודת הכניסה להפעלה. מומלץ לצמצם את כמות המידע שמאוחסן בקובץmain.py. השתמשו בקובץ הזה כדי לקרוא לפונקציות ולמחלקות שמוגדרות בתוך המחבר, כמו המחלקהsrc/bootstrap.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. הקובץ מכיל שתי שורות, וכל אחת מהן מייצגת פריט לייבוא. צינור עיבוד הנתונים של הקישוריות המנוהלת קורא את הקובץ הזה בזמן הרצת משימת הייבוא של המטא-נתונים.אופציונלי: הרחבת הדוגמה הקודמת כדי להשתמש במחלקות של ספריית הלקוח של Knowledge Catalog ליצירת פריטי ייבוא לטבלאות, לסכימות ולתצוגות. אתם יכולים גם להריץ את הדוגמה ב-Python ב-Managed Service for Apache Spark.
אנחנו ממליצים ליצור מחבר שמשתמש ב-Spark (ופועל ב-Managed Service for Apache Spark), כי הוא יכול לשפר את הביצועים של המחבר.
יצירת מחבר PySpark
הדוגמה הזו מבוססת על PySpark DataFrame API. אתם יכולים להתקין את PySpark SQL ולהריץ אותו באופן מקומי לפני שתריצו אותו ב-Managed Service for Apache Spark. אם אתם מתקינים ומריצים את PySpark באופן מקומי, אתם צריכים להתקין את ספריית PySpark באמצעות pip, אבל לא צריך להתקין אשכול Spark מקומי.
מסיבות שקשורות לביצועים, בדוגמה הזו לא נעשה שימוש במחלקות מוגדרות מראש מספריית PySpark. במקום זאת, בדוגמה נוצרים DataFrames, הם מומרים לרשומות JSON, ואז הפלט נכתב לקובץ ייבוא של מטא-נתונים בפורמט JSON Lines שאפשר לייבא ל-Knowledge Catalog.
כדי ליצור מחבר באמצעות PySpark:
משכפלים את המאגר
cloud-dataplex.מתקינים את PySpark:
pip install pysparkדרישות ההתקנה:
pip install -r requirements.txtהדרישות הבאות מותקנות:
מעדכנים את הקובץ
oracle_connector.pyבאמצעות קוד כדי לקרוא נתונים ממקור נתונים של Oracle ולהחזיר DataFrames.מוסיפים שאילתות SQL כדי להחזיר את המטא-נתונים שרוצים לייבא. השאילתות צריכות להחזיר את המידע הבא:
- סכימות של מסדי נתונים
- טבלאות ששייכות לסכימות האלה
- העמודות ששייכות לטבלאות האלה, כולל שם העמודה, סוג הנתונים בעמודה, והאם העמודה יכולה להיות ריקה או שהיא נדרשת
כל העמודות של כל הטבלאות והתצוגות מאוחסנות באותה טבלת מערכת. אפשר לבחור עמודות באמצעות השיטה
_get_columns. בהתאם לפרמטרים שאתם מספקים, אתם יכולים לבחור עמודות לטבלאות או לתצוגות בנפרד.שימו לב לנקודות הבאות:
- ב-Oracle, סכימה של מסד נתונים נמצאת בבעלות של משתמש במסד הנתונים, והשם שלה זהה לשם של המשתמש.
- אובייקטים של סכימה הם מבנים לוגיים שנוצרים על ידי משתמשים. אובייקטים כמו טבלאות או אינדקסים יכולים להכיל נתונים, ואובייקטים כמו תצוגות או מילים נרדפות מכילים רק הגדרה.
- הקובץ
ojdbc11.jarמכיל את מנהל ההתקן של Oracle JDBC.
מעדכנים את הקובץ
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 שמוגדר כברירת מחדל, אתם צריכים להשתמש במאגר בהתאמה אישית. ב-Managed Service for Apache Spark, עומסי העבודה פועלים בתוך קונטיינרים של Docker. יוצרים קובץ אימג' של Docker בהתאמה אישית של המחבר ומאחסנים את קובץ האימג' ב-Artifact Registry. Managed Service for Apache Spark קורא את קובץ האימג' מ-Artifact Registry.
יוצרים קובץ Docker:
משתמשים ב-Conda ככלי לניהול חבילות. Managed Service for Apache Spark טוען את
pysparkלקונטיינר בזמן הריצה, כך שאין צורך להתקין יחסי תלות של PySpark בקובץ האימג' של הקונטיינר בהתאמה אישית.יוצרים את קובץ האימג' של הקונטיינר בהתאמה אישית ומעבירים אותו בדחיפה ל-Artifact Registry.
לתמונה אחת יכולים להיות כמה שמות, לכן אפשר להשתמש בתג Docker כדי להקצות כינוי לתמונה.
מריצים את המחבר ב-Managed Service 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 נמצא בתוך הקונטיינר, הנתיב דומה ל-
כדי לייבא באופן ידני את המטא-נתונים מקובץ הייבוא אל Knowledge 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הוא סוג היבט גלובלי שמוגדר על ידי Knowledge Catalog.שימו לב שהפורמט שבו משתמשים לשמות של סוגי ההיבטים כשקוראים ל-method של ה-API שונה מהפורמט שבו משתמשים בקוד של המחבר.
אופציונלי: אפשר להשתמש ב-Cloud Logging כדי לצפות ביומנים של משימת המטא-נתונים. מידע נוסף זמין במאמר מעקב אחרי יומני Knowledge Catalog.
הגדרת תזמור של צינור עיבוד נתונים
בקטעים הקודמים הראינו איך ליצור מחבר לדוגמה ולהפעיל אותו באופן ידני.
בסביבת ייצור, מריצים את המחבר כחלק מצינור עיבוד נתונים מנוהל של קישוריות, באמצעות פלטפורמת תזמור כמו Workflows.
כדי להריץ צינור עיבוד נתונים מנוהל של קישוריות באמצעות המחבר לדוגמה, פועלים לפי השלבים לייבוא מטא-נתונים באמצעות 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.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_MESSAGEבקובץ ההגדרה של תהליך העבודה, מעדכנים את הפונקציה
submit_import_jobבאמצעות הקוד הבא כדי לייבא את הרשומות. הפונקציה מפעילה את ה-methodmetadataJobs.createשל ה-API כדי להריץ משימת ייבוא של מטא-נתונים.- 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) של היומן כולל קישור ליומנים של המשימה באצווה של Managed Service for Apache Spark ושל המשימה לייבוא המטא-נתונים, לפי הצורך. מידע נוסף זמין במאמר הצגת יומני תהליכי עבודה.
אופציונלי: כדי לשפר את האבטחה, הביצועים והפונקציונליות של צינור עיבוד הנתונים המנוהל של הקישוריות, כדאי לבצע את הפעולות הבאות:
- משתמשים ב-Secret Manager כדי לאחסן את פרטי הכניסה למקור הנתונים של הצד השלישי.
- משתמשים ב-PySpark כדי לכתוב את פלט ה-JSON Lines לכמה קובצי ייבוא של מטא-נתונים במקביל.
- אפשר להשתמש בקידומת כדי לפצל קבצים גדולים (יותר מ-100MB) לקבצים קטנים יותר.
- להוסיף עוד היבטים בהתאמה אישית שמתעדים מטא-נתונים עסקיים וטכניים נוספים מהמקור.
דוגמאות למשאבי מטא-נתונים של מקור Oracle
המחבר לדוגמה מחלץ מטא-נתונים ממסד נתונים של Oracle וממפה את המטא-נתונים למשאבי מטא-נתונים תואמים של Knowledge Catalog.
שיקולים שקשורים להיררכיה
לכל מערכת ב-Knowledge 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 הוא סוג היבט גלובלי שמוגדר על ידי Knowledge Catalog. הוא מכיל תיאור של השדות בטבלה, בתצוגה או בישות אחרת שיש בה עמודות. סוג ההיבט המותאם אישית oracle-schema מכיל את השם של הסכימה של מסד הנתונים של Oracle.
דוגמה לשדות של פריטים לייבוא
המחבר צריך להשתמש במוסכמות הבאות למשאבי Oracle.
-
שמות שמוגדרים במלואם: שמות שמוגדרים במלואם למשאבים של 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 ""(מחרוזת ריקה)מסד נתונים שם המכונה סכימה שם מסד הנתונים טבלה שם הסכימה הצגה שם הסכימה Aspect map: מפת ההיבטים חייבת להכיל לפחות היבט אחד שמתאר את הישות שרוצים לייבא. הנה דוגמה למפת היבטים של טבלת Oracle.
"example-project.us-central1.oracle-table": { "aspect_type": "example-project.us-central1.oracle-table", "path": "", "data": {} },
אפשר למצוא סוגי היבטים מוגדרים מראש (כמו
schema) שמגדירים את מבנה הטבלה או התצוגה בפרויקטdataplex-types, במיקוםglobal.-
Aspect keys: מפתחות ההיבטים משתמשים בפורמט השמות 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