Создание материализованного представления
Чтобы создать материализованное представление в логической базе данных, выполните запрос CREATE MATERIALIZED VIEW. Если нужно создать представление только на логическом уровне, добавьте в запрос ключевое слово LOGICAL_ONLY.
Создание материализованных представлений возможно в ADG и ADQM на основе данных ADB.
Создание представления недоступно при наличии любого из факторов:
- горячей дельты,
- незавершенного запроса на создание, удаление или изменение таблицы или представления,
- запрета на изменение сущностей (см. раздел DENY_CHANGES).
Наличие представления можно проверить, как описано в разделе Проверка наличия материализованного представления. Наличие физических таблиц, связанных с материализованным представлением, можно проверить, как описано в разделе Проверка месторасположения логической сущности.
Каждое создание представления записывается в журнал. Журнал можно посмотреть с помощью запроса GET_CHANGES.
Примеры
Создание материализованного представления
-- выбор базы данных sales по умолчанию
USE sales;
-- создание материализованного представления sales_and_stores
CREATE MATERIALIZED VIEW sales.sales_and_stores (
id INT NOT NULL,
transaction_date TIMESTAMP NOT NULL,
product_code VARCHAR(256) NOT NULL,
product_units INT NOT NULL,
description VARCHAR(256),
store_id INT NOT NULL,
store_category VARCHAR(256) NOT NULL,
region VARCHAR(256) NOT NULL,
PRIMARY KEY (id, region)
)
DISTRIBUTED BY (id)
DATASOURCE_TYPE (adg, adqm)
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 sales.sales AS s
JOIN sales.stores AS st
ON s.store_id = st.id
DATASOURCE_TYPE = 'adb';
Создание материализованного представления только на логическом уровне
CREATE MATERIALIZED VIEW sales.stores_by_sold_products_matview (
store_id INT NOT NULL,
product_amount INT NOT NULL,
PRIMARY KEY (store_id)
)
DISTRIBUTED BY (store_id)
DATASOURCE_TYPE (adg)
AS SELECT store_id, SUM(product_units) AS product_amount
FROM sales.sales
GROUP BY store_id
DATASOURCE_TYPE = 'adb'
LOGICAL_ONLY