יצירת טבלאות BigLake ב-Blob Storage

במאמר הזה מוסבר איך ליצור טבלת BigLake של Azure Blob Storage. טבלת BigLake מאפשרת להשתמש בהענקת גישה כדי לשלוח שאילתות לנתונים ב-Blob Storage. העברת הרשאת גישה מפרידה בין הגישה לטבלת BigLake לבין הגישה למאגר הנתונים הבסיסי.

מידע על זרימת הנתונים בין BigQuery לבין Blob Storage מופיע במאמר זרימת נתונים כשמריצים שאילתות על נתונים.

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

ודאו שיש לכם חיבור לגישה לנתונים ב-Blob Storage.

התפקידים הנדרשים

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

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

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

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

  • bigquery.tables.create
  • bigquery.connections.delegate

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

יצירת מערך נתונים

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

המסוף

  1. עוברים לדף BigQuery.

    כניסה לדף BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים.
  3. בחלונית Explorer, בוחרים את הפרויקט שבו רוצים ליצור את מערך הנתונים.
  4. לוחצים על View actions (הצגת פעולות) ואז על Create dataset (יצירת מערך נתונים).
  5. בדף Create dataset, מציינים את הפרטים הבאים:
    1. בשדה Dataset ID מזינים שם ייחודי למערך הנתונים.
    2. בקטע Data location (מיקום הנתונים), בוחרים אזור נתמך.
    3. אופציונלי: כדי למחוק טבלאות באופן אוטומטי, מסמנים את התיבה Enable table expiration (הפעלת תפוגה של טבלאות) ומגדירים את Default maximum table age (גיל מקסימלי של טבלה כברירת מחדל) בימים. הנתונים ב-Azure לא נמחקים כשתוקף הטבלה פג.
    4. אם רוצים להשתמש באיסוף נתונים שמוגדר כברירת מחדל, מרחיבים את הקטע אפשרויות מתקדמות ובוחרים באפשרות הפעלת איסוף נתונים שמוגדר כברירת מחדל.
    5. לוחצים על יצירת מערך נתונים.

SQL

משתמשים בהצהרת ה-DDL‏ CREATE SCHEMA. בדוגמה הבאה נוצר מערך נתונים באזור azure-eastus2:

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

    כניסה ל-BigQuery

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

    CREATE SCHEMA mydataset
    OPTIONS (
      location = 'azure-eastus2');

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

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

BQ

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

bq --location=LOCATION mk \
    --dataset \
PROJECT_ID:DATASET_NAME

הפרמטר --project_id מבטל את פרויקט ברירת המחדל.

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

  • LOCATION: המיקום של מערך הנתונים

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

  • PROJECT_ID: מזהה הפרויקט

  • DATASET_NAME: השם של מערך הנתונים שרוצים ליצור

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

יצירת טבלאות BigLake על נתונים לא מחולקים

בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

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

  5. בדף Create table, בקטע Source, מבצעים את הפעולות הבאות:

    1. בקטע יצירת טבלה מ, בוחרים באפשרות Azure Blob Storage.
    2. בקטע Select Azure Blob Storage path (בחירת נתיב ב-Azure Blob Storage), מזינים נתיב ב-Blob Storage בתבנית הבאה: azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH

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

      • AZURE_STORAGE_ACCOUNT_NAME: השם של חשבון Blob Storage. האזור של החשבון צריך להיות זהה לאזור של מערך הנתונים.
      • CONTAINER_NAME: השם של מאגר Blob Storage.
      • FILE_PATH: נתיב הנתונים שמצביע על נתוני Blob Storage. לדוגמה, עבור קובץ CSV יחיד, ‫FILE_PATH יכול להיות myfile.csv.
    3. בקטע פורמט קובץ, בוחרים את פורמט הנתונים ב-Azure. הפורמטים הנתמכים הם AVRO,‏ CSV,‏ DELTA_LAKE,‏ ICEBERG,‏ JSONL,‏ ORC ו-PARQUET.

  6. בקטע יעד, מבצעים את הפעולות הבאות:

    1. בקטע Dataset (מערך נתונים), בוחרים את מערך הנתונים המתאים.
    2. בשדה Table (טבלה), מזינים את שם הטבלה.
    3. מוודאים שהאפשרות Table type מוגדרת ל-External table.
    4. בקטע Connection ID (מזהה החיבור), בוחרים את מזהה החיבור המתאים מהתפריט הנפתח. מידע על חיבורים זמין במאמר חיבור ל-Blob Storage.
  7. בקטע סכימה, אתם יכולים להפעיל זיהוי אוטומטי של סכימה או לציין סכימה באופן ידני אם יש לכם קובץ מקור. אם אין לכם קובץ מקור, אתם צריכים לציין סכימה באופן ידני.

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

    • כדי לציין סכימה באופן ידני, משאירים את האפשרות זיהוי אוטומטי לא מסומנת. מפעילים את האפשרות Edit as text ומזינים את סכימת הטבלה כמערך JSON.

  8. לוחצים על יצירת טבלה.

