יצירה וניהול של משאבים בקטלוג של Lakehouse runtime

Lakehouse for Apache Iceberg תומך בניהול משאבים באמצעות הקטלוג של Lakehouse runtime.

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

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

  1. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  2. מפעילים את ממשקי ה-API של BigQuery,‏ BigQuery Storage ו-Managed Service ל-Apache Spark.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    הפעלת ממשקי ה-API

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

כדי לקבל את ההרשאות שדרושות לניהול משאבי Apache Iceberg בקטלוג של זמן הריצה של Lakehouse, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

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

יצירת משאבים של קטלוג

בקטעים הבאים מוסבר איך ליצור משאבים בקטלוג של זמן הריצה של Lakehouse.

יצירת מרחבי שמות

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

API

משתמשים בשיטת datasets.insert ומציינים את השדה ExternalCatalogDatasetOptions במשאב מערך הנתונים שמעבירים.

{
  "datasetReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID"
  },
  "externalCatalogDatasetOptions": {
    "defaultStorageLocationUri": "URI",
    "parameters": {
      ...
    }
  },
  "location": "LOCATION"
}

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

  • PROJECT_ID: מזהה הפרויקט שמכיל את מערך הנתונים של היעד.
  • DATASET_ID: המזהה של מערך הנתונים של היעד.
  • URI: ה-URI של Cloud Storage לכל הטבלאות במערך הנתונים.
  • LOCATION: המיקום ב-BigQuery שבו רוצים ליצור את מערך הנתונים.

‫Apache Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות החדש.

Terraform

provider "google" {
  project = "PROJECT_ID"
}

resource "google_bigquery_dataset" "default" {
  dataset_id = "DATASET_ID"
  location   = "LOCATION"

  external_catalog_dataset_options {
    default_storage_location_uri = "URI"
    parameters = {
      ...
    }
  }
}

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

  • PROJECT_ID: מזהה הפרויקט שמכיל את מערך הנתונים של היעד.
  • DATASET_ID: המזהה של מערך הנתונים של היעד.
  • LOCATION: המיקום ב-BigQuery שבו רוצים ליצור את מערך הנתונים.
  • URI: ה-URI של Cloud Storage לכל הטבלאות במערך הנתונים.

יצירת טבלאות Apache Iceberg

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

API

משתמשים בשיטה tables.insert ומציינים את השדה ExternalCatalogTableOptions במשאב הטבלה שמעבירים.

{
  "tableReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID",
    "tableId": "TABLE_ID"
  },
  "externalCatalogTableOptions": {
    "parameters": {
      "table_type": "iceberg",
      "metadata_location": "METADATA_URI"
    },
    "connection_id": "CONNECTION_ID"
  }
}

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

  • PROJECT_ID: מזהה הפרויקט שמכיל את טבלת היעד.
  • DATASET_ID: מזהה מערך הנתונים שמכיל את טבלת היעד.
  • TABLE_ID: המזהה של טבלת היעד.
  • METADATA_URI: ה-URI של Cloud Storage של קובץ המטא-נתונים האחרון של Apache Iceberg. לדוגמה: gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: המזהה של החיבור ל-Cloud Storage.

‫Apache Spark SQL

CREATE TABLE SPARK_CATALOG.NAMESPACE.TABLE
  (id bigint, data string) USING iceberg;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.
  • TABLE: השם של הטבלה החדשה.

Terraform

resource "google_bigquery_table" "default" {
  deletion_protection = false
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "TABLE"

  external_catalog_table_options {
    storage_descriptor {
      location_uri  = "STORAGE_URI"
      input_format  = "org.apache.hadoop.mapred.FileInputFormat"
      output_format = "org.apache.hadoop.mapred.FileOutputFormat"
    }
    parameters = {
      "table_type"        = "iceberg"
      "metadata_location" = "METADATA_URI"
      "write.parquet.compression-codec" : "zstd"
      "EXTERNAL" : "TRUE"
    }
  }
}

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

  • TABLE: השם של טבלת היעד.
  • STORAGE_URI: ה-URI של Cloud Storage שבו מאוחסנים נתוני הטבלה, שמתחיל ב-gs://.
  • METADATA_URI: ה-URI של Cloud Storage של קובץ המטא-נתונים האחרון של Apache Iceberg. לדוגמה: gs://mybucket/mytable/metadata/1234.metadata.json.

