Создание материализованного представления

Содержание раздела
  1. Примеры
    1. Создание представления на основе одной таблицы
    2. Создание представления на основе двух таблиц
    3. Создание представления на основе данных из двух логических БД

Чтобы создать материализованное представление в логической базе данных, выполните 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'