사용
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이 materialized_view: yes로 프로덕션에 배포된 후 Looker 재생기의 다음 주기 동안 구체화된 뷰가 생성됩니다.
구체화된 뷰를 위한 안정적인 데이터베이스 뷰
Looker는 각 구체화된 뷰에 대해 안정적인 데이터베이스 뷰를 자동으로 만듭니다. 안정적인 데이터베이스 뷰는 데이터베이스 자체에 생성되므로 Looker 외부에서 쿼리할 수 있습니다. 이는 publish_as_db_view 파라미터와 함께 사용되는 안정적인 뷰 기능과 동일합니다.
구체화된 뷰의 LookML이 프로덕션에 배포된 후 Looker 재생성기의 다음 주기 동안 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 오류를 생성하지 않습니다. 대신 구체화된 뷰가 빌드되지 않으면 Looker가 PDT 이벤트 로그의 이벤트로 또는 구체화된 뷰를 쿼리하려고 하면 런타임 오류로 오류를 생성합니다. 구체화된 뷰의 제한사항에 관한 내용은 언어 문서를 참고하세요.
- 일부 다이얼렉트에서는 구체화된 뷰를 쿼리할 때 쿼리 최신성을 확인하므로 쿼리 결과를 가져오는 데 약간의 지연이 발생할 수 있습니다. 언어의 문서에서 언어에 해당하는지 확인하세요.
- 일부 다이얼렉트는 구체화된 뷰를 완전히 다시 빌드하는 대신 증분 방식으로 새로고침하려고 시도합니다. 자세한 내용은 언어 문서를 참고하세요.
- 구체화된 뷰가 데이터베이스에서 삭제된 기본 테이블을 사용하는 경우 구체화된 뷰를 쿼리할 수 없으며 새 버전을 빌드할 수 없습니다.
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 |