용도
derived_table: {
sql_trigger_value: SELECT CURDATE() ;;
...
}
}
계층 구조
sql_trigger_value |
기본값
없음결제 가능
하나의 행과 하나의 열로 생성되는 SQL 문
|
정의
데이터 그룹을 사용하여 쿼리 캐싱 및 PDT 재빌드 문서 페이지에 설명된
datagroup
및datagroup_trigger
사용을 고려해 보세요.
sql_trigger_value
를 사용하면 개발자가 제공하는 SQL 문을 기반으로 영구 파생 테이블의 재생성을 트리거할 수 있습니다. SQL 문의 결과가 이전 값과 다르면 PDT가 다시 생성됩니다.
sql_trigger_value
매개변수는 작성한 SQL의 첫 번째 행과 열만 고려합니다. 따라서 쿼리를 작성하여 하나의 값 (행과 열 하나)만 반환하는 것이 좋습니다. 이렇게 하면 향후 개발자에게 혼란을 주지 않으며 비 스트리밍 SQL 언어가 큰 결과 세트를 메모리에 로드하는 것을 방지할 수 있습니다.
기본적으로 다른 영구 파생 테이블이 빌드되고 있지 않는 한 Looker는 작성한 SQL 쿼리를 5분마다 실행합니다. SQL 쿼리 결과가 변경되면 Looker에서 파생 테이블을 다시 생성합니다. Looker의 관리 설정에서 PDT 및 데이터 그룹 유지보수 일정 설정을 사용하여 이 일정을 원하는 대로 변경할 수 있습니다.
예를 들어 MySQL을 실행 중이고 다음을 사용했다고 가정해 보겠습니다.
sql_trigger_value: SELECT CURDATE() ;;
결과는 다음과 같습니다.
sql_trigger_value 실행 시간 | sql_trigger_value 결과 |
---|---|
2015년 1월 1일 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년 1월 2일 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의 파생 테이블 문서 페이지를 참조하세요.
Examples
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번을 재생성할 시간대로 변경합니다. |
특정 시간에 하루에 3회 | 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번을 재생성할 시간대로 변경합니다. |
특정 시간에 하루에 3회 | 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번을 재생성할 시간대로 변경합니다. |
특정 시간에 하루에 3회 | 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번을 재생성할 시간대로 변경합니다. |
특정 시간에 하루에 3회 | 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번을 재생성할 시간대로 변경합니다. |
특정 시간에 하루에 3회 | 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의 파생 테이블 문서 페이지에 있는 개발 모드의 지속 테이블 섹션을 참고하세요.