צפייה במשאבים של הקטלוג

בקטעים הבאים מוסבר איך לראות משאבים בקטלוג של זמן הריצה של Lakehouse.

הצגת מרחבי שמות

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

API

כדי להציג את כל מרחבי השמות, משתמשים בשיטה datasets.list. כדי להציג מידע על מרחב שמות מוגדר, משתמשים בשיטה datasets.get.

‫Apache Spark SQL

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

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

מחליפים את SPARK_CATALOG בשם של קטלוג Apache Spark.

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

DESCRIBE { DATABASE | NAMESPACE } [EXTENDED]
SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.

הצגת טבלאות

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

API

כדי לראות את כל הטבלאות במרחב שמות, משתמשים בשיטה tables.list. כדי לראות מידע על טבלה מוגדרת, משתמשים בשיטה tables.get.

‫Apache Spark SQL

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

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.

כדי להציג מידע על טבלה מוגדרת, משתמשים בהצהרה הבאה:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.
  • TABLE: שם הטבלה.

שינוי משאבים בקטלוג

בקטעים הבאים מוסבר איך לשנות משאבים בקטלוג של זמן הריצה של Lakehouse.

עדכון מרחבי שמות

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

API

משתמשים בשיטה datasets.patch ומעדכנים את השדה ExternalCatalogDatasetOptions במשאב מערך הנתונים. לא מומלץ להשתמש בשיטה datasets.update כי היא מחליפה את כל משאב קבוצת הנתונים.

‫Apache Spark SQL

משתמשים בהצהרה ALTER DATABASE.

עדכון טבלאות Apache Iceberg

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

API

משתמשים בשיטה tables.patch ומעדכנים את השדה ExternalCatalogTableOptions במשאב הטבלה. לא מומלץ להשתמש בשיטה tables.update כי היא מחליפה את כל משאב הטבלה.

כדי לעדכן את הסכימה או את קובץ המטא-נתונים, משתמשים בשיטה tables.patch ומגדירים את המאפיין autodetect_schema כ-true:

PATCH https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID?autodetect_schema=true

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

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

בגוף הבקשה, מציינים את הערך המעודכן של כל שדה. לדוגמה, כדי לעדכן את מיקום המטא-נתונים של טבלת Apache Iceberg, מציינים את הערך המעודכן בשדה metadata_location:

{
  "externalCatalogTableOptions": {
    "parameters": {"metadata_location": "METADATA_URI"}
  },
  "schema": null
}'

מחליפים את METADATA_URI בURI של Cloud Storage של קובץ המטא-נתונים האחרון של Apache Iceberg. לדוגמה: gs://mybucket/mytable/metadata/1234.metadata.json.

‫Apache Spark SQL

משתמשים בהצהרה ALTER TABLE.

מחיקת משאבים מקטלוג

בקטעים הבאים מוסבר איך למחוק משאבים בקטלוג של זמן הריצה של Lakehouse.

מחיקת מרחבי שמות

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

API

משתמשים בשיטה datasets.delete. מגדירים את הפרמטר deleteContents לערך true כדי למחוק את הטבלאות במרחב השמות.

‫Apache Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.

מחיקת טבלאות

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

API

משתמשים ב-‎tables.delete method ומציינים את שם הטבלה. כשפועלים בשיטה הזו, לא מוחקים את הקבצים המשויכים ב-Cloud Storage.

‫Apache Spark SQL

כדי להשליך רק את הטבלה, משתמשים בהצהרה הבאה:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.
  • TABLE: שם הטבלה שרוצים להסיר.

כדי להשליך את הטבלה ולמחוק את הקבצים המשויכים ב-Cloud Storage, משתמשים בהצהרה הבאה:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

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

  • SPARK_CATALOG: השם של קטלוג Apache Spark.
  • NAMESPACE: השם של מרחב השמות.
  • TABLE: שם הטבלה שרוצים למחוק.

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