גישה לנתוני Iceberg מ-AlloyDB

גישה ישירה ל-Iceberg ב-AlloyDB ל-PostgreSQL מאפשרת לשלוח שאילתות לנתונים שמאוחסנים בפורמט טבלה של Apache Iceberg ב-Cloud Storage ממכונה של AlloyDB. אתם יכולים לגשת למערכי נתונים של Iceberg באמצעות מזהי URI של קטגוריות ב-Cloud Storage או באמצעות הקטלוג הייעודי לזמן ריצה של Lakehouse. כדי להאיץ עומסי עבודה של ניתוח נתונים, AlloyDB מספק מנוע מבוסס-עמודות מובנה שמבצע אופטימיזציה של סריקות, איחודים וצבירות. כשמשלבים את המנוע מבוסס-העמודות, הגישה הישירה ל-Iceberg מאפשרת להריץ שאילתות ניתוח נתונים ברמת ביצועים גבוהה ב-lakehouse, בלי לבנות, לנהל או לתחזק פייפליינים מורכבים של חילוץ, טרנספורמציה וטעינה (ETL).

אתם יכולים לשלוח שאילתות לטבלאות Iceberg באמצעות פקודות SQL סטנדרטי, לאחד מערכי נתונים של Iceberg עם טבלאות תפעוליות ב-AlloyDB, ולאכלס טבלאות Iceberg במנוע מבוסס-עמודות בזיכרון כדי לשפר את ביצועי השאילתות.

יתרונות

הגישה הישירה ל-Iceberg מספקת את היתרונות הבאים:

  • גישה ל-lakehouse ללא ETL: שליחת שאילתות למערכי נתונים חיצוניים של Iceberg במקום, בלי להעתיק או להעביר נתונים למערכות ניתוח נפרדות.
  • שאילתות מאוחדות של טרנזקציות וניתוח נתונים: אפשר לשלב נתונים תפעוליים בזמן אמת שמאוחסנים בטבלאות של AlloyDB עם נתונים היסטוריים בכמות גדולה שמאוחסנים בטבלאות של Iceberg ב-Cloud Storage.
  • שילוב גמיש של קטלוגים: גישה למטא-נתונים של טבלאות Iceberg מנתיבים של קטגוריות ב-Cloud Storage או דרך קטלוג ייעודי לזמן ריצה של Lakehouse.
  • האצת שאילתות מבוססות-עמודות: שמירה במטמון ואכלוס של טבלאות Iceberg בזיכרון של המנוע מבוסס-העמודות של AlloyDB, כדי לעבד נתונים אנליטיים תוך פחות משנייה.
  • ממשק SQL סטנדרטי: שימוש בתחביר מוכר של PostgreSQL כדי לשלוח שאילתות ולנתח טבלאות Iceberg.

איך פועלת גישה ישירה ל-Iceberg

הגישה הישירה ל-Iceberg משתמשת בממשק של שיטת הגישה לטבלאות (TAM) של PostgreSQL‏ (USING iceberg) ומשתלבת עם מסגרת התכנון וההפעלה של המנוע מבוסס-העמודות של AlloyDB.

כששולחים שאילתה לטבלת Iceberg, ‏ AlloyDB פועל באחד מהמצבים הבאים:

  • סריקה ישירה (לקריאות בסטרימינג): AlloyDB קורא את המטא-נתונים וקובצי הנתונים העדכניים ישירות מ-Cloud Storage. המנוע מבוסס-העמודות מעבד את הנתונים בסטרימינג.
  • האצה של מנוע מבוסס-עמודות (לקריאות במטמון בזיכרון): כשמאכלסים טבלת Iceberg במנוע מבוסס-עמודות של AlloyDB באמצעות הפונקציה google_columnar_engine_add(), הטבלה נטענת למאגר מבוסס-עמודות בזיכרון. שאילתות עוקבות קוראות מהזיכרון של המנוע מבוסס-העמודות, וכך מגדילות את קצב העברת הנתונים של השאילתות ומצמצמות את זמן האחזור.

הצגת תמונת מצב ורענון המטמון

