Быстрый старт
Создайте новую базу данных и подключите расширение 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
позволяет быстро получить сводную информацию по месяцам за каждый год.