Создание материализованного представления
Содержание раздела
Чтобы создать материализованное представление в логической базе данных, выполните CREATE MATERIALIZED VIEW.
Для материализованных представлений поддерживаются следующие типы датасорсов в качестве источника (отмечен слева от стрелки) и приемника (отмечен справа от стрелки):
- источник и приемник в одном датасорсе:
- ADB → ADB,
- ADP → ADP,
- ADG → ADG,
- источник и приемник в разных датасорсах:
- ADB → ADP, ADQM и (или) ADG,
- ADP → ADP и (или) ADG.
Датасорсы-приемники можно комбинировать в материализованном представлении с учетом поддерживаемых типов: например, можно создать представление на основе данных датасорса типа ADB в датасорсах типа ADP и ADQM.
Создание представления недоступно, если есть незавершенная операция записи или установлен запрет на изменение сущностей.
Наличие представления можно проверить, как описано в разделе Проверка наличия материализованного представления.
Каждое создание представления записывается в журнал. Журнал можно посмотреть с помощью запроса GET_CHANGES.
Примеры
Создание представления на основе одной таблицы
CREATE MATERIALIZED VIEW marketing.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 = 'adp1'
Создание представления на основе двух таблиц
CREATE MATERIALIZED VIEW marketing.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 marketing.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'