SQL

כדי ליצור טבלת BigLake, משתמשים בהצהרת CREATE EXTERNAL TABLE עם פסקה WITH CONNECTION:

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

    כניסה ל-BigQuery

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

    CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME
    WITH CONNECTION `AZURE_LOCATION.CONNECTION_NAME`
      OPTIONS (
        format = 'DATA_FORMAT',
        uris = ['azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH']);

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

    • DATASET_NAME: השם של מערך הנתונים שיצרתם
    • TABLE_NAME: השם שרוצים לתת לטבלה
    • AZURE_LOCATION: מיקום ב-Azure בפורמט Google Cloud, למשל azure-eastus2
    • CONNECTION_NAME: השם של החיבור שיצרתם
    • DATA_FORMAT: כל אחד מהפורמטים המאוחדים של BigQuery שנתמכים, כמו AVRO,‏ CSV,‏ DELTA_LAKE או ICEBERG (בגרסת Preview)
    • AZURE_STORAGE_ACCOUNT_NAME: השם של חשבון Blob Storage
    • CONTAINER_NAME: השם של קונטיינר Blob Storage
    • FILE_PATH: נתיב הנתונים שמצביע על נתוני Blob Storage

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

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

דוגמה:

CREATE EXTERNAL TABLE absdataset.abstable
WITH CONNECTION `azure-eastus2.abs-read-conn`
  OPTIONS (
    format = 'CSV', uris = ['azure://account_name.blob.core.windows.net/container/path/file.csv']);

BQ

יוצרים קובץ הגדרת טבלה:

bq mkdef  \
    --source_format=DATA_FORMAT \
    --connection_id=AZURE_LOCATION.CONNECTION_NAME \
    "azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH" > table_def

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

  • DATA_FORMAT: כל אחד מהפורמטים המאוחדים של BigQuery שנתמכים, כמו AVRO,‏ CSV,‏ ICEBERG או PARQUET
  • AZURE_LOCATION: מיקום ב-Azure בפורמט Google Cloud, לדוגמה azure-eastus2
  • CONNECTION_NAME: השם של החיבור שיצרתם
  • AZURE_STORAGE_ACCOUNT_NAME: השם של חשבון Blob Storage
  • CONTAINER_NAME: השם של קונטיינר Blob Storage
  • FILE_PATH: נתיב הנתונים שמצביע על נתוני Blob Storage

בשלב הבא, יוצרים את הטבלה ב-BigLake:

bq mk --external_table_definition=table_def DATASET_NAME.TABLE_NAME

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

  • DATASET_NAME: השם של מערך הנתונים שיצרתם
  • TABLE_NAME: השם שרוצים לתת לטבלה

לדוגמה, הפקודות הבאות יוצרות טבלת BigLake חדשה, my_dataset.my_table, שיכולה לשלוח שאילתות לנתוני Blob Storage שמאוחסנים בנתיב azure://account_name.blob.core.windows.net/container/path ויש לה חיבור קריאה במיקום azure-eastus2:

bq mkdef \
    --source_format=AVRO \
    --connection_id=azure-eastus2.read-conn \
    "azure://account_name.blob.core.windows.net/container/path" > table_def

bq mk \
    --external_table_definition=table_def my_dataset.my_table

API

מבצעים קריאה ל-method של API‏ tables.insert ויוצרים ExternalDataConfiguration במשאב Table שמעבירים.

מציינים את המאפיין schema או מגדירים את המאפיין autodetect לערך true כדי להפעיל זיהוי אוטומטי של סכימה עבור מקורות נתונים נתמכים.

מציינים את המאפיין connectionId כדי לזהות את החיבור שבו יש להשתמש לחיבור ל-Blob Storage.

יצירת טבלאות BigLake על נתונים מחולקים

אפשר ליצור טבלת BigLake לנתונים שמחולקים למחיצות ב-Hive ב-Blob Storage. אחרי שיוצרים טבלה מחולקת למחיצות (Partitions) חיצוניות, אי אפשר לשנות את מפתח המחיצה. כדי לשנות את מפתח המחיצה, צריך ליצור מחדש את הטבלה.

