יצירה וניהול של מערכי נתונים מאוחדים ב-AWS Glue

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

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

מוודאים שיש לכם חיבור לנתוני AWS Glue.

  • כדי ליצור או לשנות חיבור, פועלים לפי ההוראות במאמר חיבור ל-Amazon S3. כשיוצרים את הקישור הזה, צריך לכלול את הצהרת המדיניות הבאה עבור AWS Glue במדיניות ניהול הזהויות והרשאות הגישה (IAM) של AWS ל-BigQuery. צריך לכלול את ההצהרה הזו בנוסף להרשאות האחרות בקטגוריית Amazon S3 שבה מאוחסנים הנתונים בטבלאות AWS Glue.

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }

    מחליפים את מה שכתוב בשדות הבאים:

    • REGION: האזור ב-AWS – לדוגמה, us-east-1
    • ACCOUNT_ID:: מזהה החשבון ב-AWS שמורכב מ-12 ספרות
    • DATABASE_NAME: שם מסד הנתונים של AWS Glue

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

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

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

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

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

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

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

במאמר מבוא ל-IAM יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

יצירת מערך נתונים מאוחד

כדי ליצור מערך נתונים מאוחד:

המסוף

  1. פותחים את הדף BigQuery במסוף Google Cloud .

    לדף BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

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

  3. בחלונית Explorer, בוחרים את הפרויקט שבו רוצים ליצור את מערך הנתונים.

  4. לוחצים על View actions (הצגת פעולות) ואז על Create dataset (יצירת מערך נתונים).

  5. בדף Create dataset, מבצעים את הפעולות הבאות:

    • בשדה Dataset ID, מזינים שם ייחודי למערך הנתונים.
    • בקטע Location type, בוחרים מיקום ב-AWS לקבוצת הנתונים, למשל aws-us-east-1. אחרי שיוצרים מערך נתונים, אי אפשר לשנות את המיקום שלו.
    • בקטע External Dataset (מערך נתונים חיצוני), מבצעים את הפעולות הבאות:

      • מסמנים את התיבה לצד קישור למערך נתונים חיצוני.
      • בקטע External dataset type (סוג מערך נתונים חיצוני), בוחרים באפשרות AWS Glue.
      • בשדה מקור חיצוני, מזינים aws-glue:// ואחריו את שם משאב Amazon‏ (ARN) של מסד הנתונים של AWS Glue – לדוגמה, aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
      • בקטע מזהה החיבור, בוחרים את החיבור ל-AWS.
    • משאירים את שאר הגדרות ברירת המחדל כמו שהן.

  6. לוחצים על יצירת מערך נתונים.

SQL

משתמשים בהצהרת שפת הגדרת נתונים (DDL) של CREATE EXTERNAL SCHEMA.

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    CREATE EXTERNAL SCHEMA DATASET_NAME
    WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'AWS_GLUE_SOURCE',
        location = 'LOCATION');

    מחליפים את מה שכתוב בשדות הבאים:

    • DATASET_NAME: השם של מערך הנתונים החדש ב-BigQuery.
    • PROJECT_ID: מזהה הפרויקט.
    • CONNECTION_LOCATION: המיקום של החיבור ל-AWS, לדוגמה aws-us-east-1.
    • CONNECTION_NAME: השם של החיבור ל-AWS.
    • AWS_GLUE_SOURCE: שם המשאב ב-Amazon‏ (ARN) של מסד הנתונים של AWS Glue, עם קידומת שמזהה את המקור – לדוגמה, aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
    • LOCATION: המיקום של מערך הנתונים החדש ב-BigQuery – למשל, aws-us-east-1. אחרי שיוצרים מערך נתונים, אי אפשר לשנות את המיקום שלו.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

בסביבת שורת פקודה, יוצרים מערך נתונים באמצעות הפקודה bq mk:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • LOCATION: המיקום של מערך הנתונים החדש ב-BigQuery – למשל, aws-us-east-1. אחרי שיוצרים מערך נתונים, אי אפשר לשנות את המיקום שלו. אפשר להגדיר ערך מיקום שיוגדר כברירת מחדל באמצעות הקובץ .bigqueryrc.
  • AWS_GLUE_SOURCE: שם המשאב ב-Amazon ‏ (ARN) של מסד הנתונים ב-AWS Glue – לדוגמה, arn:aws:glue:us-east-1:123456789:database/test_database.
  • PROJECT_ID: מזהה הפרויקט ב-BigQuery.
  • CONNECTION_LOCATION: המיקום של החיבור ל-AWS, לדוגמה aws-us-east-1.
  • CONNECTION_NAME: השם של החיבור ל-AWS.
  • DATASET_NAME: השם של מערך הנתונים החדש ב-BigQuery. כדי ליצור מערך נתונים בפרויקט שאינו פרויקט ברירת המחדל, מוסיפים את מזהה הפרויקט לשם מערך הנתונים בפורמט הבא: PROJECT_ID:DATASET_NAME.

Terraform

משתמשים במשאב google_bigquery_dataset.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

בדוגמה הבאה נוצר מערך נתונים מאוחד של AWS Glue:

