Визуализация файлов Parquet в Apache Superset с помощью Trino или PrestoSQL
Мне нравится визуализировать файлы самых различных форматов, таких как Parquet, CSV, JSON и т. д. Давайте посмотрим, как это можно сделать в Apache Superset.
Технологический стек
- Trino (бывший PrestoSQL)
- Minio — для хранения объектов с открытым исходным кодом. Совместим с AWS S3.
- Hive Metastore — для доступа к файлам из Trino с помощью коннектора Hive
- Apache Superset — для визуализации
Все эти приложения можно запустить на локальной машине с помощью Docker. Никаких внешних зависимостей не нужно. После настройки можно добавить самые различные данные, которые только у Вас есть, и визуализировать их.
Мы будем использовать Hive Metastore. Помимо формата Parquet Вы можете визуализировать и другие форматы файлов, такие как:
- ORC
- Avro
- RCText (RCFile используя ColumnarSerDe)
- RCBinary (RCFile используя LazyBinaryColumnarSerDe)
- SequenceFile
- JSON (используя org.apache.hive.hcatalog.data.JsonSerDe)
- CSV (используя org.apache.hadoop.hive.serde2.OpenCSVSerde)
- TextFile
Исходный код
- Полный исходный код доступен по ссылкe.
- Это решение на основе Docker.
Архитектура
Визуализировать форматы файлов подобные Parquet в Apache Superset достаточно интересно. Однако универсального механизма для их интеграции не существует.
Для соединения с источниками данных в таких форматах, как Parquet, CSV или JSON используется Trino (бывший PrestoSQL), котором для доступа к файлам нужен коннектор Hive.
Hive может получить доступ к объектным хранилищам, таким как AWS S3, используя Minio.
Собирать эту экосистему вручную достаточно сложно и утомительно. Поэтому обратите внимание на экосистемы на базе Docker.
Hive Metastore
По большому счету нам не нужно полное приложение Hive. Подключать файлы к Superset можно с помощью автономного хранилища Hive Metastore (конфигурацию Metastore Вы найдете здесь).
Приступим
- Запустим приложение со всеми контейнеры с помощью команды docker-compose up
- Тома Docker монтируются локально.
Инициализируем схему Hive
Запустите Trino CLI с помощью docker exec -it trino trinoи выполните следующие SQL-команды:
-- Need to manually run each query now.CREATE SCHEMA IF NOT EXISTS hive.iris WITH (location = 's3a://iris/');-- Path s3a://iris/iris_data is the holding directory. We dont give full file path. Only parent directory CREATE TABLE IF NOT EXISTS hive.iris.iris_data ( sepal_length DOUBLE, sepal_width DOUBLE, petal_length DOUBLE, petal_width DOUBLE, class VARCHAR ) WITH ( external_location = 's3a://iris/iris_data', format = 'PARQUET' );
Тестируем Trino с помощью Minio
Выполним SQL-запрос из Trino к файлу Parquet, загруженному в Minio:
trino> SELECT
-> sepal_length,
-> class
-> FROM hive.iris.iris_data
-> LIMIT 10;
->
sepal_length | class
--------------+-------------
5.1 | Iris-setosa
5.0 | Iris-setosa
4.4 | Iris-setosa
4.9 | Iris-setosa
4.6 | Iris-setosa
5.0 | Iris-setosa
5.4 | Iris-setosa
4.6 | Iris-setosa
4.9 | Iris-setosa
4.7 | Iris-setosa
(10 rows)Query 20211229_201233_00002_wfmbr, FINISHED, 1 node
Splits: 10 total, 10 done (100.00%)
1.14 [15 rows, 8.08KB] [13 rows/s, 7.08KB/s]
Настроим Superset
- Для того, чтобы настроить Superset с SQLite DB в качестве хранилища метаданных, запустите sh superset_init.sh;
- Добавьте базу данных > trino с URI SqlAlchemy в виде `trino://hive@trino-coordinator:8080/hive в Superset;
- Добавьте набор данных в Superset. Используйте iris_data в качестве таблицы.
Заключение
Выполнив все действия, описанные выше, Вы сможете просматривать файлы Parquet в виде таблиц непосредственно в Apache Superset. Данный алгоритм подходит для переноса файлов любых форматов в Superset. Как только Вы загрузите данные в Superset, Вы сможете визуализировать их по своему усмотрению.