כדי ליצור טבלת BigLake על סמך נתונים עם חלוקה למחיצות ב-Hive, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

  4. לוחצים על יצירת טבלה. נפתחת החלונית Create table.

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

    1. בקטע יצירת טבלה מ, בוחרים באחת מהאפשרויות הבאות:

      • Amazon S3
      • Azure Blob Storage
    2. מזינים את הנתיב לתיקייה באמצעות תווים כלליים לחיפוש. לדוגמה:

      • ב-Amazon S3: s3://mybucket/*
      • ב-Blob Storage: azure://mystorageaccount.blob.core.windows.net/mycontainer/*

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

    3. מהרשימה פורמט קובץ בוחרים את סוג הקובץ.

    4. מסמנים את תיבת הסימון חלוקה למחיצות של נתוני המקור ומציינים את הפרטים הבאים:

      1. בשדה Select Source URI Prefix, מזינים את התחילית של ה-URI. לדוגמה, s3://mybucket/my_files.
      2. אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון דרישת מסנן מחיצה. הוספת דרישה לסינון מחיצות יכולה להפחית את העלויות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הוספת מסנני פרדיקטים למפתחות של מחיצות בשאילתות.
      3. בקטע Partition inference mode, בוחרים באחת מהאפשרויות הבאות:

        • הסקת סוגים באופן אוטומטי: מגדירים את מצב הזיהוי של סכימת החלוקה למחיצות לערך AUTO.
        • כל העמודות הן מחרוזות: מגדירים את מצב הזיהוי של סכימת המחיצה ל-STRINGS.
        • אני רוצה לספק משלי: מגדירים את מצב הזיהוי של סכימת המחיצות ל-CUSTOM ומזינים ידנית את פרטי הסכימה של מפתחות המחיצות. מידע נוסף מופיע במאמר בנושא סכימת מפתח מחיצה בהתאמה אישית.
  6. בקטע יעד, מציינים את הפרטים הבאים:

    1. בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
    2. בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
    3. בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
    4. בשדה Table type (סוג הטבלה), מוודאים שהאפשרות External table (טבלה חיצונית) נבחרה.
    5. בקטע מזהה חיבור, בוחרים את החיבור שיצרתם קודם.
  7. בקטע סכימה, אתם יכולים להפעיל זיהוי אוטומטי של סכימה או לציין סכימה באופן ידני אם יש לכם קובץ מקור. אם אין לכם קובץ מקור, אתם צריכים לציין סכימה באופן ידני.

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

    • כדי לציין סכימה באופן ידני, משאירים את האפשרות זיהוי אוטומטי לא מסומנת. מפעילים את האפשרות Edit as text ומזינים את סכימת הטבלה כמערך JSON.

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

  9. לוחצים על יצירת טבלה.

SQL

משתמשים בהצהרת ה-DDL‏ CREATE EXTERNAL TABLE:

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

    כניסה ל-BigQuery

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

    CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
    WITH PARTITION COLUMNS
    (
      PARTITION_COLUMN PARTITION_COLUMN_TYPE,
    )
    WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS (
      hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX",
      uris=['FILE_PATH'],
      format ="TABLE_FORMAT"
    );

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

    • PROJECT_ID: שם הפרויקט שבו רוצים ליצור את הטבלה, לדוגמה, myproject
    • DATASET: השם של מערך הנתונים ב-BigQuery שבו רוצים ליצור את הטבלה – למשל, mydataset
    • EXTERNAL_TABLE_NAME: השם של הטבלה שרוצים ליצור, לדוגמה mytable
    • PARTITION_COLUMN: השם של עמודת החלוקה
    • PARTITION_COLUMN_TYPE: הסוג של עמודת החלוקה למחיצות
    • REGION: האזור שמכיל את החיבור, למשל us
    • CONNECTION_ID: השם של החיבור, לדוגמה myconnection
    • HIVE_PARTITION_URI_PREFIX: קידומת URI של חלוקה למחיצות ב-Hive – לדוגמה:

      • s3://mybucket/
      • azure://mystorageaccount.blob.core.windows.net/mycontainer/
    • FILE_PATH: הנתיב למקור הנתונים של הטבלה החיצונית שרוצים ליצור. לדוגמה:

      • s3://mybucket/*.parquet
      • azure://mystorageaccount.blob.core.windows.net/mycontainer/*.parquet
    • TABLE_FORMAT: הפורמט של הטבלה שרוצים ליצור. לדוגמה: PARQUET

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

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

דוגמאות

