טעינת נתונים מ-Oracle ל-BigQuery

כדי לתזמן העברות נתונים חוזרות ממסד הנתונים של Oracle ל-BigQuery, צריך ליצור הגדרת העברה כדי לציין אילו אובייקטים של נתונים להעביר, ובאיזו תדירות לתזמן את העברת הנתונים. אחרי שמגדירים את ההעברה, שירות העברת הנתונים ל-BigQuery מעביר את הנתונים העדכניים לטבלה ב-BigQuery לפי לוח הזמנים שצוין.

במאמר מבוא להעברות נתונים מ-Oracle מוסבר איך פועלת העברה מ-Oracle.

מגבלות

העברות של Oracle כפופות למגבלות הבאות:

  • המספר המקסימלי של חיבורים בו-זמניים למסד נתונים של Oracle מוגבל, ולכן גם מספר ההפעלות של העברות בו-זמניות למסד נתונים יחיד של Oracle מוגבל לאותו מספר מקסימלי.
  • אם אין כתובת IP ציבורית זמינה לחיבור למסד נתונים של Oracle, אתם צריכים להגדיר חיבור לרשת בהתאם לדרישות הבאות:
    • צריכה להיות גישה למקור הנתונים מרשת המשנה שבה נמצא מחבר הרשת.
    • מחבר הרשת לא יכול להיות ברשת המשנה בטווח 240.0.0.0/24.
    • אי אפשר למחוק חיבורי רשת אם יש חיבורים פעילים לחיבור. כדי למחוק חיבור לרשת, פנו ל-Cloud Customer Care.
    • במספר האזורים us, חיבור הרשת צריך להיות באזור us-central1. במספר האזורים eu, חיבור הרשת צריך להיות באזור europe-west4.
  • אם חיבור הרשת נוצר בפרויקט ב- Google Cloud ששונה מהפרויקט ב- Google Cloud שבו נוצרה העברת הנתונים, צריך לתת את ההרשאות compute.networkAttachments.get ו-compute.networkAttachments.update לסוכן השירות ששייך לפרויקט ב- Google Cloud שבו נוצרה העברת הנתונים.
  • מרווח הזמן המינימלי בין העברות חוזרות של Oracle הוא 15 דקות. מרווח הזמן שמוגדר כברירת מחדל להעברה חוזרת הוא 24 שעות.
  • הגדרת העברה אחת יכולה לתמוך רק בהרצה אחת של העברת נתונים בזמן נתון. אם העברת נתונים שנייה מתוזמנת לפעול לפני שההעברה הראשונה מסתיימת, רק העברת הנתונים הראשונה תושלם, וכל העברת נתונים אחרת שחופפת להעברה הראשונה תבוטל.
    • כדי למנוע דילוג על העברות בהגדרת העברה אחת, מומלץ להגדיל את משך הזמן בין העברות נתונים גדולות על ידי הגדרת תדירות החזרה.
  • במהלך העברת נתונים, המחבר של Oracle מזהה עמודות מפתח שנוספו לאינדקס וחולקו למחיצות כדי להעביר את הנתונים בקבוצות מקבילות. לכן, כדי לשפר את הביצועים ולהפחית את שיעור השגיאות בהעברות הנתונים, מומלץ לציין עמודות של מפתחות ראשיים או להשתמש בעמודות שנוספו לאינדקס בטבלה.
    • אם יש לכם אילוצים של מפתח ראשי או מפתח נוסף, אפשר ליצור קבוצות מקבילות רק בעמודות מהסוגים הבאים:
      • INTEGER
      • TINYINT
      • SMALLINT
      • FLOAT
      • REAL
      • DOUBLE
      • NUMERIC
      • BIGINT
      • DECIMAL
      • DATE
    • בהעברות נתונים מ-Oracle שלא משתמשות במפתח ראשי או בעמודות שנוספו לאינדקס, אי אפשר להעביר יותר מ-2,000,000 רשומות לכל טבלה.
  • אם מחבר הרשת שהגדרתם והמכונה הווירטואלית (VM) נמצאים באזורים שונים, יכול להיות שהנתונים יועברו בין אזורים שונים כשמעבירים נתונים מ-Oracle.

מגבלות על העברות מצטברות

