sql_trigger_value

사용

view: my_view {
  derived_table: {
    sql_trigger_value: SELECT CURDATE() ;;
    ...
  }
}
계층 구조
sql_trigger_value
기본값
없음

허용
하나의 행과 하나의 열을 생성하는 SQL 문

정의

대신 datagroupdatagroup_trigger를 사용하는 것이 좋습니다. 이는 캐싱 쿼리 문서 페이지에 설명되어 있습니다.

sql_trigger_value를 사용하면 제공된 SQL 문을 기반으로 영구 파생 테이블의 재생성을 트리거할 수 있습니다. SQL 문의 결과가 이전 값과 다른 경우 PDT가 다시 생성됩니다.

sql_trigger_value 매개변수는 작성하는 SQL의 첫 번째 행과 열만 고려합니다. 따라서 쿼리를 작성하여 하나의 값 (하나의 행과 하나의 열)만 반환하는 것이 좋습니다. 이렇게 하면 향후 개발자의 혼동을 방지하고 스트리밍되지 않는 SQL 언어가 대규모 결과 집합을 메모리에 로드하는 것을 방지할 수 있습니다.

기본적으로 다른 영구 파생 테이블이 빌드되는 중이 아닌 한 Looker는 5분마다 작성한 SQL 쿼리를 실행합니다. SQL 쿼리의 결과가 변경되면 Looker는 파생 테이블을 다시 생성합니다. Looker의 관리자 설정에서 PDT 및 데이터 그룹 유지보수 일정 설정을 사용하여 이 일정을 적절하게 변경할 수 있습니다.

예를 들어 MySQL을 실행하고 다음을 사용한다고 가정해 보겠습니다.

    sql_trigger_value: SELECT CURDATE() ;;

결과는 다음과 같습니다.

sql_trigger_value 런타임 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 쿼리를 실행한 후 작업 살펴보기 톱니바퀴 메뉴에서 파생 테이블 다시 빌드 및 실행 옵션을 선택합니다.

Looker의 파생 테이블 문서 페이지에서 파생 테이블 다시 빌드 및 실행 옵션에 대한 자세한 내용을 확인하세요.

예시

자정에 하루에 한 번 다시 빌드되는 MySQL에서 PDT를 만듭니다.

view: clean_events {
  derived_table: {
    sql:
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff') ;;
    sql_trigger_value: SELECT CURDATE() ;;
  }
}

다음 섹션에서는 다양한 언어에서 다양한 PDT 다시 빌드 전략에 사용할 SQL을 보여줍니다.

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을 바꿉니다.
1시간마다
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP())
2시간마다
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
1시간마다
SELECT HOUR(CURTIME())
2시간마다 협정 세계시 (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
1시간마다
SELECT DATE_PART('hour', GETDATE())
2시간마다
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
1시간마다
SELECT DATE_PART('hour', NOW())
2시간마다
SELECT FLOOR(EXTRACT(epoch from NOW()) / (2*60*60))

재생성 간에 원하는 시간 수로 '2'를 바꿀 수 있습니다.
데이터를 업데이트하지 않음
SELECT 1

Snowflake

원하는 재생성 일정 사용할 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
1시간마다
SELECT HOUR(CURRENT_TIME())
2시간마다 협정 세계시 (UTC)
SELECT FLOOR(DATE_PART('EPOCH_SECOND', CURRENT_TIMESTAMP) / (2*60*60))

재생성 간에 원하는 시간 수로 '2'를 바꿀 수 있습니다.
데이터를 업데이트하지 않음
SELECT 1

일반 과제

sql_trigger_value를 사용하려면 영구 파생 테이블을 설정해야 합니다.

sql_trigger_value을(를) 사용하면 데이터베이스 연결 설정에서 파생 테이블의 지속성을 사용 설정하지 않은 경우 LookML 유효성 검사 오류가 발생합니다. 대부분의 고객은 데이터베이스 연결을 처음 구성할 때 영구 파생 테이블을 설정합니다. 이 규칙의 가장 일반적인 예외는 Looker를 PostgreSQL 읽기 전용 핫스왑 보조에 연결하는 고객입니다.

sql_trigger_value는 개발 모드와 프로덕션 모드 간에 다르게 작동합니다.

sql_trigger_value는 프로덕션 모드에서 예상대로 작동해야 합니다. 개발 모드에서는 구현한 설정과 관계없이 모든 파생 테이블이 persist_for: 24 hours가 사용된 것처럼 처리됩니다. 자세한 내용은 Looker의 파생 테이블 문서 페이지에서 개발 모드의 영구 테이블 섹션을 참조하세요.