Usage
view: my_view {
derived_table: {
increment_key: "created_date"
...
}
}
|
היררכיה
increment_key- או - increment_key |
ערך ברירת המחדל
ללא
מקבל
השם של מאפיין LookML שמבוסס על זמן
כללים מיוחדים
הפונקציה increment_key נתמכת רק בטבלאות קבועות, ורק בניבים ספציפיים
|
הגדרה
אם הניב שלכם תומך ב-PDT מצטבר, אתם יכולים ליצור PDT מצטבר בפרויקט. טבלת PDT מצטברת היא טבלה נגזרת מתמידה (PDT) ש-Looker בונה על ידי הוספת נתונים חדשים לטבלה, במקום לבנות מחדש את הטבלה כולה. מידע נוסף זמין בדף התיעוד בנושא טבלאות PDT מצטברות.
increment_key הוא הפרמטר שהופך PDT ל-PDT מצטבר. הוא מציין את מרווח הזמן שבו צריך לשלוף נתונים עדכניים ולצרף אותם ל-PDT. בנוסף ל-increment_key, אפשר לספק באופן אופציונלי את increment_offset כדי לציין את מספר התקופות הקודמות (ברמת הגרנולריות של מפתח התוספת) שנבנות מחדש כדי להתחשב בנתונים שמגיעים באיחור.
ה-
increment_keyשל PDT לא תלוי בטריגר ההתמדה של ה-PDT. במאמר PDT מצטבר מופיעים תרחישים לדוגמה שממחישים את האינטראקציה ביןincrement_key,increment_offsetואסטרטגיית השמירה.הפרמטר
increment_keyפועל רק עם דיאלקטים נתמכים, ורק עם טבלאות שיש להן אסטרטגיית שמירה, כמו PDT וטבלאות מצטברות (שהן סוג של PDT).
ב-increment_key צריך לציין מאפיין LookML מבוסס-זמן:
- במקרה של טבלאות PDT שמבוססות על LookML, ה-
increment_keyצריך להתבסס על מאפיין LookML שמוגדר בתצוגה שבה מוגדר ה-explore_sourceשל ה-PDT. דוגמה מופיעה בקטע יצירת PDT מצטבר מבוסס-LookML בדף הזה. - בטבלאות מצטברות, ה-
increment_keyצריך להתבסס על מאפיין LookML שמוגדר בתצוגה שעליה מבוסס הניתוח של הטבלה המצטברת. דוגמה מופיעה בקטע יצירת טבלת צבירה מצטברת בדף הזה. - במקרה של PDT מבוסס-SQL,
increment_keyחייב להתבסס על מאפיין LookML שמוגדר בקובץ התצוגה של ה-PDT. דוגמה מופיעה בקטע יצירת PDT מצטבר מבוסס-SQL בדף הזה.
בנוסף, הפרמטר increment_key צריך להיות:
- זמן מוחלט קטום, כמו יום, חודש, שנה, רבעון פיסקאלי וכן הלאה. אין תמיכה בפרקי זמן כמו יום בשבוע.
- חותמת זמן שעולה בצורה צפויה עם נתונים חדשים, כמו תאריך יצירת ההזמנה. במילים אחרות, צריך להשתמש בחותמת זמן כמפתח מצטבר רק אם הנתונים החדשים ביותר שנוספו לטבלה כוללים גם את חותמת הזמן העדכנית ביותר. חותמת זמן כמו יום הולדת של משתמש לא תפעל כמפתח מצטבר, כי חותמת זמן של יום הולדת לא גדלה באופן מהימן עם הוספת משתמשים חדשים לטבלה.
יצירת PDT מצטבר שמבוסס על LookML
כדי להפוך PDT מבוסס LookML (מקורי) ל-PDT מצטבר, משתמשים בפרמטר increment_key כדי לציין את השם של מאפיין LookML מבוסס-זמן. צריך להגדיר את המאפיין בתצוגה המפורטת שעליה מבוסס ה-PDT explore_source.
לדוגמה, קובץ תצוגה של PDT שמבוסס על LookML, עם פרמטר LookML explore_source. ה-PDT נוצר מתוך flights ניתוח הנתונים, שבמקרה הזה מבוסס על התצוגה flights:
view: flights_lookml_incremental_pdt {
derived_table: {
indexes: ["id"]
increment_key: "departure_date"
increment_offset: 3
datagroup_trigger: flights_default_datagroup
distribution_style: all
explore_source: flights {
column: id {}
column: carrier {}
column: departure_date {}
}
}
dimension: id {
type: number
}
dimension: carrier {
type: string
}
dimension: departure_date {
type: date
}
}
הטבלה הזו תיווצר במלואה בפעם הראשונה שתופעל עליה שאילתה. לאחר מכן, הטבלה תורכב מחדש במרווחים של יום אחד (increment_key: departure_date), ותחזור שלושה ימים אחורה (increment_offset: 3).
המאפיין departure_date הוא למעשה מסגרת הזמן של קבוצת המאפיינים datedeparture. (במאמר בנושא פרמטר dimension_group מוסבר איך פועלות קבוצות של מאפיינים). קבוצת המאפיינים ופרק הזמן מוגדרים בתצוגה flights, שהיא explore_source עבור ה-PDT הזה. כך מוגדרת קבוצת המאפיינים departure בקובץ התצוגה המפורטת flights:
...
dimension_group: departure {
type: time
timeframes: [
raw,
date,
week,
month,
year
]
sql: ${TABLE}.dep_time ;;
}
...
יצירה של PDT מצטבר שמבוסס על SQL
מומלץ להשתמש בטבלאות נגזרות שמבוססות על LookML (טבלאות נגזרות מקוריות) כבסיס ל-PDT מצטברות, ולא בטבלאות נגזרות שמבוססות על SQL. טבלאות נגזרות מבוססות LookML מטפלות באופן מובנה בלוגיקה המורכבת שנדרשת לטבלאות PDT מצטברות. PDT-ים מבוססי SQL מסתמכים על לוגיקה שנוצרה באופן ידני, ולכן הם מועדים לשגיאות כשמשתמשים בהם עם פונקציונליות מורכבת מאוד.
כדי להגדיר PDT מבוסס-SQL מצטבר, משתמשים ב-increment_key וב-increment_offset (אם רוצים), כמו במקרה של PDT מבוסס-LookML. עם זאת, מכיוון ש-PDT מבוסס-SQL לא מבוסס על קובצי תצוגה של LookML, יש דרישות נוספות כדי להפוך PDT מבוסס-SQL ל-PDT מצטבר:
- מפתח הגידול חייב להתבסס על מאפיין LookML מבוסס-זמן שמוגדר בקובץ התצוגה של ה-PDT.
- צריך לספק מסנן
Liquid ב-PDT כדי לקשר את מפתח הגידול לעמודת הזמן במסד הנתונים שעליה מבוסס מפתח הגידול. במסנן{% incrementcondition %} צריך לציין את שם העמודה במסד הנתונים, ולא כינוי SQL או שם של מימד שמבוסס על העמודה (ראו את הדוגמה הבאה).{% incrementcondition %}
הפורמט הבסיסי של מסנן Liquid הוא:
WHERE {% incrementcondition %} database_table_name.database_time_column {% endincrementcondition %}
לדוגמה, הנה קובץ התצוגה של PDT שמבוסס על SQL ונבנה מחדש במרווחים של יום אחד (increment_key: "dep_date"), שבו נתונים משלושת הימים האחרונים יתווספו לטבלה כשהיא תיבנה מחדש (increment_offset: 3):
view: sql_based_incremental_date_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "dep_date"
increment_offset: 3
distribution_style: all
sql: SELECT
flights.id2 AS "id",
flights.origin AS "origin",
DATE(flights.leaving_time ) AS "departure"
FROM public.flights AS flights
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
;;
}
dimension_group: dep {
type: time
timeframes: [date, week, month, year]
datatype: date
sql: ${TABLE}.departure
;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
כמה נקודות חשובות לגבי הדוגמה הזו:
- הטבלה הנגזרת מבוססת על הצהרת SQL. הצהרת ה-SQL יוצרת עמודה בטבלה הנגזרת שמבוססת על העמודה
flights.leaving_timeבמסד הנתונים. השם החלופי של העמודה הואdeparture. - קובץ התצוגה של ה-PDT מגדיר קבוצת מאפיינים בשם
dep.- הפרמטר
sqlשל קבוצת המאפיינים מציין שהקבוצה מבוססת על העמודהdepartureבטבלה הנגזרת. - הפרמטר
timeframesשל קבוצת המאפיינים כולל אתdateכטווח זמן.
- הפרמטר
- המאפיין
increment_keyבטבלה הנגזרת משתמש במאפייןdep_date, שהוא מאפיין שמבוסס על טווח הזמןdateשל קבוצת המאפייניםdep. (במאמר בנושא פרמטרdimension_groupמוסבר איך פועלות קבוצות של מאפיינים). - מסנן ה-Liquid
משמש לקישור מפתח הגידול לעמודה{% incrementcondition %}flights.leaving_timeבמסד הנתונים.- במאפיין
צריך לציין את השם של עמודה{% incrementcondition %}TIMESTAMPבמסד הנתונים (או שהוא צריך להחזיר עמודהTIMESTAMPבמסד הנתונים). - הביטוי
צריך להיות מוערך ביחס למה שזמין בסעיף{% incrementcondition %}FROMשמגדיר את ה-PDT, כמו עמודות מהטבלה שצוינה בסעיףFROM. הביטוי לא יכול להתייחס לתוצאה של ההצהרה{% incrementcondition %}SELECT, כמו כינוי שניתן לעמודה בהצהרת ה-SQL, או לשם של מאפיין שמבוסס על העמודה. בדוגמה הזו, הוא{% incrementcondition %}flights.leaving_time. מכיוון שהפסוקיתFROMמציינת את הטבלהflights, הביטוי יכול להתייחס לעמודות מהטבלה{% incrementcondition %}flights. - הערך של
צריך להצביע על אותה עמודה במסד הנתונים שמשמשת כמפתח הגידול. בדוגמה הזו, מפתח הגידול הוא{% incrementcondition %}dep_date, מאפיין שמוגדר על ידי העמודהdepartureב-PDT, שהוא כינוי לעמודהflights.leaving_timeבמסד הנתונים. לכן, המסנן מפנה אלflights.leaving_time:
- במאפיין
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
אפשר להוסיף לפסוקית WHERE כדי ליצור מסננים אחרים. לדוגמה, אם הטבלה במסד הנתונים כוללת נתונים מלפני שנים רבות, אפשר ליצור מסנן כך שהבנייה הראשונית של ה-PDT תתבסס רק על נתונים מתאריך מסוים ואילך. ה-PDT הבא WHERE יוצר נתונים מתאריך אחרי 1 בינואר 2020:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
AND flights.leaving_time > '2020-01-01'
אפשר גם להשתמש בפסוקית WHERE כדי לנתח נתונים ב-SQL לסימן זמן, ואז לתת להם שם בדוי. לדוגמה, ה-PDT המצטבר הבא משתמש במרווח של 15 דקות שמבוסס על text_column, שהוא נתון מחרוזת שנותח לנתון חותמת זמן:
view: sql_based_incremental_15min_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_minute15"
increment_offset: 1
sql: SELECT PARSE_TIMESTAMP("%c", flights.text_column) as parsed_timestamp_column,
flights.id2 AS "id",
flights.origin AS "origin",
FROM public.flights AS flights
WHERE {% incrementcondition %} PARSE_TIMESTAMP("%c", flights.text_column)
{% endincrementcondition %} ;;
}
dimension_group: event {
type: time
timeframes: [raw, minute15, hour, date, week, month, year]
datatype: timestamp
sql: ${TABLE}.parsed_timestamp_column ;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
אפשר להשתמש בכינוי ל-SQL בהגדרה של קבוצת המאפיינים sql, אבל צריך להשתמש בביטוי ה-SQL בסעיף WHERE. לאחר מכן, מכיוון ש-minute15 הוגדר כטווח זמן בקבוצת המאפיינים event, אפשר להשתמש ב-event_minute15 כמפתח הגידול כדי לקבל גידול של 15 דקות עבור ה-PDT.
יצירת טבלת צבירה מצטברת
כדי ליצור טבלת צבירה מצטברת, מוסיפים את increment_key ואת increment_offset (אופציונלי) לפרמטר materialization של הפרמטר aggregate_table. משתמשים בפרמטר increment_key כדי לציין את השם של מאפיין LookML מבוסס-זמן. צריך להגדיר את המאפיין בתצוגה שעליה מבוסס הניתוח של טבלת הצבירה.
לדוגמה, הטבלה המצטברת הזו מבוססת על accidents Explore, שבמקרה הזה מבוסס על התצוגה accidents. הטבלה המסכמת נבנית מחדש במרווחים של שבוע (increment_key: event_week), עד לשבועיים אחורה (increment_offset: 2):
explore: accidents {
. . .
aggregate_table: accidents_daily {
query: {
dimensions: [event_date, id, weather_condition]
measures: [count]
}
materialization: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_week"
increment_offset: 2
}
}
}
מפתח הגידול משתמש במאפיין event_week, שמבוסס על פרק הזמן week מקבוצת המאפיינים event. (במאמר בנושא פרמטר dimension_group מוסבר איך פועלות קבוצות של מאפיינים). קבוצת המאפיינים וטווח הזמן מוגדרים בתצוגה accidents:
. . .
view: accidents {
. . .
dimension_group: event {
type: time
timeframes: [
raw,
date,
week,
year
]
sql: ${TABLE}.event_date ;;
}
. . .
}
דברים שכדאי לקחת בחשבון
אופטימיזציה של טבלת המקור לשאילתות שמבוססות על זמן
מוודאים שטבלת המקור של ה-PDT המצטבר מותאמת לשאילתות מבוססות-זמן. באופן ספציפי, בעמודה מבוססת-הזמן שמשמשת כמפתח מצטבר צריך להיות מוגדרת אסטרטגיית אופטימיזציה, כמו חלוקה למחיצות, sortkeys, indexes או כל אסטרטגיית אופטימיזציה אחרת שנתמכת בניב שלכם. מומלץ מאוד לבצע אופטימיזציה של טבלת המקור, כי בכל פעם שמעדכנים את הטבלה המצטברת, Looker שולף שאילתה מטבלת המקור כדי לקבוע את הערכים העדכניים ביותר של העמודה שמבוססת על זמן ומשמשת כמפתח מצטבר. אם טבלת המקור לא מותאמת לשאילתות האלה, השאילתה של Looker לקבלת הערכים האחרונים עלולה להיות איטית ויקרה.
ניבי SQL נתמכים של מסדי נתונים ל-PDT מצטבר
כדי ש-Looker יתמוך בטבלאות PDT מצטברות בפרויקט Looker, הניב של מסד הנתונים צריך לתמוך בפקודות Data Definition Language (DDL) שמאפשרות מחיקה והוספה של שורות.
בטבלה הבאה מפורטים הניבים שתומכים ב-PDT מצטבר בגרסה האחרונה של 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 | |
| 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+ | |
| 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 |