בדוגמה הבאה נוצרת טבלת BigLake על נתונים מחולקים ב-Amazon S3. הסכימה מזוהה אוטומטית.

CREATE EXTERNAL TABLE `my_dataset.my_table`
WITH PARTITION COLUMNS
(
  sku STRING,
)
WITH CONNECTION `us.my-connection`
OPTIONS(
  hive_partition_uri_prefix = "s3://mybucket/products",
  uris = ['s3://mybucket/products/*']
);

בדוגמה הבאה נוצרת טבלת BigLake על נתונים מחולקים למחיצות ב-Blob Storage. הסכימה מצוינת.

CREATE EXTERNAL TABLE `my_dataset.my_table`
(
  ProductId INTEGER,
  ProductName, STRING,
  ProductType, STRING
)
WITH PARTITION COLUMNS
(
  sku STRING,
)
WITH CONNECTION `us.my-connection`
OPTIONS(
  hive_partition_uri_prefix = "azure://mystorageaccount.blob.core.windows.net/mycontainer/products",
  uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/*']
);

BQ

קודם כל, משתמשים בפקודה bq mkdef כדי ליצור קובץ הגדרת טבלה:

bq mkdef \
--source_format=SOURCE_FORMAT \
--connection_id=REGION.CONNECTION_ID \
--hive_partitioning_mode=PARTITIONING_MODE \
--hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX \
--require_hive_partition_filter=BOOLEAN \
 URIS > DEFINITION_FILE

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

  • SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני. לדוגמה, CSV.
  • REGION: האזור שמכיל את החיבור, לדוגמה us.
  • CONNECTION_ID: שם החיבור, לדוגמה myconnection.
  • PARTITIONING_MODE: מצב החלוקה למחיצות של Hive. משתמשים באחד מהערכים הבאים:
    • AUTO: זיהוי אוטומטי של שמות וסוגי המפתחות.
    • STRINGS: המערכת תמיר אוטומטית את שמות המפתחות למחרוזות.
    • CUSTOM: קידוד סכמת המפתח בקידומת של ה-URI במקור.
  • URI_SHARED_PREFIX: קידומת ה-URI של המקור.
  • BOOLEAN: מציין אם נדרש מסנן של תנאי מסוים בזמן השאילתה. הדגל הזה הוא אופציונלי. ערך ברירת המחדל הוא false.
  • URIS: הנתיב לתיקייה ב-Amazon S3 או ב-Blob Storage, בפורמט של תווים כלליים.
  • DEFINITION_FILE: הנתיב אל קובץ הגדרת הטבלה במחשב המקומי.

אם PARTITIONING_MODE הוא CUSTOM, צריך לכלול את סכימת מפתח המחיצה בקידומת של מזהה ה-URI של המקור, באמצעות הפורמט הבא:

--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...

אחרי שיוצרים את קובץ הגדרת הטבלה, משתמשים בפקודה bq mk כדי ליצור את טבלת BigLake:

bq mk --external_table_definition=DEFINITION_FILE \
DATASET_NAME.TABLE_NAME \
SCHEMA

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

  • DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה.
  • DATASET_NAME: השם של מערך הנתונים שמכיל את הטבלה.
  • TABLE_NAME: השם של הטבלה שיוצרים.
  • SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמט field:data_type,field:data_type,.... כדי להשתמש בזיהוי אוטומטי של סכימה, משמיטים את הארגומנט הזה.

דוגמאות

בדוגמה הבאה נעשה שימוש במצב חלוקה למחיצות של Hive לנתונים של Amazon S3:AUTO

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=AUTO \
  --hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
  --metadata_cache_mode=AUTOMATIC \
  s3://mybucket/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

בדוגמה הבאה נעשה שימוש במצב חלוקה למחיצות של Hive לנתונים של Amazon S3:STRING

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=STRING \
  --hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
  s3://mybucket/myTable/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

בדוגמה הבאה נעשה שימוש בCUSTOMמצב חלוקה למחיצות של Hive עבור נתונים ב-Blob Storage:

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=CUSTOM \
  --hive_partitioning_source_uri_prefix=azure://mystorageaccount.blob.core.windows.net/mycontainer/{dt:DATE}/{val:STRING} \
  azure://mystorageaccount.blob.core.windows.net/mycontainer/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

API

כדי להגדיר חלוקה למחיצות ב-Hive באמצעות BigQuery API, צריך לכלול את האובייקט hivePartitioningOptions באובייקט ExternalDataConfiguration כשיוצרים את קובץ הגדרת הטבלה. כדי ליצור טבלת BigLake, צריך לציין גם ערך בשדה connectionId.

אם מגדירים את השדה hivePartitioningOptions.mode ל-CUSTOM, צריך לקודד את סכימת מפתח המחיצה בשדה hivePartitioningOptions.sourceUriPrefix באופן הבא: s3://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...

כדי לאכוף את השימוש במסנן פרדיקטים בזמן השאילתה, מגדירים את השדה hivePartitioningOptions.requirePartitionFilter לערך true.

טבלאות Delta Lake

‫Delta Lake הוא פורמט טבלה בקוד פתוח שתומך בטבלאות נתונים בקנה מידה של פטה-בייט. אפשר להריץ שאילתות על טבלאות Delta Lake כטבלאות זמניות וגם כטבלאות קבועות, והן נתמכות כטבלאות BigLake.

סנכרון סכימה

‫Delta Lake שומר על סכימה קנונית כחלק מהמטא-נתונים שלו. אי אפשר לעדכן סכימה באמצעות קובץ מטא-נתונים בפורמט JSON. כדי לעדכן את הסכימה:

  1. משתמשים בפקודה bq update עם הדגל --autodetect_schema:

    bq update --autodetect_schema
    PROJECT_ID:DATASET.TABLE
    

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

    • PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה שרוצים לעדכן

    • DATASET: מערך הנתונים שמכיל את הטבלה שרוצים לעדכן

    • TABLE: הטבלה שרוצים לעדכן

המרת סוג

‫BigQuery ממיר את סוגי הנתונים של Delta Lake לסוגי הנתונים הבאים של BigQuery:

סוג Delta Lake סוג BigQuery
boolean BOOL
byte INT64
int INT64
long INT64
float FLOAT64
double FLOAT64
Decimal(P/S) NUMERIC או BIG_NUMERIC בהתאם לרמת הדיוק
date DATE
time TIME
timestamp (not partition column) TIMESTAMP
timestamp (partition column) DATETIME
string STRING
binary BYTES
array<Type> ARRAY<Type>
struct STRUCT
map<KeyType, ValueType> ARRAY<Struct<key KeyType, value ValueType>>

מגבלות

ההגבלות הבאות חלות על טבלאות Delta Lake:

  • המגבלות על טבלאות חיצוניות חלות על טבלאות Delta Lake.

  • יש תמיכה בטבלאות Delta Lake רק ב-BigQuery Omni, והן כפופות למגבלות שקשורות אליהן.

  • אי אפשר לעדכן טבלה באמצעות קובץ מטא-נתונים חדש בפורמט JSON. חובה להשתמש בפעולת עדכון של טבלת סכימה עם זיהוי אוטומטי. מידע נוסף זמין במאמר בנושא סנכרון סכימות.

  • תכונות האבטחה של BigLake מגנות על טבלאות Delta Lake רק כשניגשים אליהן דרך שירותי BigQuery.

יצירת טבלת Delta Lake

בדוגמה הבאה נוצרת טבלה חיצונית באמצעות ההצהרה CREATE EXTERNAL TABLE בפורמט Delta Lake:

CREATE [OR REPLACE] EXTERNAL TABLE table_name
WITH CONNECTION connection_name
OPTIONS (
         format = 'DELTA_LAKE',
         uris = ["parent_directory"]
       );

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

  • table_name: שם הטבלה.

  • connection_name: השם של החיבור. החיבור צריך לזהות מקור של Amazon S3 או של Blob Storage.

  • parent_directory: ה-URI של ספריית האב.

העברה בין עננים באמצעות Delta Lake

בדוגמה הבאה נעשה שימוש בהצהרה LOAD DATA כדי לטעון נתונים לטבלה המתאימה:

LOAD DATA [INTO | OVERWRITE] table_name
FROM FILES (
        format = 'DELTA_LAKE',
        uris = ["parent_directory"]
)
WITH CONNECTION connection_name;

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

שליחת שאילתות לטבלאות BigLake

מידע נוסף זמין במאמר בנושא שאילתות על נתונים ב-Blob Storage.

צפייה במטא-נתונים של משאב באמצעות INFORMATION_SCHEMA

אפשר לראות את המטא-נתונים של המשאב בתצוגות INFORMATION_SCHEMA. כשמריצים שאילתה על התצוגות JOBS_BY_*,‏ JOBS_TIMELINE_BY_* ו-RESERVATION*, צריך לציין את מיקום העיבוד של השאילתה שנמצא באותו אזור כמו הטבלה. מידע על מיקומים ב-BigQuery Omni זמין במאמר מיקומים. בכל הטבלאות האחרות של המערכת, ציון המיקום של עבודת השאילתה הוא אופציונלי.

במאמר בנושא מגבלות מפורטות טבלאות המערכת שנתמכות ב-BigQuery Omni.

כדי לשלוח שאילתה לטבלאות המערכת JOBS_* ו-RESERVATION*, בוחרים באחת מהשיטות הבאות כדי לציין את מיקום העיבוד:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. אם הכרטיסייה Editor לא מוצגת, לוחצים על Compose new query.

  3. לוחצים על סמל האפשרויות הנוספות > הגדרות של שאילתות. תיבת הדו-שיח הגדרות השאילתה תיפתח.

  4. בתיבת הדו-שיח הגדרות שאילתה, בקטע הגדרות נוספות > מיקום הנתונים, בוחרים את האזור ב-BigQuery שמוגדר באותו מיקום כמו האזור ב-BigQuery Omni. לדוגמה, אם האזור של BigQuery Omni הוא aws-us-east-1, צריך לציין us-east4.

  5. בוחרים את השדות שנותרו ולוחצים על שמירה.

BQ

משתמשים בדגל --location כדי להגדיר את מיקום העיבוד של העבודה לאזור BigQuery שמוגדר באותו מיקום כמו אזור BigQuery Omni. לדוגמה, אם האזור של BigQuery Omni הוא aws-us-east-1, צריך לציין us-east4.

דוגמה

bq query --use_legacy_sql=false --location=us-east4 \
"SELECT * FROM region-azure-eastus2.INFORMATION_SCHEMA.JOBS limit 10;"

API

אם מריצים משימות באופן פרוגרמטי, צריך להגדיר את ארגומנט המיקום לאזור BigQuery שמוגדר באותו מיקום כמו אזור BigQuery Omni. לדוגמה, אם האזור של BigQuery Omni הוא aws-us-east-1, צריך לציין us-east4.

VPC Service Controls

אתם יכולים להשתמש בגבולות גזרה של VPC Service Controls כדי להגביל את הגישה מ-BigQuery Omni לשירות ענן חיצוני, וכך להוסיף עוד שכבת הגנה. לדוגמה, גבולות גזרה של VPC Service Controls יכולים להגביל את הייצוא מטבלאות BigQuery Omni שלכם לקטגוריית Amazon S3 ספציפית או למאגר Blob Storage.

מידע נוסף על VPC Service Controls זמין במאמר סקירה כללית על VPC Service Controls.

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

מוודאים שיש לכם את ההרשאות הנדרשות להגדרת היקפי שירות. כדי לראות רשימה של תפקידי IAM שנדרשים להגדרת VPC Service Controls, אפשר לעיין במאמר בנושא בקרת גישה באמצעות IAM במסמכי התיעוד של VPC Service Controls.

הגדרה של VPC Service Controls באמצעות מסוף Google Cloud

  1. בתפריט הניווט במסוף Google Cloud , לוחצים על Security ואז על VPC Service Controls.

    מעבר אל VPC Service Controls

  2. כדי להגדיר את VPC Service Controls ל-BigQuery Omni, פועלים לפי השלבים במדריך יצירת היקף שירות. כשמגיעים לחלונית כללי תעבורת נתונים יוצאת (egress), פועלים לפי השלבים הבאים:

    1. בחלונית Egress rules, לוחצים על Add rule.

    2. בקטע ממאפיינים של לקוח ה-API, בוחרים אפשרות מהרשימה זהות.

    3. בוחרים באפשרות למאפיינים של משאבים חיצוניים.

    4. כדי להוסיף משאב חיצוני, לוחצים על הוספת משאבים חיצוניים.

    5. בתיבת הדו-שיח הוספת משאב חיצוני, בשדה שם המשאב החיצוני, מזינים שם משאב תקין. לדוגמה:

      • ‫Amazon Simple Storage Service (Amazon S3): s3://BUCKET_NAME

        מחליפים את BUCKET_NAME בשם הקטגוריה שלכם ב-Amazon S3.

      • ב-Azure Blob Storage: azure://myaccount.blob.core.windows.net/CONTAINER_NAME

        מחליפים את CONTAINER NAME בשם של קונטיינר Blob Storage.

      רשימה של מאפייני כללי יציאה זמינה במאמר חומר עזר בנושא כללי יציאה.

    6. בוחרים את השיטות שרוצים לאפשר במשאבים החיצוניים:

      1. אם רוצים לאפשר את כל השיטות, בוחרים באפשרות כל השיטות ברשימה שיטות.
      2. אם רוצים לאפשר שיטות ספציפיות, בוחרים באפשרות שיטה נבחרת, לוחצים על בחירת שיטות ואז בוחרים את השיטות שרוצים לאפשר במקורות החיצוניים.
    7. לוחצים על יצירת היקף.

הגדרת VPC Service Controls באמצעות ה-CLI של gcloud

כדי להגדיר את VPC Service Controls באמצעות ה-CLI של gcloud, מבצעים את השלבים הבאים:

  1. הגדרת מדיניות ברירת המחדל לגישה.
  2. יוצרים את קובץ הקלט של מדיניות היציאה.
  3. מוסיפים את מדיניות היציאה.

הגדרת מדיניות ברירת המחדל לגישה

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

יצירת קובץ קלט של מדיניות יציאה

בלוק של כללי יציאה מגדיר את הגישה המותרת מתוך גבולות הגזרה למשאבים מחוץ לגבולות האלה. במשאבים חיצוניים, המאפיין externalResources מגדיר את נתיבי המשאבים החיצוניים שאפשר לגשת אליהם מתוך גבולות הגזרה של VPC Service Controls.

אפשר להגדיר כללי תעבורת נתונים יוצאת (egress) באמצעות קובץ JSON או קובץ YAML. בדוגמה הבאה נעשה שימוש בפורמט .yaml:

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: "*"
      *OR*
      - permission: "externalResource.read"
    externalResources:
      - EXTERNAL_RESOURCE_PATH
  egressFrom:
    identityType: IDENTITY_TYPE
    *OR*
    identities:
    - serviceAccount:SERVICE_ACCOUNT
  • egressTo: מציג רשימה של פעולות שירות מותרות ב Google Cloud משאבים בפרויקטים שצוינו מחוץ לגבולות הגזרה.

  • operations: רשימה של שירותים נגישים ופעולות או שיטות שלקוח שעומד בתנאי החסימה from מורשה לגשת אליהם.

  • serviceName: מגדירים bigquery.googleapis.com ל-BigQuery Omni.

  • methodSelectors: רשימת השיטות שלקוח שעומד בתנאים של from יכול לגשת אליהן. במאמר הגבלות נתמכות על שיטות שירות מפורטות השיטות וההרשאות של השירותים שאפשר להגביל.

  • method : שיטת שירות תקפה, או \"*\" כדי לאפשר את כל שיטות serviceName.

  • permission: הרשאה תקפה לשירות, כמו \"*\", ‏externalResource.read או externalResource.write. הגישה למשאבים מחוץ לגבולות גזרה מותרת לפעולות שדורשות את ההרשאה הזו.

  • externalResources: מציג רשימה של משאבים חיצוניים שלקוחות בתוך היקף יכולים לגשת אליהם. מחליפים את EXTERNAL_RESOURCE_PATH בקטגוריה תקפה של Amazon S3, כמו s3://bucket_name, או בנתיב של מאגר Blob Storage, כמו azure://myaccount.blob.core.windows.net/container_name.

  • egressFrom: מציג רשימה של פעולות שירות מותרות במשאבים Google Cloudבפרויקטים שצוינו בתוך גבולות הגזרה.

  • identityType או identities: הגדרה של סוגי הזהויות שיכולות לגשת למשאבים שצוינו מחוץ לגבולות הגזרה. מחליפים את IDENTITY_TYPE באחד מהערכים התקפים הבאים:

    • ANY_IDENTITY: כדי לאפשר את כל הזהויות.
    • ANY_USER_ACCOUNT: כדי לאפשר לכל המשתמשים.
    • ANY_SERVICE_ACCOUNT: כדי לאפשר לכל חשבונות השירות
  • identities: מציג רשימה של חשבונות שירות שיכולים לגשת למשאבים שצוינו מחוץ לגבולות גזרה.

  • serviceAccount (אופציונלי): מחליפים את SERVICE_ACCOUNT בחשבון השירות שיכול לגשת למשאבים שצוינו מחוץ לגבולות גזרה.

דוגמאות

הדוגמה הבאה היא מדיניות שמאפשרת פעולות תעבורת נתונים יוצאת (egress) מתוך גבולות גזרה למיקום s3://mybucket Amazon S3 ב-AWS.

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: "*"
    externalResources:
      - s3://mybucket
      - s3://mybucket2
  egressFrom:
    identityType: ANY_IDENTITY

בדוגמה הבאה, מותרות פעולות תעבורת נתונים יוצאת (egress) למאגר Blob Storage:

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: "*"
    externalResources:
      - azure://myaccount.blob.core.windows.net/mycontainer
  egressFrom:
    identityType: ANY_IDENTITY

מידע נוסף על מדיניות תעבורת נתונים יוצאת (egress) זמין במאמר הפניה לכללי תעבורת נתונים יוצאת (egress).

הוספת מדיניות היציאה

כדי להוסיף את מדיניות תעבורת הנתונים היוצאת (egress) כשיוצרים גבולות גזרה חדשים לשירות, משתמשים בפקודה gcloud access-context-manager perimeters create. לדוגמה, הפקודה הבאה יוצרת גבולות גזרה חדשים בשם omniPerimeter שכוללים את הפרויקט עם מספר הפרויקט 12345, מגבילה את BigQuery API ומוסיפה מדיניות יציאה שמוגדרת בקובץ egress.yaml:

gcloud access-context-manager perimeters create omniPerimeter \
    --title="Omni Perimeter" \
    --resources=projects/12345 \
    --restricted-services=bigquery.googleapis.com \
    --egress-policies=egress.yaml

כדי להוסיף את מדיניות היציאה לגבולות גזרה לשירות קיימים, משתמשים בפקודה gcloud access-context-manager perimeters update. לדוגמה, הפקודה הבאה מוסיפה מדיניות תעבורת נתונים יוצאת (egress) שהוגדרה בקובץ egress.yaml לגבולות גזרה לשירות קיים בשם omniPerimeter:

gcloud access-context-manager perimeters update omniPerimeter
    --set-egress-policies=egress.yaml

אימות ההיקף

כדי לאמת את ההיקף, משתמשים בפקודה gcloud access-context-manager perimeters describe:

gcloud access-context-manager perimeters describe PERIMETER_NAME

מחליפים את PERIMETER_NAME בשם גבולות הגזרה.

לדוגמה, הפקודה הבאה מתארת את גבולות הגזרה omniPerimeter:

gcloud access-context-manager perimeters describe omniPerimeter

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

מתן גישה ל-Blob Storage מ-BigQuery Omni VPC

אדמינים ב-BigQuery יכולים ליצור כלל רשת כדי להעניק ל-BigQuery Omni גישה למשאבי Blob Storage. כך מוודאים שרק רשתות VPC מורשות של BigQuery Omni יכולות ליצור אינטראקציה עם Blob Storage, ומשפרים את אבטחת הנתונים.

החלת כלל רשת על BigQuery Omni VPC

כדי להחיל כלל רשת, משתמשים ב-Azure PowerShell או ב-Terraform:

Azure PowerShell

מריצים את הפקודה הבאה כדי להוסיף לחשבון האחסון כלל רשת שמציין את מזהי רשת המשנה של BigQuery Omni שחולצו כVirtualNetworkResourceId.

  Add-AzStorageAccountNetworkRule`
   -ResourceGroupName "RESOURCE_GROUP_NAME"`
   -Name "STORAGE_ACCOUNT_NAME"`
   -VirtualNetworkResourceId "SUBNET_ID1","SUBNET_ID2"

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

  • RESOURCE_GROUP_NAME: שם קבוצת המשאבים.
  • STORAGE_ACCOUNT_NAME: השם של חשבון האחסון.
  • SUBNET_ID1,SUBNET_ID1: מזהי רשתות המשנה. המידע הזה מופיע בטבלה בדף הזה.

Terraform

מוסיפים את השורות הבאות לקובץ התצורה של Terraform:

  resource "azurerm_storage_account_network_rules" "example" {
    storage_account_name       = "STORAGE_ACCOUNT_NAME"
    resource_group_name        = "RESOURCE_GROUP_NAME"
    default_action             = "Allow"
    bypass                     = ["Logging", "Metrics", "AzureServices"]
    virtual_network_subnet_ids = ["SUBNET_ID1","SUBNET_ID2"]
  }

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

  • STORAGE_ACCOUNT_NAME: השם של חשבון האחסון.
  • RESOURCE_GROUP_NAME: שם קבוצת המשאבים.
  • SUBNET_ID1,SUBNET_ID1: מזהי רשתות המשנה. המידע הזה מופיע בטבלה בדף הזה.

מזהי משאבים של BigQuery Omni VPC

אזור מזהי רשתות משנה
azure-eastus2 /subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus21-yurduaaaaa-private
/subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus22-yurduaaaab-private

מגבלות

רשימה מלאה של המגבלות שחלות על טבלאות BigLake שמבוססות על Amazon S3 ו-Blob Storage מופיעה במאמר בנושא מגבלות.

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