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

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

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