Сборка и развертывание минимальной конфигурации

Содержание раздела
  1. Предустановленные программные средства
  2. Сборка Prostore
  3. Конфигурационный файл Prostore application.yml
  4. Настройка СУБД Postgres
  5. Запуск Prostore
  6. Подключение к Prostore с помощью SQL-клиента
  7. Демонстрационный сценарий
    1. Создание необходимых логических сущностей
    2. Вставка данных
    3. Выборка данных
    4. Удаление логических сущностей

В этом разделе описаны шаги по развертыванию среды в конфигурации, предполагающей единственный датасорс типа ADP, а также отсутствие брокера сообщений Kafka и коннекторов для загрузки данных из Kafka.

Предустановленные программные средства

  • OC «Альт 8 СП» (8.4);
  • yum-utils;
  • curl;
  • git;
  • wget;
  • OpenJDK 8;
  • Apache Maven 3.6.3;
  • СУБД PostgreSQL 13;
  • SQL-клиент, например DBeaver.

Сборка Prostore

# клонирование репозитория Prostore
git clone https://repository.datamart.ru/datamarts/prostore ~/prostore
# запуск сборки Prostore средствами Apache Maven
cd ~/prostore
mvn clean install -DskipTests=true
# создание символической ссылки на файл конфигурации
sudo ln -s ~/prostore/dtm-query-execution-core/config/application.yml ~/prostore/dtm-query-execution-core/target/application.yml
# приведение конфигурационного файла к виду, показанному ниже
sudo nano ~/prostore/dtm-query-execution-core/config/application.yml

Конфигурационный файл Prostore application.yml

# настройки сервера Prostore
server:
# номер порта сервиса метрик
  port: ${DTM_METRICS_PORT:8080}
# настройки сервиса исполнения запросов
core:
# настройки плагинов
  plugins:
# список используемых типов датасорсов
    active: ${CORE_PLUGINS_ACTIVE:ADP}
# настройки сетевых подключений через HTTP-протокол
  http:
# номер порта сервиса исполнения запросов
    port: ${DTM_CORE_HTTP_PORT:9090}
# настройки окружения
  env:
# имя окружения для формирования полных имен логических БД
    name: ${DTM_NAME:test}
# настройки механизма управления кластером Raft
  raft:
# идентификатор этой ноды
    myId: ${RAFT_ID:1}
# номера и сетевые адреса нод кластера, включая эту ноду; адрес указывается в формате host:http_port; 
# строки заполняютcя по количеству нод, остальные остаются незаполненными
    servers:
      pnode.1: ${RAFT_SERVER_1:127.0.0.1:9090}
# настройки сервисной базы данных, хранящей метаинформацию
    servicedb:
# имя БД, в которой размещается сервисная БД; возможно размещение системных и бизнес-данных в одной БД с разделением по разным схемам
      db: ${RAFT_SERVICEDB_DATABASE:test}
# имя схемы СУБД, выделенной для размещения сервисной БД
      schema: ${RAFT_SERVICEDB_SCHEMA:sys1}
# имя пользователя/логин для авторизации в СУБД
      user: ${RAFT_SERVICEDB_USER:}
# пароль для авторизации в СУБД
      password: ${RAFT_SERVICEDB_PASS:}
# сетевой адрес хоста с сервисной БД
      host: ${RAFT_SERVICEDB_HOST:localhost}
# сетевой порт на хосте сервисной БД
      port: ${RAFT_SERVICEDB_PORT:5432}
# настройки ADP
adp:
# настройки датасорсов типа ADP
  datasource:
# отметка элемента в массиве датасорсов и имя датасорса; каждый элемент массива содержит настройки одного датасорса типа ADP
    - name: ADP
# окружение (указывает базу данных в датасорсе)
      env: ${ADP_ENV_NAME:${DTM_NAME:test}}
# имя пользователя/логин для авторизации в датасорсе
      user: ${ADP_USERNAME:dtm}
# пароль для авторизации в датасорсе
      password: ${ADP_PASS:}
# сетевой адрес хоста датасорса
      host: ${ADP_HOST:localhost}