תמונת המצב של טבלת Iceberg ש-AlloyDB שולח אליה שאילתות תלויה במצב הקריאה:

  • סריקה ישירה: AlloyDB מריץ שאילתות בתמונת המצב האחרונה של Iceberg. כששאילתה מתחילה, AlloyDB מזהה את תמונת המצב האחרונה שזמינה בטבלת Iceberg וקורא נתונים מתמונת המצב הזו, גם בתוך טרנזקציה של REPEATABLE READ או SERIALIZABLE. ‫AlloyDB לא תומך בהצמדת תמונת מצב ובשאילתות בנקודת זמן מסוימת בין טרנזקציות.

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

    BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    SELECT * FROM customer_orders;
    -- If an external process commits a new Iceberg snapshot:
    SELECT * FROM customer_orders; -- Returns results from the new snapshot.
    COMMIT;
    
  • האצה של מנוע מבוסס-עמודות: AlloyDB מריץ שאילתות בתמונת המצב שמאוכלסת במנוע מבוסס-העמודות. אם AlloyDB כותב נתונים חדשים בטבלת Iceberg הבסיסית ב-Cloud Storage אחרי האכלוס, יכול להיות שהשאילתות יחזירו נתונים לא עדכניים. כדי לקבל נתונים עדכניים אחרי פעולות DML בטבלה הבסיסית, צריך לרענן את המטמון באמצעות הפונקציה google_columnar_engine_refresh().

סוגי נתונים נתמכים

כשמגדירים טבלת Iceberg ב-AlloyDB, שמות העמודות וסוגי הנתונים בהצהרת ה-DDL צריכים להתאים לסוגים בסכימת ה-Iceberg הבסיסית.

גישה ישירה ל-Iceberg תומכת בסוגי הנתונים הבאים של Apache Iceberg ובסוגי הנתונים התואמים של AlloyDB:

סוג הנתונים של Apache Iceberg סוג הנתונים ב-AlloyDB תיאור
boolean BOOLEAN המרת וקטור לפורמט של בייטים דחוסים
int INT / INTEGER מספר שלם של 32 ביט עם סימן
long BIGINT מספר שלם עם סימן של 64 ביט
float REAL / FLOAT4 נקודה צפה (floating point) עם דיוק יחיד של 32 ביט
double DOUBLE PRECISION / FLOAT8 נקודה צפה (floating point) של 64 ביט עם דיוק כפול
decimal(P, S) NUMERIC(P, S) / DECIMAL(P, S) ערך מספרי עם נקודה קבועה, דיוק P וקנה מידה S
string TEXT / VARCHAR ערכי מחרוזת UTF-8
date DATE תאריך ביומן (שנה, חודש, יום)
timestamp TIMESTAMP חותמת זמן בלי אזור זמן
timestamptz TIMESTAMPTZ חותמת זמן עם אזור זמן

מגבלות

