sql_trigger_value

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))

מחליפים את '3' בשעה ביום שבה רוצים שהחידוש יתבצע
פעמיים ביום בשעות ספציפיות
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

מחליפים את המספרים 4 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
שלוש פעמים ביום בשעות ספציפיות
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

מחליפים את המספרים 4, 9 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
כל שעה
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP())
כל שעתיים
SELECT FLOOR((TIMESTAMP_DIFF(CURRENT_TIMESTAMP(),'1970-01-01 00:00:00',SECOND)) / (2*60*60))

אפשר להחליף את הספרה 2 במספר השעות שרוצים להגדיר בין כל הפקה מחדש
אף פעם לא לעדכן את הנתונים
SELECT 1

MySQL

לוח הזמנים הרצוי להפקה מחדש קוד ה-SQL לשימוש
פעם ביום בחצות
SELECT CURDATE()
פעם ביום בשעה ספציפית לפי זמן אוניברסלי מתואם (UTC)
SELECT FLOOR((UNIX_TIMESTAMP(NOW()) - 60*60*3)/(60*60*24))

מחליפים את '3' בשעה ביום שבה רוצים שהחידוש יתבצע
פעמיים ביום בשעות ספציפיות
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

מחליפים את המספרים 4 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
שלוש פעמים ביום בשעות ספציפיות
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

מחליפים את המספרים 4, 9 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
כשמתבצע עדכון של טבלה מסוימת
SELECT COUNT(*) FROM table
כל שעה
SELECT HOUR(CURTIME())
כל שעתיים לפי זמן אוניברסלי מתואם (UTC)
SELECT FLOOR(UNIX_TIMESTAMP() / (2*60*60))

אפשר להחליף את הספרה 2 במספר השעות שרוצים להגדיר בין כל הפקה מחדש
אף פעם לא לעדכן את הנתונים
SELECT 1

Amazon Redshift

לוח הזמנים הרצוי להפקה מחדש קוד ה-SQL לשימוש
פעם ביום בחצות
SELECT CURRENT_DATE
פעם ביום בשעה ספציפית
SELECT FLOOR((EXTRACT(epoch from GETDATE()) - 60*60*3)/(60*60*24))

מחליפים את '3' בשעה ביום שבה רוצים שהחידוש יתבצע
פעמיים ביום בשעות ספציפיות
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

מחליפים את המספרים 4 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
שלוש פעמים ביום בשעות ספציפיות
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

מחליפים את המספרים 4, 9 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
כשמתבצע עדכון של טבלה מסוימת
SELECT COUNT(*) FROM table
כל שעה
SELECT DATE_PART('hour', GETDATE())
כל שעתיים
SELECT FLOOR(EXTRACT(epoch from GETDATE()) / (2*60*60))

אפשר להחליף את הספרה 2 במספר השעות שרוצים להגדיר בין כל הפקה מחדש
אף פעם לא לעדכן את הנתונים
SELECT 1

PostgreSQL

לוח הזמנים הרצוי להפקה מחדש קוד ה-SQL לשימוש
פעם ביום בחצות
SELECT CURRENT_DATE
פעם ביום בשעה ספציפית
SELECT FLOOR((EXTRACT(epoch from NOW()) - 60*60*3)/(60*60*24))

מחליפים את '3' בשעה ביום שבה רוצים שהחידוש יתבצע
פעמיים ביום בשעות ספציפיות
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

מחליפים את המספרים 4 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
שלוש פעמים ביום בשעות ספציפיות
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

מחליפים את המספרים 4, 9 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
כשמתבצע עדכון של טבלה מסוימת
SELECT COUNT(*) FROM table
כל שעה
SELECT DATE_PART('hour', NOW())
כל שעתיים
SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60))

אפשר להחליף את הספרה 2 במספר השעות שרוצים להגדיר בין כל הפקה מחדש
אף פעם לא לעדכן את הנתונים
SELECT 1

פתית שלג

לוח הזמנים הרצוי להפקה מחדש קוד ה-SQL לשימוש
פעם ביום בחצות
SELECT CURRENT_DATE()
פעם ביום בשעה ספציפית לפי זמן אוניברסלי מתואם (UTC)
SELECT FLOOR((DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) - 60*60*3)/(60*60*24))

מחליפים את '3' בשעה ביום שבה רוצים שהחידוש יתבצע
פעמיים ביום בשעות ספציפיות
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

מחליפים את המספרים 4 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
שלוש פעמים ביום בשעות ספציפיות
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

מחליפים את המספרים 4, 9 ו-18 בשעות ביום שבהן רוצים שהחידוש יתבצע
כשמתבצע עדכון של טבלה מסוימת
SELECT COUNT(*) FROM table
כל שעה
SELECT HOUR(CURRENT_TIME())
כל שעתיים לפי זמן אוניברסלי מתואם (UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))

אפשר להחליף את הספרה 2 במספר השעות שרוצים להגדיר בין כל הפקה מחדש
אף פעם לא לעדכן את הנתונים
SELECT 1

אתגרים נפוצים

כדי להשתמש ב-sql_trigger_value, צריך להגדיר טבלאות נגזרות מתמידות (PDT)

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

ההתנהגות של sql_trigger_value שונה במצב פיתוח ובמצב ייצור

sql_trigger_value אמור לפעול כצפוי במצב ייצור. במצב פיתוח, כל הטבלאות הנגזרות מטופלות כאילו נעשה שימוש ב-persist_for: 24 hours, ללא קשר להגדרה שהטמעתם. מידע נוסף זמין בקטע טבלאות שנשמרות במצב פיתוח בדף התיעוד טבלאות נגזרות ב-Looker.