materialized_view

שימוש

view: my_view {
  derived_table: {
    materialized_view: yes
    ...
  }
}
היררכיה
materialized_view
ערך ברירת המחדל
no

אמצעי תשלום מקובלים
ערך בוליאני (yes או no)

כללים מיוחדים
‫materialized_view נתמכת רק בדיאלקטים ספציפיים

הגדרה

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

תצוגות מהותיות מאפשרות לכם להשתמש בפונקציונליות של מסד הנתונים כדי לשמור טבלאות נגזרות בפרויקט Looker. אם הדיאלקט של מסד הנתונים תומך בתצוגות מהותיות והחיבור ל-Looker מוגדר עם האפשרות טבלאות נגזרות מתמידות (PDT), אתם יכולים ליצור תצוגה מהותית על ידי ציון materialized_view: yes לטבלה נגזרת. יש תמיכה בתצוגות מהותיות גם בטבלאות נגזרות מבוססות LookML וגם בטבלאות נגזרות שמבוססות על SQL.

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

  • בטבלאות PDT, אסטרטגיית השמירה מוגדרת ב-Looker, והשמירה מנוהלת על ידי Looker.
  • בתצוגות מהותיות, מסד הנתונים אחראי לתחזוקה ולרענון של הנתונים בטבלה.

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

אם לטבלה נגזרת עם הצהרת materialized_view: yes יש גם פרמטר datagroup,‏ sql_trigger_value או persist_for, ההצהרה materialized_view: yes תקבל עדיפות.

דוגמה

הטבלה הנגזרת e_flights_pdt כוללת את ההצהרה materialized_view: yes, ולכן נוצרת תצוגה מהותית בסכימת הבסיס של מסד הנתונים:


view: e_flights_pdt {
  derived_table: {
    materialized_view: yes
    explore_source: ontime {
      column: flight_num {}
      column: carrier {}
      column: arr_date {}
    }
  }
  dimension: flight_num {}
  dimension: carrier {}
  dimension: arr_date {
    type: date
  }
}

כש-Looker יוצר את התצוגה המהותית

‫Looker יוצר תצוגות מהותיות באותו אופן כמו טבלאות PDT אחרות. אם יוצרים את התצוגה המהותית ומריצים עליה שאילתה ב-Development Mode, ‏ Looker ייצור גרסת פיתוח של התצוגה המהותית, שאפשר להשתמש בה גם בסביבת הייצור. פרטים נוספים זמינים בקטע טבלאות קבועות במצב פיתוח בדף התיעוד טבלאות נגזרות ב-Looker.

אחרת, התצוגה המהותית נוצרת במהלך המחזור הבא של Looker regenerator, אחרי ש-LookML של הטבלה הנגזרת המשויכת נפרס בסביבת הייצור באמצעות materialized_view: yes.

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

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

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

אדמינים או משתמשים עם ההרשאה see_pdts יכולים לקבל את השם של תצוגת מסד הנתונים היציבה מהמודל PDT Details בדף Persistent Derived Tables בקטע Admin ב-Looker.

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


SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db

הדרישות לגבי תצוגות מהותיות

כדי להשתמש בתצוגות מהותיות בפרויקט Looker, צריך:

  • דיאלקט של מסד נתונים שתומך בתצוגות מהותיות. רשימת הניבים שתומכים בתצוגות מהותיות מופיעה בקטע תמיכה בניבים בתצוגות מהותיות בדף הזה.
  • סכימת בסיס במסד הנתונים. זו יכולה להיות כל סכימה במסד הנתונים, אבל מומלץ ליצור סכימה חדשה שתשמש רק למטרה הזו. מנהל מסד הנתונים צריך להגדיר את הסכימה עם הרשאת כתיבה למשתמש של מסד הנתונים של Looker.
  • חיבור Looker שמוגדר עם האפשרות טבלאות נגזרות מתמידות (PDT). בדרך כלל מגדירים את זה כשמגדירים את החיבור ל-Looker בפעם הראשונה (הוראות לניב של מסד הנתונים שלכם מפורטות בדף התיעוד Looker dialects), אבל אפשר גם להפעיל טבלאות PDT בחיבור אחרי ההגדרה הראשונית.
  • חיבור ל-Looker עם הרשאת CREATE TABLE לסכימה הזמנית במסד הנתונים. זו אותה הרשאה שנדרשת ליצירת טבלאות PDT. בנוסף, כדי ליצור את תצוגת מסד הנתונים היציבה של התצוגה המהותית, לחיבור צריכות להיות הרשאות CREATE VIEW לסכימה הזמנית במסד הנתונים. אתם יכולים לבדוק את החיבור כדי לוודא שיש לו את ההרשאות הבאות:
    • אם טבלאות PDT מופעלות בחיבור, ולחיבור יש את ההרשאה CREATE TABLE, בדיקת החיבור תחזיר תוצאה כמו Can use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db".
    • אם החיבור מאפשר תצוגות יציבות ויש לו את ההרשאה CREATE VIEW, בדיקת החיבור תחזיר תוצאה כמו Can use stable views in temp schema "docsexamples_scratch" in database "flightstats".