לגישה ישירה ל-Iceberg יש את המגבלות הבאות:

  • זמינות גרסאות PostgreSQL: ב-AlloyDB יש תמיכה בגישה ישירה ל-Iceberg ב-PostgreSQL מגרסה 18 ואילך.
  • הרשאות משתמשים: רק משתמשי מסד נתונים עם התפקיד alloydbsuperuser יכולים ליצור טבלאות Iceberg. אחרי שיוצרים טבלה, אפשר לתת למשתמשים אחרים הרשאות SELECT כדי לשלוח שאילתות לטבלת Iceberg.
  • פעולות לקריאה בלבד: AlloyDB תומך רק בשאילתות SELECT (DQL) בטבלאות Iceberg. הוא לא תומך בפעולות כתיבה (INSERT, UPDATE, DELETE, TRUNCATE).
  • גרסת המפרט של Apache Iceberg: ‏AlloyDB לא תומך בקובצי מחיקה של Iceberg v2 (מחיקות לפי מיקום ושוויון) או בווקטורים של מחיקה של Iceberg v3.
  • תמיכה בפורמטים של קבצים: גישה ישירה ל-Iceberg תומכת בקובצי נתונים בפורמט Parquet ובקובצי מטא-נתונים בפורמטים JSON ו-Avro. הוא לא תומך בקובצי נתונים מסוג ORC.
  • ניהול גרסאות של תמונת מצב: שאילתות סריקה ישירות פועלות בתמונת המצב העדכנית ביותר של טבלת Iceberg, ושאילתות עם האצה עמודתית פועלות בתמונת המצב המאוכלסת. ‫AlloyDB לא תומך בשאילתות בנקודת זמן ספציפית.
  • פיתוח סכימה: AlloyDB לא תומך בפעולות ALTER TABLE בטבלאות Iceberg. טבלת Iceberg הבסיסית לא יכולה לעבור העברת סכימה.
  • תמיכה בקטלוג מטא-נתונים: גישה ישירה ל-Iceberg תומכת בנתיבים ישירים לקטגוריות של Cloud Storage (gs://) ובנתיבים לקטלוג ייעודי לזמן ריצה של Lakehouse (bl://). בקטלוג ייעודי לזמן ריצה של Lakehouse, ‏AlloyDB תומך רק במצב פרטי כניסה של משתמשי קצה. הוא לא תומך במצב הפצת פרטי כניסה או בקטלוגים אחרים של REST.
  • קטגוריות של "מגיש הבקשה משלם": AlloyDB לא תומך בקטגוריות של Cloud Storage שמוגדרות עם מגיש הבקשה משלם.
  • אילוץ אכלוס מלא: AlloyDB לא תומך באכלוס חלקי של עמודות בטבלאות Iceberg. הטבלאות צריכות להתאים לזיכרון של המנוע מבוסס-העמודות או לשטח ה-SSD.
  • זיכרון הערימה של האוכלוסייה: אכלוס טבלת Iceberg שמכילה קבוצות גדולות של שורות Parquet עלול לחרוג ממגבלת זיכרון הערימה של האוכלוסייה לכל עובד, במיוחד במכונות עם פחות מעבדי vCPU. כדי לפתור את הבעיה, קראו את המאמר הערימה של אכלוס המנוע מבוסס-העמודות מלאה.

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

לפני שיוצרים טבלאות Iceberg ושולחים אליהן שאילתות, צריך לבצע את הפעולות הבאות:

  1. יוצרים אשכול AlloyDB שפועל ב-PostgreSQL בגרסה 18 ואילך ב- Google Cloud. מידע נוסף זמין במאמר יצירת אשכול.
  2. אירוח טבלת Apache Iceberg ב-Cloud Storage או רישום שלה בקטלוג הייעודי לזמן ריצה של Lakehouse:
    • בנתיבים של Cloud Storage, מבנה הספרייה של הקטגוריה חייב להיות תואם לפריסה הרגילה של Apache Iceberg, שמכילה את ספריות המשנה data/ ו-metadata/, כולל קובצי JSON של מטא-נתונים ו-version-hint.text. מידע נוסף זמין במאמר יצירת קטגוריה.
    • בקטלוג ייעודי לזמן ריצה של Lakehouse, יוצרים ורושמים את קטלוג Iceberg במצב פרטי כניסה של משתמש קצה. מידע נוסף זמין במאמר הגדרת נקודת הקצה של קטלוג Apache Iceberg REST.
  3. מגדירים את פרטי הכניסה למסד הנתונים למשתמש עם התפקיד alloydbsuperuser. מידע נוסף זמין במאמר תפקיד בקבוצה ב-alloydbsuperuser.

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

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

  • גישה ל-Cloud Storage: נותנים את התפקיד "צפייה באובייקט אחסון" (roles/storage.objectViewer) בקטגוריה של Cloud Storage שמכילה את הנתונים והמטא-נתונים של Iceberg.
  • גישה ל-BigLake (אם משתמשים בקטלוג ייעודי לזמן ריצה של Lakehouse): נותנים את התפקיד "צפייה ב-BigLake" (roles/biglake.viewer) בפרויקט שמארח את הקטלוג של BigLake.

כדי למצוא את חשבון השירות של האשכול, מריצים את הפקודה gcloud beta alloydb clusters describe:

gcloud beta alloydb clusters describe CLUSTER_ID --region=REGION_ID

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

  • ‫CLUSTER_ID: מזהה האשכול ב-AlloyDB.
  • ‫REGION_ID: המיקום של אשכול AlloyDB. לדוגמה, us-east1. לרשימה המלאה של האזורים, ראו מיקומי AlloyDB.

הפלט מכיל את השדה serviceAccountEmail, שהוא חשבון השירות של האשכול הזה. במסוף Google Cloud , חשבון השירות מופיע בדף Cluster overview.

כדי להקצות את התפקיד "צפייה באובייקט אחסון" באמצעות ה-CLI של gcloud, מריצים את הפקודה:

gcloud storage buckets add-iam-policy-binding \
    gs://BUCKET_NAME \
    --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role="roles/storage.objectViewer"

אם אתם משתמשים בקטלוג ייעודי לזמן ריצה של Lakehouse, תנו את התפקיד "צפייה ב-BigLake":

gcloud projects add-iam-policy-binding LAKEHOUSE_PROJECT_ID \
    --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role="roles/biglake.viewer"

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

  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫LAKEHOUSE_PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו מארחים את הקטלוג הייעודי לזמן ריצה של Lakehouse.
  • ‫SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות של האשכול שמצאתם בשדה serviceAccountEmail.

הגדרת דגלים לניהול מסדי נתונים

כדי להפעיל את המנוע מבוסס-העמודות ואת הגישה הישירה ל-Iceberg, אתם יכולים להגדיר דגלים לניהול מסד הנתונים במכונה של AlloyDB. מגדירים את הדגלים הבאים לניהול מסד הנתונים במכונה:

דגל לניהול מסד נתונים ערך תיאור
google_columnar_engine.enabled on מפעיל את המנוע מבוסס-העמודות של AlloyDB.
google_columnar_engine.enable_iceberg_reads on מאפשרת גישה ישירה ל-Iceberg. צריך להפעיל מחדש את המכונה.
google_columnar_engine.memory_size_in_mb SIZE_IN_MB (אופציונלי) מקצה זיכרון למנוע מבוסס-העמודות. מומלץ אם אתם מתכננים לאכלס טבלאות Iceberg בזיכרון.

כדי להגדיר את הדגלים האלה באמצעות ה-CLI של gcloud, מריצים את הפקודה gcloud alloydb instances update:

gcloud alloydb instances update INSTANCE_ID \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --database-flags=google_columnar_engine.enabled=on,google_columnar_engine.enable_iceberg_reads=on

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

  • ‫INSTANCE_ID: המזהה של מכונת AlloyDB.
  • ‫CLUSTER_ID: המזהה של אשכול AlloyDB.
  • ‫REGION_ID: מזהה האזור של אשכול AlloyDB.

יצירת טבלת Iceberg ב-AlloyDB

כדי לחשוף מערך נתונים של Apache Iceberg ב-AlloyDB, צריך להתחבר כמשתמש עם הרשאות alloydbsuperuser. אחר כך יוצרים טבלה באמצעות שיטת הגישה לטבלה USING iceberg.

CREATE TABLE TABLE_NAME (
    COLUMN_NAME DATA_TYPE [, ...]
)
USING iceberg
WITH (
    uri = 'LOCATION_URI'
);

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

  • ‫TABLE_NAME: שם הטבלה שרוצים ליצור ב-AlloyDB.
  • ‫COLUMN_NAME ו-DATA_TYPE: הגדרות העמודות. השמות והסוגים של העמודות חייבים להתאים לסכימה של טבלת Iceberg הבסיסית.
  • ‫LOCATION_URI: המיקום של המטא-נתונים של טבלת Iceberg. מציינים את אחד מהפורמטים הבאים:
    • נתיב ישיר ל-Cloud Storage: gs://BUCKET_NAME/PATH_TO_ICEBERG_TABLE
    • ‫URI של קטלוג ייעודי לזמן ריצה ב-Lakehouse: bl://projects/PROJECT_ID/catalogs/CATALOG_NAME/databases/DATABASE_NAME/tables/TABLE_NAME

דוגמאות

בדוגמאות הבאות מוסבר איך ליצור טבלאות Iceberg ב-AlloyDB.

יצירת טבלה מנתיב ב-Cloud Storage

בדוגמה הבאה נוצרת טבלה בשם customer_orders שמגובה על ידי קבוצת נתונים של Iceberg שנמצאת בקטגוריה של Cloud Storage:

CREATE TABLE customer_orders (
    order_id BIGINT,
    customer_id INT,
    order_status TEXT,
    total_amount DOUBLE PRECISION,
    order_date DATE,
    is_completed BOOLEAN
)
USING iceberg
WITH (
    uri = 'gs://my-iceberg-analytics-bucket/datasets/sales/customer_orders'
);

יצירת טבלה מקטלוג ייעודי לזמן ריצה של Lakehouse

בדוגמה הבאה נוצרת טבלה שמפנה לטבלת Iceberg שמנוהלת על ידי קטלוג ייעודי לזמן ריצה של Lakehouse:

CREATE TABLE customer_orders (
    order_id BIGINT,
    customer_id INT,
    order_status TEXT,
    total_amount DOUBLE PRECISION,
    order_date DATE,
    is_completed BOOLEAN
)
USING iceberg
WITH (
    uri = 'bl://projects/my-analytics-project/catalogs/sales_catalog/databases/retail_db/tables/customer_orders'
);

שליחת שאילתות לנתונים ב-Iceberg

אחרי שיוצרים את הטבלה ב-AlloyDB, אפשר לשלוח אליה שאילתות באמצעות הצהרות SQL סטנדרטיות של SELECT עם הרשאות alloydbsuperuser. אפשר גם לתת למשתמש הרשאות קריאה בלי הרשאות alloydbsuperuser באמצעות ההצהרה GRANT. לדוגמה, GRANT SELECT ON customer_orders TO normal_user.

נתוני שאילתות

בדוגמה הבאה אפשר לראות איך להריץ שאילתה:

SELECT
    customer_id,
    COUNT(order_id) AS total_orders,
    SUM(total_amount) AS total_spent
FROM customer_orders
WHERE is_completed = true
  AND order_date >= '2026-01-01'
GROUP BY customer_id
ORDER BY total_spent DESC
LIMIT 10;

שליחת שאילתות על נתוני Iceberg משותפים עם נתונים תפעוליים

אתם יכולים לשלב נתונים תפעוליים בזמן אמת שנמצאים ב-AlloyDB עם נתונים היסטוריים שנמצאים ב-Iceberg:

SELECT
    c.customer_name,
    c.account_tier,
    COUNT(o.order_id) AS total_orders,
    SUM(o.total_amount) AS historical_spend
FROM customer_orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.is_completed = true
GROUP BY c.customer_name, c.account_tier
ORDER BY historical_spend DESC;

ייבוא נתונים לטבלה מקומית

כדי ליצור עותק עצמאי של נתוני Iceberg שניתן לכתוב בו באחסון המקומי של AlloyDB, מריצים את CREATE TABLE ... AS SELECT, כמו בדוגמה הבאה:

CREATE TABLE local_customer_orders AS
SELECT * FROM customer_orders
WHERE order_date >= '2026-01-01';

האצת שאילתות באמצעות המנוע מבוסס-העמודות

לעומסי עבודה של ניתוח נתונים שדורשים זמן טעינה קצר במיוחד, אתם יכולים לאכלס את טבלת Iceberg ישירות בזיכרון של המנוע מבוסס-העמודות של AlloyDB.

אכלוס טבלת Iceberg במאגר הנתונים העמודתי

כדי לאכלס את כל העמודות של טבלת Iceberg במנוע מבוסס-העמודות של AlloyDB, משתמשים בפונקציה google_columnar_engine_add(). לדוגמה:

SELECT google_columnar_engine_add('customer_orders');

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

SELECT google_columnar_engine_add('customer_orders', 'customer_id,order_status');

מידע נוסף זמין במאמר הוספת עמודות באמצעות פונקציות SQL.

רענון הנתונים שאוכלסו

אם אתם כותבים תמונות מצב חדשות למערך הנתונים הבסיסי של Iceberg, רעננו את הטבלה כדי לטעון מחדש את הנתונים העדכניים למנוע מבוסס-העמודות, כדי שהשאילתות יחזירו תוצאות עדכניות:

SELECT google_columnar_engine_refresh('customer_orders');

הסרת טבלה מהמאגר העמודתי

כדי להסיר טבלת Iceberg מהמאגר העמודתי ולחזור לסריקה ישירה:

SELECT google_columnar_engine_drop('customer_orders');

מעקב אחרי ביצוע השאילתה ואימות הביצוע

אתם יכולים לעקוב אחרי האופן שבו AlloyDB מריץ שאילתות בטבלאות Iceberg, ולבדוק אם השאילתות משתמשות במנוע מבוסס-העמודות בזיכרון. אפשר להשתמש בתצוגות המערכת כדי לבדוק את סטטוס אכלוס המטמון, ולהשתמש ב-EXPLAIN כדי לבדוק את תוכניות הביצוע של השאילתות.

אימות סטטוס השמירה במטמון הטורי

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

SELECT relation_name, status
FROM g_columnar_relations
WHERE relation_name = 'customer_orders';

הערך USABLE של status מאשר שהטבלה נשמרה במטמון בזיכרון של המנוע מבוסס-העמודות.

בדיקת תוכניות הרצה של שאילתות באמצעות EXPLAIN

כדי לבדוק אם שאילתה משתמשת במנוע מבוסס-העמודות, משתמשים בהצהרה EXPLAIN:

EXPLAIN (ANALYZE, COSTS OFF)
SELECT SUM(total_amount)
FROM customer_orders
WHERE is_completed = true;

הפלט מציין ביצוע עמודתי באמצעות צומת Custom Scan (ColumnarScan) בטבלה:

Custom Scan (ColumnarScan) on customer_orders
  Filter: (is_completed = true)

פתרון בעיות

בקטע הזה מוסבר איך לפתור בעיות נפוצות שקשורות להגדרה ולשאילתות של טבלאות Iceberg ב-AlloyDB.

התכונה הניסיונית google_columnar_engine.enable_iceberg_reads מושבתת

הסיבה: הדגל לניהול מסד הנתונים שמאפשר גישה ישירה ל-Iceberg מושבת.

התיקון המומלץ: מגדירים את הדגלים לניהול מסד הנתונים google_columnar_engine.enabled=on ו-google_columnar_engine.enable_iceberg_reads=on במכונה, ומפעילים אותה מחדש.

ההרשאה נדחתה במהלך הגישה ל-Cloud Storage

הסיבה: לחשבון השירות של אשכול AlloyDB אין הרשאת קריאה לקטגוריה של Cloud Storage.

התיקון המומלץ: מקצים את התפקיד roles/storage.objectViewer לחשבון השירות של האשכול בקטגוריה.

ההרשאה נדחתה בגישה לקטלוג ייעודי לזמן ריצה של Lakehouse

הסיבה: לחשבון השירות של אשכול AlloyDB אין גישת קריאה לקטלוג ייעודי לזמן ריצה של Lakehouse.

התיקון המומלץ: מקצים את התפקיד roles/biglake.viewer לחשבון השירות של האשכול בפרויקט Google Cloud שמארח את הקטלוג הייעודי לזמן ריצה של Lakehouse.

אכלוס העמודות נכשל

הסיבה: טבלת Iceberg גדולה יותר מהזיכרון ומהשטח ב-SSD שזמינים במנוע מבוסס-העמודות.

התיקון המומלץ: מגדילים את הזיכרון שמוקצה למנוע מבוסס-העמודות באמצעות הדגל google_columnar_engine.memory_size_in_mb במכונה, או מגדילים את גודל המטמון של האחסון במנוע מבוסס-העמודות באמצעות הדגל google_columnar_engine.storage_cache_size. מידע נוסף זמין במאמר הגדרת מטמון האחסון למנוע מבוסס-העמודות.

הערימה של אכלוס המנוע מבוסס-העמודות מלאה

הודעת השגיאה:

ERROR: Columnar engine population heap is full during population. Set
google_columnar_engine.population_heap_size_in_mb to a bigger value.

הסיבה: הזיכרון שנדרש כדי לאכלס קבוצת שורות גדולה של Parquet חורג ממגבלת ה-heap לאכלוס לכל worker.

התיקון המומלץ: להקטין את מספר ה-workers המקבילים לאכלוס, כדי שתהליך האכלוס יוכל להשתמש ב-heap גדול יותר. בסשן ה-SQL שבו מאכלסים את הטבלה, מגדירים את הדגל google_job_scheduler.max_parallel_workers_per_job לערך 0 לפני שקוראים לפונקציה google_columnar_engine_add():

SET google_job_scheduler.max_parallel_workers_per_job = 0;
SELECT google_columnar_engine_add('TABLE_NAME');

מחליפים את TABLE_NAME בשם של טבלת Iceberg ב-AlloyDB.

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