העברות מצטברות מ-Oracle כפופות למגבלות הבאות:

  • אפשר לבחור רק TIMESTAMP עמודות כעמודות של סימני מים.
  • הטמעה מצטברת נתמכת רק בנכסים עם עמודות סימן מים תקינות.
  • הערכים בעמודת סימן המים חייבים להיות בעלייה מונוטונית.
  • העברות מצטברות לא יכולות לסנכרן פעולות מחיקה בטבלת המקור.
  • הגדרת העברה אחת יכולה לתמוך רק בהטמעה מצטברת או בהטמעה מלאה.
  • אי אפשר לעדכן אובייקטים ברשימה asset אחרי ההפעלה הראשונה של הטמעה מצטברת.
  • אי אפשר לשנות את מצב הכתיבה בהגדרות ההעברה אחרי ההפעלה הראשונה של הטמעת הנתונים המצטברים.
  • אי אפשר לשנות את עמודת סימן המים או את המפתח הראשי אחרי ההפעלה הראשונה של הטמעת הנתונים המצטברים.
  • טבלת היעד ב-BigQuery מסודרת באשכולות באמצעות המפתח הראשי שסופק, והיא כפופה למגבלות של טבלאות מסודרות באשכולות.
  • כשמעדכנים הגדרת העברה קיימת למצב הטמעה מצטברת בפעם הראשונה, העברת הנתונים הראשונה אחרי העדכון מעבירה את כל הנתונים הזמינים ממקור הנתונים. בכל העברת נתונים מצטברת שתתבצע לאחר מכן, יועברו רק השורות החדשות והמעודכנות ממקור הנתונים.

במאמר העברות מלאות או מצטברות מוסבר איך פועלות העברות מצטברות.

לפני שמתחילים

בקטעים הבאים מפורטים השלבים שצריך לבצע לפני שיוצרים העברה מ-Oracle.

דרישות מוקדמות של Oracle

כשיוצרים העברה מ-Oracle, צריך גם את הפרטים הבאים של מסד הנתונים של Oracle:

שם הפרמטר תיאור
database השם של מסד הנתונים.
host

שם המארח או כתובת ה-IP של מסד הנתונים.

port

מספר היציאה של מסד הנתונים.

username

שם המשתמש לגישה למסד הנתונים.

password

סיסמה לגישה למסד הנתונים.

דרישות מוקדמות ל-BigQuery

התפקידים הנדרשים ב-BigQuery

כדי לקבל את ההרשאות שדרושות ליצירת העברת נתונים בשירות העברת הנתונים ל-BigQuery, בקשו מהאדמין להקצות לכם את התפקיד אדמין ב-BigQuery (roles/bigquery.admin) ב-IAM בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

זהו תפקיד מוגדר מראש שכולל את ההרשאות שנדרשות ליצירת העברת נתונים בשירות העברת הנתונים ל-BigQuery. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי ליצור העברת נתונים באמצעות שירות העברת הנתונים ל-BigQuery, צריך את ההרשאות הבאות:

  • הרשאות לשירות העברת נתונים ל-BigQuery:
    • bigquery.transfers.update
    • bigquery.transfers.get
  • הרשאות ב-BigQuery:
    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy
    • bigquery.jobs.create

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

מידע נוסף זמין במאמר מתן גישה ל-bigquery.admin.

טעינת נתונים מ-Oracle ל-BigQuery

כדי להוסיף נתוני Oracle ל-BigQuery, צריך להגדיר העברה באמצעות אחת מהאפשרויות הבאות:

