Greenplum
Greenplum — система массивно-параллельной обработки (MPP), предназначенная для хранения и обработки больших объемов информации.
Это самая известная аналитическая СУБД. Масштабирование системы по мере роста объема данных происходит за счет добавления новых серверов в кластер. СУБД Greenplum основана на PostgreSQL, имеет интерфейс ANSI SQL:2003/SQL:2008, ACID и почти полностью совместима с PostgreSQL (поддерживаются возможности PostgreSQL с 8.4 по 9.4). Исторически Greenplum применялся в сферах финансовых технологий и телекома, далее — в ритейле, после чего стал использоваться во всех отраслях, связанных с большими данными.
Типовой кейс использования продукта
- ETL- и ELT-процессы загрузки данных — классическая трансформация данных, наиболее эффективно показывают себя при in-database обработке.
- DWH-трансформации — любые другие виды трансформации, включая генерацию ключей и т. д.
- Большие JOIN — эффективное соединение больших таблиц, особенно в случаях объединения по заведомо заданному ключу распределения, эта СУБД хорошо объединяет большие таблицы как локально, так и распределённо.
- Ad-hoc deep dive — углублённый анализ по специализированным запросам, когда заранее неизвестно, какие данные понадобятся пользователю, но необходимо организовать к ним доступ и выделить ресурсы для их обработки.
- Аналитические функции на процедурных языках, в том числе и с помощью уже готовых библиотек алгоритмов MADLib.
- Системы регулярной отчётности (управленческой, операционной, МСФО и т. д.).
- Предиктивный анализ: анализ текущих и прошлых данных или событий для прогноза будущих данных или событий. Например, в директ-маркетинге, целевой рекламе, управлении инвестиционными рисками, выявлении мошеннических схем.
- Ad-hoc аналитика: сегментация рынка, концепция продукта, эффективность рекламы, потенциал компании или бренда, каналы сбыта, эффективность продаж.
- Маркетинговый анализ: целевая аудитория, конкуренты, ценовые предложения.
- Финансовый скоринг: оценка кредитоспособности заёмщиков, оценка наиболее вероятных финансовых действий и др.
- Анализ клиентской базы: АВС-анализ (сегментация по объёму продаж и прибыли), XYZ-анализ (сегментация по частоте покупок или сделок).
Пререквизиты для работы с Greenplum
На рабочем месте должен быть установлен любой клиент поддерживающий Greenplum.
Получить доступ к кластеру Greenplum, открыв сетевой доступ на порт 5432.
Подключение к Greenplum
Для подключения вы можете использовать стандартный клиент PostgreSQL, либо сторонние утилиты.
Пример строки подключения с использованием клиента PostgreSQL:
Строка подключения
psql -h IP -p PORT -U login -d core -W
где:
IP - Внешний IP адрес СУБД
PORT - порт СУБД
login - имя пользователя указанное при запросе доступа
core - дефолтное имя базы данных
Пример настроек подключения к БД через утилиту pgAdmin
где:
Host name/address <IP> - Внешний IP адрес СУБД
Port 5432 - порт подключения к СУБД
Maintenance database <db_name> - имя базы данных ( дефолтное имя core )
Username <login> - имя пользователя
Password <password> - пароль для подключения к БД.
Пример настроек подключения к БД через утилиту DBeaver
где:
Хост <some-gp-host.mts.ru>- Внешний IP адрес СУБД
Порт <5432> - порт подключения к СУБД
База данных <core> - имя базы данных ( дефолтное имя core )
Пользователь <login> - имя пользователя
Пароль <password> - пароль для подключения к БД.
Работа с данными
Создание таблиц
Простая таблица с случайным распределением
CREATE TABLE sales (
id SERIAL,
product_name VARCHAR(100),
category VARCHAR(50),
price DECIMAL(10,2),
quantity INTEGER,
sale_date DATE,
region VARCHAR(50)
) DISTRIBUTED RANDOMLY;
Внешняя таблица для загрузки данных через gpfdist
CREATE EXTERNAL TABLE ext_sales (
product_name TEXT,
category TEXT,
price TEXT,
quantity TEXT,
sale_date TEXT,
region TEXT
)
LOCATION ('gpfdist://etl-server1:8080/sales/*.csv')
FORMAT 'CSV' (HEADER DELIMITER ',' QUOTE '"' ESCAPE '"')
ENCODING 'UTF8';
Аналитические запросы
Агрегация и группировка
-- Анализ продаж по категориям
SELECT
category,
COUNT(*) as total_orders,
SUM(quantity) as total_quantity,
SUM(price * quantity) as total_revenue,
AVG(price) as avg_price
FROM sales
GROUP BY category
ORDER BY total_revenue DESC;
Временной анализ
-- Динамика продаж по месяцам
SELECT
DATE_TRUNC('month', sale_date) as month,
COUNT(*) as orders_count,
SUM(price * quantity) as monthly_revenue,
LAG(SUM(price * quantity)) OVER (ORDER BY DATE_TRUNC('month', sale_date)) as prev_month_revenue
FROM sales
GROUP BY DATE_TRUNC('month', sale_date)
ORDER BY month;