# сетевой порт на хосте датасорса
      port: ${ADP_PORT:5432}

Далее конфигурационный файл application.yml обозначается термином «конфигурация Prostore».

Настройка СУБД Postgres

# создание в СУБД Postgres SUPERUSER-пользователя c именем и паролем,
# указанными в конфигурации Prostore
# (значения параметров (adp:datasource:user) и (adp:datasource:password) соответственно)
cd /
sudo -u postgres psql -c 'CREATE ROLE dtm WITH LOGIN SUPERUSER'
sudo -u postgres psql -c "ALTER ROLE dtm WITH PASSWORD 'dtm'"
# создание базы данных с именем test, указанным в конфигурации Prostore (env: name)
sudo -u postgres psql -c 'CREATE DATABASE test'
# перезапуск сервиса Postgresql
sudo systemctl reload postgresql-13

Запуск Prostore

Запуск с номером порта для сбора метрик, указанным в конфигурации Prostore (по умолчанию — 8080):

# запуск файла dtm-query-execution-core-<version>.jar (например, dtm-query-execution-core-5.1.0.jar)
cd ~/prostore/dtm-query-execution-core/target
java -jar dtm-query-execution-core-<version>.jar

Чтобы запустить Prostore с другим номером порта для сбора метрик, задайте нужное значение с помощью параметра конфигурации server:port или переменной окружения DTM_METRICS_PORT. Подробнее о параметрах конфигурации и способах их переопределения см. в разделе Конфигурация ноды.

Подключение к Prostore с помощью SQL-клиента

Чтобы подключиться к системе, следуйте инструкциям в разделе Подключение с помощью SQL-клиента.

Демонстрационный сценарий

Создание необходимых логических сущностей

-- создание логической базы данных
CREATE DATABASE marketing;

-- выбор логической БД по умолчанию
USE marketing;

-- создание логической таблицы в БД marketing
CREATE TABLE sales (
  id BIGINT NOT NULL,
  transaction_date TIMESTAMP NOT NULL,
  product_code VARCHAR(256) NOT NULL,
  product_units BIGINT NOT NULL,
  store_id BIGINT NOT NULL,
  description VARCHAR(256),
  PRIMARY KEY (id)
)
DISTRIBUTED BY (id);

-- создание логического представления stores_by_sold_products
CREATE VIEW stores_by_sold_products AS
  SELECT store_id, SUM(product_units) AS product_amount
  FROM sales
  GROUP BY store_id
  ORDER BY product_amount DESC
  LIMIT 30; 

Вставка данных

-- открытие новой дельты
BEGIN DELTA;

-- запуск вставки данных в логическую таблицу sales
INSERT INTO sales
(id, transaction_date, product_code, product_units, store_id, description)
VALUES
(2000111, '2020-05-01 13:14:16', 'ABC202010', 7, 1000000123, 'Покупка без акций'),
(2000112, '2020-05-02 16:13:17', 'ABC202011', 11, 1000000456, 'Покупка без акций'),
(2000113, '2020-05-03 21:15:17', 'ABC202012', 5, 1000000789, 'Покупка без акций'),
(2000114, '2020-05-04 23:03:13', 'ABC202013', 7, 1000000123, 'Покупка без акций'),
(2000115, '2020-05-05 14:10:21', 'ABC202014', 21, 1000000623, 'Покупка без акций'),
(2000116, '2020-06-12 08:43:56', 'ABC202015', 32, 1000000987, 'Покупка без акций');

-- закрытие дельты
COMMIT DELTA;

Выборка данных

-- запрос с неявным указанием столбцов и ключевым словом WHERE
SELECT * FROM sales
WHERE store_id = 1000000123;

-- запрос с агрегацией, группировкой и сортировкой данных, а также выбором первых 5 строк
SELECT s.store_id, SUM(s.product_units) AS product_amount
FROM sales AS s
GROUP BY (s.store_id)
ORDER BY product_amount DESC
LIMIT 5;

-- запрос к логическому представлению stores_by_sold_products
SELECT * FROM stores_by_sold_products;

Удаление логических сущностей

-- удаление логического представления stores_by_sold_products
DROP VIEW stores_by_sold_products;