שיקולים חשובים לגבי תצוגות מהותיות

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

  • בחלק מהניבים יש מגבלות על תצוגות מהותיות, כמו מרווחי זמן מקסימליים שמוגדרים כברירת מחדל לרענון ותמיכה בצירופים. ‫Looker לא יוצר שגיאות LookML לגבי פונקציונליות ספציפית לניב של תצוגות מהותיות. במקום זאת, Looker ייצור שגיאה אם התצוגה המהותית לא תיווצר, כאירוע ביומן האירועים של ה-PDT או כשגיאת זמן ריצה אם תנסו לשלוח שאילתה לתצוגה המהותית. כדאי לעיין במסמכי התיעוד של הניב שלכם לגבי המגבלות של תצוגות מהותיות.
  • בניבים מסוימים, כששולחים שאילתות לתצוגות מהותיות, המערכת בודקת אם השאילתה עדכנית. הבדיקה הזו עלולה לגרום לעיכוב קל בקבלת תוצאות השאילתה. כדי לבדוק אם זה המצב בניב שלכם, עיינו במסמכי התיעוד של הניב.
  • בחלק מהניבים, המערכת תנסה לרענן את התצוגה המהותית באופן מצטבר במקום לבנות אותה מחדש באופן מלא. למידע נוסף, עיינו במסמכי התיעוד של הניב.
  • אם התצוגה המהותית שלכם משתמשת במסד נתונים טבלאי שהוסר ממסד הנתונים, יכול להיות שלא תוכלו לשלוח שאילתות לתצוגה המהותית, והמערכת לא תצליח ליצור גרסאות חדשות.
  • אם לטבלה נגזרת עם הצהרת materialized_view: yes יש גם פרמטר datagroup,‏ sql_trigger_value או persist_for, ההצהרה materialized_view: yes תקבל עדיפות.
  • תצוגות מהותיות תומכות באותם פרמטרים ספציפיים לניב שנתמכים בטבלאות נגזרות באופן כללי, כמו חלוקה למחיצות, sortkeys ואינדקסים.
  • במקרה של טבלאות נגזרות מדורגות, תצוגות מהותיות יכולות להיות תלויות ב-PDT של Looker, בכפוף לאזהרות הבאות:
    • אי אפשר להשתמש בטבלה נגזרת עם אסטרטגיית השמירה persist_for בהגדרה של טבלה נגזרת עם materialized_view: yes. בתצוגות מהותיות, טבלת המקור של התצוגה המהותית חייבת תמיד להיות נוכחת במסד הנתונים. טבלאות נגזרות של persist_for נמחקות ממסד הנתונים אחרי פרק הזמן שצוין בפרמטר persist_for, כך שלא מובטח שהן יהיו קיימות במסד הנתונים.
    • טבלאות PDT נבנות מחדש עם שם ייחודי, כך שאם תצוגה מהותית משתמשת ב-PDT בהגדרה שלה, התצוגה המהותית תתעדכן כדי להצביע על הגרסה החדשה של ה-PDT בכל פעם שה-PDT נבנה מחדש. המשמעות היא שהתצוגה המהותית תיבנה מחדש מאפס אם התלות תיבנה מחדש, וזה עלול להשפיע על הביצועים. במקרה כזה, עדיף להפנות למסד נתונים טבלאי שמוגדר להוספה בלבד, או להפנות ל-PDT מצטבר שמוגדר באמצעות Looker.

תמיכה בניבים בתצוגות מהותיות

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

ניב יש תמיכה?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica