Быстрый старт

Создайте новую базу данных и подключите расширение Tantor PipelineDB:

psql -c "CREATE DATABASE pipeline;"
psql -d pipeline -c "CREATE EXTENSION pipelinedb;"

Анализ данных по авиаперевозкам

В этом примере мы проведем анализ данных о пассажирских перевозках на авиалиниях. Данные содержат информацию о количестве пассажиров по месяцам за три года: 1958, 1959 и 1960. Мы будем использовать Tantor PipelineDB для создания внешней таблицы, загрузки данных из CSV-файла и последующего анализа этих данных с помощью представления.

Создание внешней таблицы

Сначала создадим внешнюю таблицу air_travel_stream, которая будет хранить данные о пассажирских перевозках. Эта таблица будет содержать три столбца для каждого года и один столбец для месяца:

psql -d pipeline -c "
CREATE FOREIGN TABLE air_travel_stream (
  month text,
  year_1958 int,
  year_1959 int,
  year_1960 int
) SERVER pipelinedb;"

Формат записей в таблице air_travel_stream будет следующим:

month | year_1958 | year_1959 | year_1960

Где:

  • month — месяц года (например, JAN для января).

  • year_1958 — количество пассажиров в 1958 году.

  • year_1959 — количество пассажиров в 1959 году.

  • year_1960 — количество пассажиров в 1960 году.

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

После создания таблицы air_travel_stream создадим представление air_travel_stats, которое будет агрегировать данные по месяцам. Это представление позволит получить сводные данные, такие как минимальное, максимальное, среднее и общее количество пассажиров за каждый год.

psql -d pipeline -c "
CREATE VIEW air_travel_stats WITH (action=materialize) AS
SELECT month,
  count(*) AS total_records,
  sum(year_1958) AS total_1958,
  min(year_1958) AS min_1958,
  max(year_1958) AS max_1958,
  avg(year_1958)::int AS avg_1958,
  sum(year_1959) AS total_1959,
  min(year_1959) AS min_1959,
  max(year_1959) AS max_1959,
  avg(year_1959)::int AS avg_1959,
  sum(year_1960) AS total_1960,
  min(year_1960) AS min_1960,
  max(year_1960) AS max_1960,
  avg(year_1960)::int AS avg_1960
FROM air_travel_stream
GROUP BY month;"

Загрузка данных и выполнение запросов

Теперь загрузим данные из CSV-файла в таблицу air_travel_stream. В этом файле содержатся данные о количестве пассажиров за каждый месяц в 1958, 1959 и 1960 годах.

curl -sL https://people.sc.fsu.edu/~jburkardt/data/csv/airtravel.csv | \
grep -v '^$' | \
psql -d pipeline -c "COPY air_travel_stream (month, year_1958, year_1959, year_1960) FROM STDIN WITH CSV HEADER"

После того как данные будут загружены, вы можете выполнить запрос к представлению air_travel_stats, чтобы получить агрегированные данные. В этом запросе данные будут отсортированы по количеству пассажиров в 1958 году в порядке убывания.

psql -d pipeline -c "SELECT * FROM air_travel_stats ORDER BY total_1958 DESC;"

Результат запроса будет следующим:

 month | total_records | total_1958 | min_1958 | max_1958 | avg_1958 | total_1959 | min_1959 | max_1959 | avg_1959 | total_1960 | min_1960 | max_1960 | avg_1960
-------+---------------+------------+----------+----------+----------+------------+----------+----------+----------+------------+----------+----------+----------
 AUG   |             1 |        505 |      505 |      505 |      505 |        559 |      559 |      559 |      559 |        606 |      606 |      606 |      606
 JUL   |             1 |        491 |      491 |      491 |      491 |        548 |      548 |      548 |      548 |        622 |      622 |      622 |      622
 JUN   |             1 |        435 |      435 |      435 |      435 |        472 |      472 |      472 |      472 |        535 |      535 |      535 |      535
 SEP   |             1 |        404 |      404 |      404 |      404 |        463 |      463 |      463 |      463 |        508 |      508 |      508 |      508
 MAY   |             1 |        363 |      363 |      363 |      363 |        420 |      420 |      420 |      420 |        472 |      472 |      472 |      472
 MAR   |             1 |        362 |      362 |      362 |      362 |        406 |      406 |      406 |      406 |        419 |      419 |      419 |      419
 OCT   |             1 |        359 |      359 |      359 |      359 |        407 |      407 |      407 |      407 |        461 |      461 |      461 |      461
 APR   |             1 |        348 |      348 |      348 |      348 |        396 |      396 |      396 |      396 |        461 |      461 |      461 |      461
 JAN   |             1 |        340 |      340 |      340 |      340 |        360 |      360 |      360 |      360 |        417 |      417 |      417 |      417
 DEC   |             1 |        337 |      337 |      337 |      337 |        405 |      405 |      405 |      405 |        432 |      432 |      432 |      432
 FEB   |             1 |        318 |      318 |      318 |      318 |        342 |      342 |      342 |      342 |        391 |      391 |      391 |      391
 NOV   |             1 |        310 |      310 |      310 |      310 |        362 |      362 |      362 |      362 |        390 |      390 |      390 |      390
(12 rows)

Как видно из результатов, данные упорядочены по месяцу с наибольшим количеством пассажиров в 1958 году. Представление air_travel_stats позволяет быстро получить сводную информацию по месяцам за каждый год.