Сборка и развертывание минимальной конфигурации
Содержание раздела
В этом разделе описаны шаги по развертыванию среды в конфигурации, предполагающей единственный датасорс типа 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;