사용
view: my_view {
derived_table: {
materialized_view: yes
...
}
}
|
계층 구조
materialized_view |
기본값
no
허용
부울 (yes 또는 no)
특수 규칙
materialized_view는 특정 언어에서만 지원됩니다
|
정의
구체화된 뷰 기능은 고급 기능입니다. 언어에 따라 구체화된 뷰는 많은 리소스를 소비할 수 있으므로 구체화된 뷰의 언어 구현을 이해하는 것이 중요합니다. 언어 동작 및 언어가 구체화된 뷰에 대해 데이터를 새로고침하는 빈도에 대한 자세한 내용은 언어 문서를 참조합니다.
구체화된 뷰를 사용하면 데이터베이스의 기능을 활용하여 Looker 프로젝트에서 파생 테이블을 유지할 수 있습니다. 데이터베이스 언어가 구체화된 뷰를 지원하고 Looker 연결이 영구 파생 테이블 옵션이 사용 설정된 상태로 구성된 경우 파생 테이블에 materialized_view: yes을 지정하여 구체화된 뷰를 만들 수 있습니다. 구체화된 뷰는 기본 파생 테이블과 SQL 기반 파생 테이블 모두에서 지원됩니다.
영구 파생 테이블(PDT)과 마찬가지로 구체화된 뷰는 데이터베이스의 스크래치 스키마에 테이블로 저장되는 쿼리 결과입니다. PDT와 구체화된 뷰의 주요 차이점은 테이블을 새로고침하는 방법에 있습니다.
- PDT의 경우 지속성 전략은 Looker에서 정의되며 지속성은 Looker에서 관리됩니다.
- 구체화된 뷰의 경우에는 데이터베이스가 테이블의 데이터를 유지보수하고 새로고침합니다.
따라서 구체화된 뷰 기능을 사용하려면 언어 및 해당 기능에 대한 고급 지식이 필요합니다. 대부분의 경우 데이터베이스는 구체화된 뷰에서 쿼리하는 테이블의 새 데이터를 데이터베이스에서 감지할 때마다 구체화된 뷰를 새로고침합니다. 구체화된 뷰는 실시간 데이터가 필요한 시나리오에 적합합니다.
materialized_view: yes 문이 있는 파생 테이블에 데이터 그룹, sql_trigger_value 또는 persist_for 매개변수도 있는 경우 materialized_view: yes 문이 우선 적용됩니다.
예
이 e_flights_pdt 파생 테이블에는 materialized_view: yes 문이 있으므로 구체화된 뷰가 데이터베이스의 스크래치 스키마에 생성됩니다.
view: e_flights_pdt {
derived_table: {
materialized_view: yes
explore_source: ontime {
column: flight_num {}
column: carrier {}
column: arr_date {}
}
}
dimension: flight_num {}
dimension: carrier {}
dimension: arr_date {
type: date
}
}
Looker에서 구체화된 뷰를 만드는 경우
Looker는 다른 PDT와 동일한 방식으로 구체화된 뷰를 생성합니다. 개발 모드에서 구체화된 뷰를 만들고 쿼리하면 Looker에서 구체화된 뷰의 개발 버전을 만듭니다. 이 버전은 프로덕션에도 사용할 수 있습니다. 자세한 내용은 Looker의 파생 테이블 문서 페이지의 개발 모드에서 지속되는 테이블 섹션을 참고하세요.
그렇지 않으면 연결된 파생 테이블의 LookML이 프로덕션에 배포된 후 Looker 재생기의 다음 주기 동안 구체화된 뷰가 materialized_view: yes 생성됩니다.
구체화된 뷰의 안정적인 데이터베이스 뷰
Looker는 각 구체화된 뷰에 대해 안정적인 데이터베이스 뷰 를 자동으로 만듭니다. 안정적인 데이터베이스 뷰는 데이터베이스 자체에 생성되므로 Looker 외부에서 쿼리할 수 있습니다. 이는 publish_as_db_view 매개변수와 함께 사용되는 안정적인 뷰 기능과 동일합니다.
Looker는 구체화된 뷰의 LookML이 프로덕션에 배포된 후 Looker 재생기의 다음 주기 동안 안정적인 뷰를 만듭니다. 안정적인 데이터베이스 뷰가 게시되면 직접 쿼리할 수 있습니다.
see_pdts 권한이 있는 관리자 또는 사용자는 Looker의 관리 섹션에 있는 영구 파생 테이블 페이지의 PDT 세부정보 모달에서 안정적인 데이터베이스 뷰 이름을 가져올 수 있습니다.
구체화된 뷰를 직접 쿼리하려면 테이블 이름 앞에 스크래치 스키마 이름을 추가하면 됩니다. 예를 들어 안정적인 데이터베이스 뷰 이름이 NN_e_redflight_e_redflight_publish_as_db이고 스크래치 스키마 이름이 tmp인 경우 다음과 같은 명령어로 안정적인 데이터베이스 뷰를 쿼리할 수 있습니다.
SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db
구체화된 뷰의 요구사항
Looker 프로젝트에서 구체화된 뷰를 사용하려면 다음이 필요합니다.
- 구체화된 뷰를 지원하는 데이터베이스 언어. 구체화된 뷰를 지원하는 언어 목록은 이 페이지의 구체화된 뷰의 언어 지원 섹션을 참고하세요.
- 데이터베이스의 스크래치 스키마. 데이터베이스의 어떤 스키마도 가능하지만 이 목적으로만 사용되는 새 스키마를 만드는 것이 좋습니다. 데이터베이스 관리자가 Looker 데이터베이스 사용자에게 쓰기 권한으로 스키마를 구성해야 합니다.
- 영구 파생 테이블 옵션이 사용 설정된 Looker 연결입니다. 일반적으로 Looker 연결을 처음 구성할 때 설정되지만 (데이터베이스 언어에 대한 안내는 Looker 언어 문서 페이지 참조) 초기 설정 후 연결에 PDT를 사용 설정할 수도 있습니다.
- 데이터베이스의 임시 스키마에 대한
CREATE TABLE권한이 있는 Looker 연결. 이는 PDT를 만드는 데 필요한 권한과 동일합니다. 또한 구체화된 뷰의 안정적인 데이터베이스 뷰를 만들려면 연결에 데이터베이스의 임시 스키마에 대한CREATE VIEW권한이 있어야 합니다. 연결에 이러한 권한이 있는지 확인하려면 연결을 테스트하면 됩니다.- 연결에서 PDT가 사용 설정되어 있고 연결에
CREATE TABLE권한이 있는 경우 연결 테스트는Can use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db"와 같은 결과를 반환합니다. - 연결에서 안정적인 뷰를 허용하고 연결에
CREATE VIEW권한이 있는 경우 연결 테스트는Can use stable views in temp schema "docsexamples_scratch" in database "flightstats"와 같은 결과를 반환합니다.
- 연결에서 PDT가 사용 설정되어 있고 연결에
구체화된 뷰의 중요 고려사항
구체화된 뷰를 사용하면 Looker에서 테이블의 데이터를 유지보수하고 새로고침하지 않습니다. 따라서 구체화된 뷰 기능을 사용하려면 언어 및 해당 기능에 대한 고급 지식이 필요합니다. 구체화된 뷰를 만들 때 고려해야 할 몇 가지 사항은 다음과 같습니다.
- 일부 언어에는 기본 최대 새로고침 간격 및 조인 지원과 같은 구체화된 뷰에 대한 제한사항이 있습니다. Looker는 구체화된 뷰의 언어별 기능에 관한 LookML 오류를 생성하지 않습니다. 대신 구체화된 뷰를 쿼리하려고 하면 PDT 이벤트 로그의 이벤트 또는 런타임 오류로 구체화된 뷰를 빌드하지 못할 경우 Looker에서 오류를 생성합니다. 구체화된 뷰의 제한사항에 관한 언어 문서를 참고하세요.
- 일부 언어는 구체화된 뷰를 쿼리할 때 쿼리 최신 상태를 확인하므로 쿼리 결과를 가져오는 데 약간의 지연이 발생할 수 있습니다. 언어 문서에서 언어에 해당하는지 확인하세요.
- 일부 언어는 완전히 다시 빌드하는 대신 구체화된 뷰를 증분식으로 새로고침하려고 시도합니다. 자세한 내용은 언어 문서를 참고하세요.
- 구체화된 뷰에서 데이터베이스에서 삭제된 기본 테이블을 사용하는 경우 구체화된 뷰를 쿼리하지 못할 수 있으며 새 버전을 빌드하지 못할 수 있습니다.
materialized_view: yes문이 있는 파생 테이블에 데이터 그룹,sql_trigger_value또는persist_for매개변수도 있는 경우materialized_view: yes문이 우선 적용됩니다.- 구체화된 뷰는 파티셔닝, 정렬 키, 색인과 같이 일반적으로 파생 테이블에서 지원되는 동일한 언어별 매개변수를 지원합니다.
- 연속 파생 테이블의 경우 구체화된 뷰는 다음과 같은 주의사항과 함께 Looker PDT에 종속될 수 있습니다.
materialized_view: yes가 있는 파생 테이블의 정의에서persist_for지속성 전략이 있는 파생 테이블을 사용할 수 없습니다. 구체화된 뷰의 경우 구체화된 뷰의 소스 테이블은 항상 데이터베이스에 있어야 합니다.persist_for파생 테이블은persist_for매개변수에 지정된 시간이 지나면 데이터베이스에서 삭제되므로 데이터베이스에 존재한다고 보장할 수 없습니다.- PDT는 고유한 이름으로 다시 빌드되므로 구체화된 뷰가 정의에서 PDT를 사용하는 경우 PDT가 다시 빌드될 때마다 구체화된 뷰가 PDT의 새 버전을 가리키도록 업데이트됩니다. 즉, 종속 항목이 완전히 다시 빌드되면 구체화된 뷰가 처음부터 다시 빌드되므로 성능에 영향을 미칠 수 있습니다. 이 경우 추가 전용 기본 테이블을 참조하거나 Looker를 사용하여 정의된 증분 PDT를 참조하는 것이 좋습니다.
구체화된 뷰의 언어 지원
파생 테이블을 구체화된 뷰로 만들 수 있는지 여부는 Looker 연결에서 사용하는 데이터베이스 언어에 따라 다릅니다. 현재 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+ | |
| 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 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 | |
| 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 |