Skip to content

Greenplum

Greenplum — система массивно-параллельной обработки (MPP), предназначенная для хранения и обработки больших объемов информации.

Это самая известная аналитическая СУБД. Масштабирование системы по мере роста объема данных происходит за счет добавления новых серверов в кластер. СУБД Greenplum основана на PostgreSQL, имеет интерфейс ANSI SQL:2003/SQL:2008, ACID и почти полностью совместима с PostgreSQL (поддерживаются возможности PostgreSQL с 8.4 по 9.4). Исторически Greenplum применялся в сферах финансовых технологий и телекома, далее — в ритейле, после чего стал использоваться во всех отраслях, связанных с большими данными.

Типовой кейс использования продукта

  1. ETL- и ELT-процессы загрузки данных — классическая трансформация данных, наиболее эффективно показывают себя при in-database обработке.
  2. DWH-трансформации — любые другие виды трансформации, включая генерацию ключей и т. д.
  3. Большие JOIN — эффективное соединение больших таблиц, особенно в случаях объединения по заведомо заданному ключу распределения, эта СУБД хорошо объединяет большие таблицы как локально, так и распределённо.
  4. Ad-hoc deep dive — углублённый анализ по специализированным запросам, когда заранее неизвестно, какие данные понадобятся пользователю, но необходимо организовать к ним доступ и выделить ресурсы для их обработки.
  5. Аналитические функции на процедурных языках, в том числе и с помощью уже готовых библиотек алгоритмов MADLib.
  6. Системы регулярной отчётности (управленческой, операционной, МСФО и т. д.).
  7. Предиктивный анализ: анализ текущих и прошлых данных или событий для прогноза будущих данных или событий. Например, в директ-маркетинге, целевой рекламе, управлении инвестиционными рисками, выявлении мошеннических схем.
  8. Ad-hoc аналитика: сегментация рынка, концепция продукта, эффективность рекламы, потенциал компании или бренда, каналы сбыта, эффективность продаж.
  9. Маркетинговый анализ: целевая аудитория, конкуренты, ценовые предложения.
  10. Финансовый скоринг: оценка кредитоспособности заёмщиков, оценка наиболее вероятных финансовых действий и др.
  11. Анализ клиентской базы: АВС-анализ (сегментация по объёму продаж и прибыли), XYZ-анализ (сегментация по частоте покупок или сделок).

Пререквизиты для работы с Greenplum

На рабочем месте должен быть установлен любой клиент поддерживающий Greenplum.

Получить доступ к кластеру Greenplum, открыв сетевой доступ на порт 5432.

Подключение к Greenplum

Для подключения вы можете использовать стандартный клиент PostgreSQL, либо сторонние утилиты.

Пример строки подключения с использованием клиента PostgreSQL:​

Строка подключения
psql -h IP -p PORT -U login -d core -W
где:
IP - Внешний IP адрес СУБД
PORT - порт СУБД
login - имя пользователя указанное при запросе доступа
core - дефолтное имя базы данных

Документация по psql

Пример настроек подключения к БД через утилиту pgAdmin​

где:

Host name/address <IP> - Внешний IP адрес СУБД
Port 5432 - порт подключения к СУБД
Maintenance database <db_name> - имя базы данных ( дефолтное имя core )
Username <login> - имя пользователя
Password <password> - пароль для подключения к БД.

Документация по PgAdmin

Пример настроек подключения к БД через утилиту DBeaver​

где:

Хост <some-gp-host.mts.ru>- Внешний IP адрес СУБД
Порт <5432> - порт подключения к СУБД
База данных <core> - имя базы данных ( дефолтное имя core )
Пользователь <login> - имя пользователя
Пароль <password> - пароль для подключения к БД.

Документация по DBeaver

Работа с данными

Создание таблиц

Простая таблица с случайным распределением

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;

Полезные ссылки