המסוף

  1. נכנסים לדף Data transfers במסוף Google Cloud .

    מעבר אל "העברות נתונים"

  2. ‫ Create transfer.

  3. בקטע Source type, בשדה Source בוחרים באפשרות Oracle.

  4. בקטע פרטי מקור הנתונים, מבצעים את הפעולות הבאות:

    • בשדה Network attachment, בוחרים חיבור רשת קיים או לוחצים על Create Network Attachment.
    • בשדה Host, מזינים את שם המארח או את כתובת ה-IP של מסד הנתונים.
    • בשדה Port, מזינים את מספר היציאה שמשמש את מסד הנתונים של Oracle לחיבורים נכנסים, למשל 1521.
    • בשדה Database name, מזינים את השם של מסד הנתונים ב-Oracle.
    • בשדה Connection type, מזינים את סוג כתובת ה-URL של החיבור: SERVICE,‏ SID או TNS.
    • בשדה Username, מזינים את שם המשתמש של המשתמש שיוזם את החיבור למסד הנתונים של Oracle.
    • בשדה Password, מזינים את הסיסמה של המשתמש שמפעיל את החיבור למסד הנתונים של Oracle.
    • בקטע מצב TLS, בוחרים אפשרות מהתפריט הנפתח. מידע נוסף על מצבי TLS זמין במאמר הגדרת TLS.
    • בשדה Trusted PEM Certificate, מזינים את האישור הציבורי של רשות האישורים (CA) שהנפיקה את אישור ה-TLS של שרת מסד הנתונים. מידע נוסף זמין במאמר אישור שרת מהימן (PEM).
    • בקטע סוג ההטמעה, בוחרים באפשרות מלאה או מצטברת.
    • בקטע Oracle objects to transfer, לוחצים על Browse:
      • בוחרים את האובייקטים שרוצים להעביר למערך הנתונים של היעד ב-BigQuery. אפשר גם להזין ידנית בשדה הזה אובייקטים שרוצים לכלול בהעברת הנתונים.
      • אם בחרתם באפשרות Append כמצב הכתיבה המצטברת, אתם צריכים לבחור עמודה שתשמש כעמודת סימן המים.
      • אם בחרתם באפשרות עדכון או הוספה (upsert) כמצב הכתיבה המצטברת, אתם צריכים לבחור עמודה שתשמש כעמודת סימן המים, ואז לבחור עמודה אחת או יותר שתשמש כמפתח הראשי.
  5. בקטע Destination settings, בשדה Dataset בוחרים את מערך הנתונים שיצרתם כדי לאחסן את הנתונים.

  6. בקטע Transfer config name, בשדה השם המוצג, מזינים שם להעברת הנתונים.

  7. בקטע אפשרויות תזמון:

    • ברשימה Repeat frequency, בוחרים אפשרות כדי לציין את תדירות ההפעלה של העברת הנתונים. כדי להגדיר תדירות חזרה מותאמת אישית, לוחצים על בהתאמה אישית. אם בוחרים באפשרות On-demand, ההעברה תתבצע כשמפעילים אותה ידנית.
    • אם רלוונטי, בוחרים באפשרות Start now או באפשרות Start at set time, ומציינים תאריך התחלה וזמן ריצה.
  8. אופציונלי: בקטע Notification options, מבצעים את הפעולות הבאות:

    • כדי להפעיל התראות באימייל, לוחצים על המתג התראות באימייל. כשמפעילים את האפשרות הזו, האדמין של ההעברה מקבל התראה באימייל אם הרצת ההעברה נכשלת.
    • כדי להפעיל התראות על הפעלת העברות ב-Pub/Sub, לוחצים על המתג Pub/Sub notifications. אפשר לבחור את שם הנושא או ללחוץ על Create a topic כדי ליצור נושא.
  9. לוחצים על Save.

BQ

מזינים את הפקודה bq mk ומציינים את הדגל ליצירת העברה --transfer_config:

bq mk
    --transfer_config
    --project_id=PROJECT_ID
    --data_source=DATA_SOURCE
    --display_name=DISPLAY_NAME
    --target_dataset=DATASET
    --params='PARAMETERS'

