Usage
view: my_view {
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
|
היררכיה
sql_trigger_value |
ערך ברירת המחדל
ללא
אישור
הצהרת SQL שמובילה לשורה אחת ולעמודה אחת
|
הגדרה
במקום זאת, מומלץ להשתמש ב-
datagroupוב-datagroup_trigger, כפי שמתואר בדף התיעוד בנושא שמירת שאילתות במטמון.
sql_trigger_value מאפשרת להפעיל את היצירה מחדש של טבלה נגזרת מתמידה על סמך הצהרת SQL שאתם מספקים. אם התוצאה של הצהרת ה-SQL שונה מהערך הקודם, ה-PDT נוצר מחדש.
הפרמטר sql_trigger_value יתייחס רק לשורה ולעמודה הראשונות ב-SQL שתכתבו. לכן, אנחנו ממליצים מאוד לכתוב את השאילתה כך שהיא תחזיר רק ערך אחד (שורה אחת ועמודה אחת). כך נמנע בלבול אצל מפתחים בעתיד, וניבים של SQL שלא תומכים בסטרימינג לא יטענו לזיכרון מערכי תוצאות גדולים.
כברירת מחדל, כל חמש דקות Looker מריץ את שאילתת ה-SQL שכתבתם, כל עוד לא מתבצע תהליך בנייה של טבלה נגזרת מתמידה אחרת. אם התוצאות של שאילתת ה-SQL משתנות, Looker יוצר מחדש את הטבלה הנגזרת. אפשר לשנות את לוח הזמנים הזה לפי הצורך באמצעות ההגדרה PDT And Datagroup Maintenance Schedule בהגדרות האדמין של Looker.
לדוגמה, נניח שאתם מריצים MySQL והשתמשתם בפקודה:
sql_trigger_value: SELECT CURDATE() ;;
התוצאות ייראו כך:
| sql_trigger_value Run Time | תוצאה של sql_trigger_value |
|---|---|
| 2015-01-01 00:00 | 2015-01-01 |
| 2015-01-01 00:05 | 2015-01-01 |
| 2015-01-01 00:10 | 2015-01-01 |
| ... | ... |
| 2015-01-01 23:55 | 2015-01-01 |
| 2015-01-02 00:00 | 2015-01-02 |
| 2015-01-02 00:05 | 2015-01-02 |
אפשר לראות שהערך של שאילתת ה-SQL הזו ישתנה פעם ביום בחצות, כך שהטבלה הנגזרת תיווצר מחדש בזמנים האלה.
Looker לא מבצע המרה של אזור הזמן עבור
sql_trigger_value. כשמשתמשים ב-sql_trigger_valueכדי להפעיל בנייה מחדש של PDT בחצות או בשעה ספציפית ביום, הטריגר יופעל באזור הזמן שהוגדר למסד הנתונים.
אם האדמין העניק לכם את ההרשאה develop, אתם יכולים לכפות על טבלת נתונים נגזרים ליצור מחדש את הנתונים לפני ששאילתת sql_trigger_value השתנתה. אחרי שמריצים שאילתה, לוחצים על סמל גלגל השיניים של פעולות בדוח ובוחרים באפשרות בנייה מחדש של טבלאות נגזרות והרצה.
פרטים נוספים על האפשרות Rebuild Derived Tables & Run זמינים בדף התיעוד בנושא טבלאות נגזרות ב-Looker.
דוגמאות
יצירת PDT ב-MySQL שמתבצע בו בנייה מחדש פעם ביום בחצות:
view: clean_events {
derived_table: {
sql:
SELECT *
FROM events
WHERE type NOT IN ('test', 'staff') ;;
sql_trigger_value: SELECT CURDATE() ;;
}
}
בקטעים הבאים מוצג ה-SQL שמשמש לשיטות שונות של בנייה מחדש של PDT בניבים שונים:
Google BigQuery
| לוח הזמנים הרצוי להפקה מחדש | קוד ה-SQL לשימוש |
|---|---|
| פעם ביום בחצות לפי שעון החוף המערבי | SELECT FORMAT_TIMESTAMP('%F', CURRENT_TIMESTAMP(), 'America/Los_Angeles') |
| פעם ביום בשעה ספציפית | SELECT FLOOR(((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) - 60*60*3)/(60*60*24)) |
| פעמיים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| שלוש פעמים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| כל שעה | SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP()) |
| כל שעתיים | SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60)) |
| אף פעם לא לעדכן את הנתונים | SELECT 1 |
MySQL
| לוח הזמנים הרצוי להפקה מחדש | קוד ה-SQL לשימוש |
|---|---|
| פעם ביום בחצות | SELECT CURDATE() |
| פעם ביום בשעה ספציפית לפי זמן אוניברסלי מתואם (UTC) | SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24)) |
| פעמיים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| שלוש פעמים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| כשמתבצע עדכון של טבלה מסוימת | SELECT COUNT(*) FROM table |
| כל שעה | SELECT HOUR(CURTIME()) |
| כל שעתיים לפי זמן אוניברסלי מתואם (UTC) | SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60)) |
| אף פעם לא לעדכן את הנתונים | SELECT 1 |
Amazon Redshift
| לוח הזמנים הרצוי להפקה מחדש | קוד ה-SQL לשימוש |
|---|---|
| פעם ביום בחצות | SELECT CURRENT_DATE |
| פעם ביום בשעה ספציפית | SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24)) |
| פעמיים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| שלוש פעמים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| כשמתבצע עדכון של טבלה מסוימת | SELECT COUNT(*) FROM table |
| כל שעה | SELECT DATE_PART('hour', GETDATE()) |
| כל שעתיים | SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60)) |
| אף פעם לא לעדכן את הנתונים | SELECT 1 |
PostgreSQL
| לוח הזמנים הרצוי להפקה מחדש | קוד ה-SQL לשימוש |
|---|---|
| פעם ביום בחצות | SELECT CURRENT_DATE |
| פעם ביום בשעה ספציפית | SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24)) |
| פעמיים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| שלוש פעמים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| כשמתבצע עדכון של טבלה מסוימת | SELECT COUNT(*) FROM table |
| כל שעה | SELECT DATE_PART('hour', NOW()) |
| כל שעתיים | SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60)) |
| אף פעם לא לעדכן את הנתונים | SELECT 1 |
פתית שלג
| לוח הזמנים הרצוי להפקה מחדש | קוד ה-SQL לשימוש |
|---|---|
| פעם ביום בחצות | SELECT CURRENT_DATE() |
| פעם ביום בשעה ספציפית לפי זמן אוניברסלי מתואם (UTC) | SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24)) |
| פעמיים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 4am and 6pm'
ELSE 'between 6pm and 4am'
END |
| שלוש פעמים ביום בשעות ספציפיות | SELECT CASE
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 4 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 9
THEN 'between 4am and 9am'
WHEN EXTRACT(HOUR FROM CURRENT_TIMESTAMP) > 9 AND EXTRACT(HOUR FROM CURRENT_TIMESTAMP) < 18
THEN 'between 9am and 6pm'
ELSE 'between 6pm and 4am'
END |
| כשמתבצע עדכון של טבלה מסוימת | SELECT COUNT(*) FROM table |
| כל שעה | SELECT HOUR(CURRENT_TIME()) |
| כל שעתיים לפי זמן אוניברסלי מתואם (UTC) | SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60)) |
| אף פעם לא לעדכן את הנתונים | SELECT 1 |
אתגרים נפוצים
כדי להשתמש ב-sql_trigger_value, צריך להגדיר טבלאות נגזרות מתמידות (PDT)
השימוש ב-sql_trigger_value יגרום לשגיאות אימות של LookML, אלא אם הפעלתם את ההגדרה 'התמדה של טבלאות נגזרות' בהגדרות של חיבור מסד הנתונים. רוב הלקוחות כן מגדירים טבלאות נגזרות קבועות כשהם מגדירים חיבור למסד נתונים בפעם הראשונה. החריג הנפוץ ביותר לכלל הזה הוא לקוחות שמקשרים את Looker ל-PostgreSQL משני שניתן להחלפה חמה ולקריאה בלבד.
ההתנהגות של sql_trigger_value שונה במצב פיתוח ובמצב ייצור
sql_trigger_value אמור לפעול כצפוי במצב ייצור. במצב פיתוח, כל הטבלאות הנגזרות מטופלות כאילו נעשה שימוש ב-persist_for: 24 hours, ללא קשר להגדרה שהטמעתם. מידע נוסף זמין בקטע טבלאות שנשמרות במצב פיתוח בדף התיעוד טבלאות נגזרות ב-Looker.