Создание материализованного представления
Содержание раздела
Чтобы создать материализованное представление в логической базе данных, выполните CREATE MATERIALIZED VIEW.
Возможные комбинации источника и приемников данных материализованного представления (источник слева от стрелки, приемники — справа):
- внешняя система → представление в датасорсах (датасорс: СУБД или кластер СУБД хранилища
) любых типов; - сущности логических БД → представление в том же датасорсе:
- ADB → ADB;
- ADP → ADP;
- ADG → ADG;
- сущности логических БД → представление в других датасорсах:
- ADB → ADP, ADQM и (или) ADG;
- ADP → ADP и (или) ADG.
Создание представления недоступно, если есть незавершенная операция записи или установлен запрет на изменение сущностей.
Наличие представления можно проверить, как описано в разделе Проверка наличия материализованного представления.
Каждое создание представления записывается в журнал, доступный с помощью GET_CHANGES.
Примеры
Создание представления на основе одной таблицы
CREATE MATERIALIZED VIEW matview_db.sales_by_stores (
store_id BIGINT NOT NULL,
product_code VARCHAR(256) NOT NULL,
product_units BIGINT NOT NULL,
PRIMARY KEY (store_id, product_code)
)
DISTRIBUTED BY (store_id)
DATASOURCE_TYPE ('adp2')
AS SELECT store_id, product_code, SUM(product_units) FROM marketing.sales
WHERE product_code <> 'ABC0001'
GROUP BY store_id, product_code
DATASOURCE_TYPE = 'adp'
OPTIONS ('
matview.sync.period.ms=10000;
matview.sync.snapshot.enable=false;
')
Создание представления на основе двух таблиц
CREATE MATERIALIZED VIEW matview_db.sales_and_stores (
id BIGINT NOT NULL,
transaction_date TIMESTAMP NOT NULL,
product_code VARCHAR(256) NOT NULL,
product_units BIGINT NOT NULL,
description VARCHAR(256),
store_id BIGINT NOT NULL,
store_category VARCHAR(256) NOT NULL,
region VARCHAR(256) NOT NULL,
PRIMARY KEY (id, region)
)
DISTRIBUTED BY (id)
DATASOURCE_TYPE ('adp')
AS SELECT
s.id, s.transaction_date, s.product_code, s.product_units, s.description,
st.id AS store_id, st.category as store_category, st.region
FROM marketing.sales AS s
JOIN marketing.stores AS st
ON s.store_id = st.id
DATASOURCE_TYPE = 'adp'
Создание представления на основе данных из двух логических БД
CREATE MATERIALIZED VIEW matview_db.moscow_sales_by_store_category (
store_id BIGINT,
category VARCHAR(256),
product_units INT
PRIMARY KEY (store_id)
)
DISTRIBUTED BY (store_id)
DATASOURCE_TYPE ('adg', 'adqm', 'adp')
AS SELECT s.store_id, st.category, SUM(s.product_units) as product_units
FROM moscow.sales as s
JOIN marketing.stores as st
ON s.store_id = st.id
GROUP BY s.store_id, st.category
DATASOURCE_TYPE = 'adb'