resource "google_bigquery_dataset" "dataset" {
  provider                    = google-beta
  dataset_id                  = "example_dataset"
  friendly_name               = "test"
  description                 = "This is a test description."
  location                    = "aws-us-east-1"

external_dataset_reference {
  external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database"
  connection      = "projects/project/locations/aws-us-east-1/connections/connection"
  }
}

כדי להחיל את ההגדרות של Terraform בפרויקט ב- Google Cloud , מבצעים את השלבים בקטעים הבאים.

הכנת Cloud Shell

  1. מפעילים את Cloud Shell.
  2. מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

הכנת הספרייה

לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

  1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

    מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

    לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.

  3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
  4. שומרים את השינויים.
  5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
    terraform init

    אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

    terraform init -upgrade

החלה של השינויים

  1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
    terraform plan

    מתקנים את ההגדרות לפי הצורך.

  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
    terraform apply

    ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

  3. פותחים את Google Cloud הפרויקט כדי לראות את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.

API

מפעילים את השיטה datasets.insert עם משאב של מערך נתונים מוגדר ועם השדה externalDatasetReference במסד הנתונים של AWS Glue.

הצגת רשימת הטבלאות במערך נתונים מאוחד

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

קבלת מידע על טבלה

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

שליטה בגישה לטבלאות

כדי לנהל את הגישה לטבלאות במערך הנתונים המאוחד, אפשר לעיין במאמר שליטה בגישה למשאבים באמצעות IAM.

Row-level security,‏ column-level security ו-data masking נתמכים גם בטבלאות במערכי נתונים מאוחדים.

פעולות סכימה שעשויות לפסול מדיניות אבטחה, כמו מחיקת עמודה ב-AWS Glue, עלולות לגרום לכשל במשימות עד לעדכון המדיניות. בנוסף, אם מוחקים טבלה ב-AWS Glue ויוצרים אותה מחדש, מדיניות האבטחה לא חלה יותר על הטבלה שנוצרה מחדש.

שאילתות על נתונים ב-AWS Glue

הפעלת שאילתות על טבלאות במערכי נתונים מאוחדים זהה להפעלת שאילתות על טבלאות בכל מערך נתונים אחר ב-BigQuery.

אפשר לשלוח שאילתות לטבלאות של AWS Glue בפורמטים הבאים:

  • ‫CSV (דחוס ולא דחוס)
  • ‫JSON (דחוס ולא דחוס)
  • Parquet
  • ORC
  • Avro
  • Iceberg
  • Delta Lake

פרטי מיפוי הטבלה

כל טבלה שמעניקים לה גישה במסד הנתונים של AWS Glue מופיעה כטבלה מקבילה במערך הנתונים של BigQuery.

פורמט

הפורמט של כל טבלה ב-BigQuery נקבע לפי השדות הבאים של טבלת AWS Glue המתאימה:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

החריג היחיד הוא טבלאות Iceberg, שבהן נעשה שימוש בשדה TableType (Table.Parameters["table_type"]).

לדוגמה, טבלת AWS Glue עם השדות הבאים ממופה לטבלת ORC ב-BigQuery:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

מיקום

המיקום של כל טבלה ב-BigQuery נקבע לפי:

  • טבלאות Iceberg: השדה Table.Parameters["metadata_location"] בטבלת AWS Glue
  • טבלאות לא מחולקות למחיצות שאינן Iceberg: השדה Table.StorageDescriptor.Location בטבלת AWS Glue
  • טבלאות עם חלוקה למחיצות שאינן Iceberg: ‏ AWS Glue GetPartitions API

מלונות אחרים

בנוסף, חלק מהמאפיינים של טבלאות AWS Glue ממופים אוטומטית לאפשרויות ספציפיות לפורמט ב-BigQuery:

אופן הלימוד SerializationLib ערך הטבלה של AWS Glue אפשרות BigQuery
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON ‫Hive JsonSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

יצירת תצוגה במערך נתונים מאוחד

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

מחיקה של מערך נתונים מאוחד

מחיקה של מערך נתונים מאוחדת זהה למחיקה של כל מערך נתונים אחר ב-BigQuery. מידע נוסף זמין במאמר מחיקת מערכי נתונים.

תמחור

מידע על התמחור זמין במאמר בנושא תמחור BigQuery Omni.

מגבלות

  • כל המגבלות של BigQuery Omni חלות.
  • אי אפשר להוסיף, למחוק או לעדכן נתונים או מטא-נתונים בטבלאות במערך נתונים מאוחד של AWS Glue.
  • אי אפשר ליצור טבלאות, תצוגות או תצוגות חומריות חדשות במערך נתונים מאוחד של AWS Glue.
  • אין תמיכה בINFORMATION_SCHEMA תצוגות.
  • אין תמיכה בשמירת מטא-נתונים במטמון.
  • הגדרות ברמת מערך הנתונים שקשורות לברירות המחדל של יצירת טבלאות לא משפיעות על מערכי נתונים מאוחדים, כי אי אפשר ליצור טבלאות באופן ידני.
  • סוג הנתונים UNION של Apache Hive לא נתמך בטבלאות Avro.
  • חלות ההגבלות על טבלאות חיצוניות.

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