כאשר:

  • ‫PROJECT_ID (אופציונלי): מזהה הפרויקט ב- Google Cloud . אם לא מציינים פרויקט מסוים באמצעות --project_id, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
  • DATA_SOURCE: מקור הנתונים – oracle.
  • ‫DISPLAY_NAME: השם המוצג של הגדרת ההעברה. שם העברת הנתונים יכול להיות כל ערך שמאפשר לכם לזהות את ההעברה אם תצטרכו לשנות אותה מאוחר יותר.
  • DATASET: מערך הנתונים המטורגט להגדרות ההעברה.
  • ‫PARAMETERS: הפרמטרים של הגדרות ההעברה שנוצרו, בפורמט JSON. לדוגמה: --params='{"param":"param_value"}'. אלה הפרמטרים להעברת נתונים מ-Oracle:

    • ‫connector.networkAttachment (אופציונלי): שם חיבור הרשת שמשמש להתחברות למסד הנתונים של Oracle.
    • ‫connector.authentication.Username: שם המשתמש של חשבון Oracle.
    • ‫connector.authentication.Password: הסיסמה של חשבון Oracle.
    • ‫connector.database: השם של מסד הנתונים ב-Oracle.
    • ‫connector.endpoint.host: שם המארח או כתובת ה-IP של מסד הנתונים.
    • ‫connector.endpoint.port: מספר היציאה שמשמש את מסד הנתונים של Oracle לחיבורים נכנסים, למשל 1520.
    • ‫connector.connectionType: סוג כתובת ה-URL של החיבור, SERVICE,‏ SID או TNS.
    • ‫connector.tls.mode: מציינים הגדרת TLS לשימוש בהעברה הזו:
      • ‫ENCRYPT_VERIFY_CA_AND_HOST כדי להצפין נתונים, ולאמת את רשות האישורים ואת שם המארח
      • ‫ENCRYPT_VERIFY_CA כדי להצפין נתונים, ולאמת את רשות האישורים בלבד
      • ‫ENCRYPT_VERIFY_NONE להצפנת נתונים בלבד
      • DISABLE ללא הצפנה או אימות
    • ‫connector.tls.trustedServerCertificate: (אופציונלי) מספקים אישור אחד או יותר בקידוד PEM. חובה רק אם הערך של connector.tls.mode הוא ENCRYPT_VERIFY_CA_AND_HOST או ENCRYPT_VERIFY_CA.
    • ‫ingestionType: מציינים full או incremental. העברות מצטברות נתמכות בגרסת טרום-השקה (Preview). למידע נוסף, קראו את המאמר העברות מלאות או מצטברות.
    • ‫writeMode: מציינים WRITE_MODE_APPEND או WRITE_MODE_UPSERT.
    • ‫watermarkColumns: ציון עמודות בטבלה כעמודות של סימני מים. השדה הזה נדרש להעברות מצטברות.
    • ‫primaryKeys: מציינים עמודות בטבלה כמפתחות ראשיים. השדה הזה נדרש להעברות מצטברות.
    • ‫assets: הנתיב לאובייקטים של Oracle שיועברו ל-BigQuery, בפורמט: DATABASE_NAME/SCHEMA_NAME/TABLE_NAME

כשמציינים כמה נכסים במהלך העברה מצטברת, הערכים של השדות watermarkColumns ו-primaryKeys תואמים למיקום של הערכים בשדה assets. בדוגמה הבאה, dep_id תואם לטבלה DB1/USER1/DEPARTMENT, ו-report_by ו-report_title תואמים לטבלה DB1/USER1/EMPLOYEES.

      "primaryKeys":[['dep_id'], ['report_by','report_title']],
      "assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
  

לדוגמה, הפקודה הבאה יוצרת העברת נתונים מ-Oracle בפרויקט ברירת המחדל עם כל הפרמטרים הנדרשים:

bq mk
    --transfer_config
    --target_dataset=mydataset
    --data_source=oracle
    --display_name='My Transfer'
    --params='{"assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
        "connector.authentication.username": "User1",
        "connector.authentication.password":"ABC12345",
        "connector.database":"DB1",
        "connector.endpoint.host":"192.168.0.1",
        "connector.endpoint.port":1520,
        "connector.connectionType":"SERVICE",
        "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST",
        "connector.tls.trustedServerCertificate": "PEM-encoded certificate",
        "connector.networkAttachment":
        "projects/dev-project1/regions/us-central1/networkattachments/na1"
        "ingestionType":"incremental",
        "writeMode":"WRITE_MODE_APPEND",
        "watermarkColumns":["createdAt","createdAt"],
        "primaryKeys":[['dep_id'], ['report_by','report_title']]}'

API

משתמשים ב-method‏ projects.locations.transferConfigs.create ומספקים מופע של המשאב TransferConfig.

כששומרים את הגדרות ההעברה, המחבר של Oracle מפעיל באופן אוטומטי את הרצת ההעברה בהתאם לאפשרות התזמון שבחרתם. בכל הפעלה של העברה, המחבר של Oracle מעביר את כל הנתונים הזמינים מ-Oracle ל-BigQuery.

כדי להפעיל ידנית העברת נתונים מחוץ ללוח הזמנים הרגיל, אפשר להתחיל הרצה של מילוי חוסרים.

פתרון בעיות בהגדרת ההעברה

אם נתקלתם בבעיות בהגדרת העברת הנתונים, תוכלו לקרוא את המאמר בעיות בהעברת נתונים מ-Oracle.

המאמרים הבאים