Источники данных и форматы: Parquet, CSV, JSON через Broker
В современных аналитических системах данные приходят из самых разных источников и представлены в разных форматах. Для Doris, системы массового анализа с колонностной архитектурой, особое значение имеет умение работать с внешними источниками данных через механизм Broker. Это позволяет читать Parquet, CSV и JSON напрямую из внешних хранилищ без копирования на локальный узел Doris, что упрощает архитектуру и ускоряет внедрение новых источников данных. В этой главе мы рассмотрим теоретические основы источников данных и форматов Parquet, CSV и JSON через Broker, научимся строить практические схемы доступа к данным, разберем типичные примеры открытых и российских решений, обсудим риски и ограничения внедрения и сделаем выводы, которые помогут новичку быстро выйти на продуктивную работу.
Источники данных и форматы в контексте Doris
Doris оперирует данными как внутри своих деревьев хранения, так и во внешних хранилищах. Внешние источники через Broker — это компактный и эффективный способ читать данные из систем, которые Doris сам по себе не хранит в своей локальной таблице. Broker выступает как посредник между Doris и внешним хранилищем (например, HDFS, S3, локальная файловая система, Yandex Object Storage и т. д.). Важное преимущество этого подхода в том, что данные остаются на месте и Doris может выполнять запросы через оптимизированный план выполнения, применяя фильтры и агрегации без загрузки файлов в базу.
Форматы Parquet, CSV и JSON
- Parquet — это колоночный формат хранения, хорошо подходящий для больших наборов данных и аналитических запросов. Он поддерживает схему на уровне файлов, с эффективной компрессией и кодированием словарей, а также predicate pushdown (если формат и движок это поддерживают). Parquet хорошо справляется с частыми выборками и агрегациями по конкретным столбцам, минимизируя чтение данных.
- CSV — простой текстовый формат, где данные хранятся в виде строк, разделенных запятыми или другим разделителем. CSV хорош простотой использования и совместимостью, но требует явных договоренностей по разделителям, кодировке, наличию заголовков и экранированию. В аналитических нагрузках CSV часто требует предварительной подготовки: нормализации типов данных, устранения пустых значений и обработки потенциальных различий в строковых представлениях.
- JSON — текстовый формат с возможностью представления структурированных и полуструктурированных данных. JSON может быть один из вариантов для вложенных структур или потоковых данных (JSON lines). Вопросы конструирования схемы и обработки вложенных полей требуют внимательности, так как вложенность и типы могут адаптироваться со временем.
Ключевые концепции, связанные с Broker
- Брокер как абстракция доступа: вы регистрируете брокер в Doris, указываете параметры подключения, тип хранилища, путь к данным и формат. После этого Doris может создавать таблицы, которые читают данные через указанный брокер.
- Формат и путь: в свойствах таблицы через Broker вы задаете формат (parquet, csv, json), путь к данным и параметры разделителей, кодировок, схемы и т. д. Важно согласовать схему между внешним форматом и таблицей Doris.
- Схема и эволюция: Parquet хранит схему внутри файлов, CSV и JSON требуют явного определения схемы на уровне Doris. При изменении формата данных или добавления новых полей может потребоваться переработать схемы и обновить таблицу через ALTER/RELOAD.
- Производительность и параллелизм: считывание через Broker может происходить параллельно по нескольким файлам и по частям файла. Важна оптимизация количества файлов, их размеров и правильная настройка параллелизма.
Подробности по каждому формату
Parquet через Broker
- Преимущества: эффективная компрессия, столбцовая организация, поддержка сложных типов и вложенных структур, ускорение фильтрации и агрегаций.
- Практические аспекты: выбор разделов и партицирования файлов, оптимизация размера файлов (например, 128–512 МБ), использование predicate pushdown для столбцов, соответствие типов между Parquet и Doris.
- Ограничения: если внешнее хранилище содержит маленькие файлы, число файлов может стать ограничивающим фактором. Также важно держать совместимость версий Parquet и библиотек чтения на стороне Doris.
- Примеры среды: Parquet часто хранится в HDFS, S3 или S3-совместимых сервисах (включая российские решения, такие как Яндекс Объектное Хранилище с S3-совместимым API или локальные кластеры Hadoop, настроенные под Parquet).
CSV через Broker
- Преимущества: простота формирования данных и прозрачность формата. Гибкость в настройке разделителей, кодировки и наличия заголовков.
- Практические аспекты: нужно определить разделитель (запятая, табуляция и т. д.), наличие заголовков, кодировку (часто UTF-8), обработку пустых значений, экранирование символов и возможность чтения больших файлов без перегрузки памяти. В рамках Doris полезно зафиксировать явную схему таблицы.
- Ограничения: CSV не обладает встроенной схемной проверкой как Parquet; риск несоответствий типов и символов управления при чтении. Большие наборы CSV-файлов требуют продуманной партии загрузок и эффективной организации конвейера чтения через Broker.
- Примеры: для российских проектов CSV может применяться для экспорта из систем учета в формате, который затем читается Doris через Broker без лишних трансформаций.
JSON через Broker
- Преимущества: удобство работы с полуструктурированными данными, гибкость в представлении вложенных структур, возможность считывать данные "как есть" и затем нормировать их в таблицу Doris.
- Практические аспекты: выбор между JSON lines (одна JSON-строка на запись) и обычным JSON-массивом; соответствие вложенных структур полям в Doris; обработка массивов и объектов, корректная трактовка типов. Часто JSON lines предпочтительнее для потоковой или батчевой загрузки через Broker.
- Ограничения: промышленные особенности JSON-форматов могут приводить к сложной схеме и необходимости дополнительных преобразований. В случаях глубоких вложенных структур может понадобиться предварительная нормализация или создание дополнительных столбцов для упрощения запросов.
Взаимосвязь форматов и целей аналитики
- Parquet лучше всего подходит для крупных таблиц с предикатами и агрегатами по столбцам.
- CSV удобен для экспорта из бизнес-приложений и для быстрой передачи простых наборов данных, если требования к производительности не критичны.
- JSON удобен для полуструктурированных данных, логов и событий, где вложенность и переменная структура являются обычным делом.
- Выбор формата через Broker должен зависеть от требований к скорости загрузки, частоты обновлений данных, структуры источника и доступности внешнего хранилища.
Практические примеры
Пример 1. Parquet данные в открытом файловом хранилище Hadoop/HDFS через Broker
Цель: прочитать данные о продажах, хранящиеся как Parquet-файлы в HDFS, через Doris Broker.
Шаги:
- Зарегистрируйте брокер, который будет подключаться к вашему HDFS-кластеру. В документации Doris обычно описывается команда создания брокера с указанием типа хранилища, адресов NameNode и необходимых ключей аутентификации.
- Определите схему таблицы в Doris. Например, таблица SALES содержит идентификатор продажи, дату, сумму, регион и товар.
- Создайте таблицу через Broker, указав формат Parquet и путь к данным в HDFS.
- Выполните запросы на агрегацию или фильтры по столбцам.
Пример команды (условная синтаксисная форма, ориентировочная и требующая адаптации под версию Doris):
CREATE TABLE sales_broker_parquet ( sale_id INT, sale_date DATE, amount DECIMAL(18,2), region STRING, product_id INT ) ENGINE=OLAP DISTRIBUTED BY HASH(sale_id) BUCKETS 16 PROPERTIES ( "storage_handler"="broker", "broker_name"="hdfs_broker", "path"="/data/sales/parquet/", "format"="parquet" );
Замечания:
- Ваша система может использовать другую конфигурацию брокера, например через классический синтаксис для регистрации брокера и указания параметров доступа.
- Важно поддерживать согласование типов между схемой Parquet и Doris.
- Лучше обеспечить достаточное количество файлов-файлик в Parquet-локальном кластере, чтобы обеспечить высокий параллелизм чтения.
Пример 2. Parquet данные в S3-совместимом хранилище (например, MinIO или Яндекс Облако Object Storage) через Broker
Цель: читать данные о клиентах из набора Parquet-файлов, размещённых в S3-совместимом хранилище.
Шаги:
- Зарегистрируйте брокер, указывая параметры доступа к S3-совместимому хранилищу, такие как ключи доступа, регион и точку доступа (endpoint).
- Определите схему таблицы в Doris и соответствие полям Parquet.
- Создайте таблицу через Broker, указав формат Parquet и путь к данным в бакете.
- Выполните запросы.
Пример команды (вариативно):
CREATE TABLE customers_broker_parquet ( customer_id INT, name STRING, email STRING, country STRING ) ENGINE=OLAP DISTRIBUTED BY HASH(customer_id) BUCKETS 8 PROPERTIES ( "storage_handler"="broker", "broker_name"="s3_broker", "path"="s3://my-bucket/customers/parquet/", "format"="parquet", "endpoint"="https://s3.yandex.net", "access_key"="YOUR_ACCESS_KEY", "secret_key"="YOUR_SECRET_KEY", "region"="ru-1" );
Замечания:
- Яндекс Облако/object storage поддерживает S3-совместимый API, поэтому его можно использовать через Doris Broker как обычный S3-хостинг.
- Укажите правильные параметры безопасности: хранение ключей доступа и секретов в безопасном месте, возможно использование временных токенов или роли.
- Если структура Parquet может эволюционировать, держите в документах соответствие схемы в Doris и следите за совместимостью типов.
Пример 3. CSV данные через Broker из локального хранилища или российского хоста
Цель: быстро начать работу с простыми линейными данными в формате CSV.
Шаги:
- Зарегистрируйте локальный или сетевой брокер с указанием пути к файлам CSV и разделителя.
- Определите схему таблицы в Doris, соответствующую полям CSV.
- Создайте таблицу через Broker и укажите формат CSV, разделитель и кодировку.
- Выполните выборки и агрегации.
Пример команды:
CREATE TABLE shipments_broker_csv ( shipment_id INT, order_id INT, ship_date DATE, status STRING, amount DECIMAL(18,2) ) ENGINE=OLAP DISTRIBUTED BY HASH(shipment_id) BUCKETS 8 PROPERTIES ( "storage_handler"="broker", "broker_name"="local_csv_broker", "path"="/data/shipments/csv/", "format"="csv", "delimiter"=",", "header"="true", "encoding"="UTF-8" );
Замечания:
- Путь к данным может быть локальным или сетевым; учтите сетевые задержки и доступность файлов.
- При использовании CSV важно обеспечить однородность типов и обработку пропусков.
- Экспериментируйте с параметрами header, delimiter и encoding, чтобы соответствовать вашим источникам данных.
Пример 4. JSON через Broker
Цель: читать потоковые или пакетные данные в формате JSON lines или вложенном JSON через Broker.
Шаги:
- Задайте брокера, указав путь к данным и формат JSON.
- Укажите параметры обработки вложенных структур, если Format поддерживает режим вложенности.
- Определите схему в Doris для извлечения нужных полей.
Пример команды:
CREATE TABLE events_broker_json ( event_id STRING, event_ts TIMESTAMP, payload STRUCT<type STRING, value DOUBLE>, user_id INT ) ENGINE=OLAP DISTRIBUTED BY HASH(event_id) BUCKETS 8 PROPERTIES ( "storage_handler"="broker", "broker_name"="json_broker", "path"="/data/events/json_lines/", "format"="json", "json_paths"="[\"type\",\"value\"]" );
Замечания:
- JSON обычно требует явного отображения на столбцы, особенно для вложенных структур.
- JSON Lines удобен для пакетной загрузки: каждая строка — отдельный JSON-объект.
- При сложной вложенности используйте дополнительные столбцы или геосхему применительно к вашей бизнес-логике.
Технические детали
1) Архитектура и производительность
- Broker действует как мост между Doris и внешними хранилищами. Он обеспечивает чтение файлов без копирования и позволяет Doris выполнять запросы на месте.
- Производительность чтения через Broker зависит от параллелизма, количества файлов, их размера и сетевой пропускной способности. Хороший кейс — множество файлов среднего размера, чтобы брокеры могли распараллелить чтение.
- В Parquet полезно держать файлы в диапазоне нескольких сотен мегабайт до нескольких сотен мегабайт, чтобы обеспечить эффективный параллелизм чтения и минимизировать overhead.
2) Согласование схемы
- Parquet: файл-уровневая схема. Doris должен соответствовать типам полей и именам столбцов.
- CSV/JSON: Doris ожидает явную схему на уровне DDL. В случае несоответствия типов могут возникнуть ошибки, поэтому важно тестировать загрузку на малом объёме данных и затем масштабировать.
- При изменении внешнего формата может потребоваться миграция схемы или переразметка внешних файлов.
3) Конфигурация и безопасность
- Брокеры требуют конфигурации доступа к внешним источникам: ключи доступа, секреты, endpoint, регион, протокол TLS, аутентификация пользователя, правила доступа к каталогам и файлам.
- Рекомендовано хранить ключи безопасно (например, в секрет-хранилищах) и использовать временные креды там, где есть такая возможность.
- Обеспечение доступа: управление ролями, политиками в внешнем хранилище, аудит доступа к данным через Broker и Doris.
4) Управление версиями и совместимостью
- В разных версиях Doris могут меняться параметры и синтаксис создания таблиц через Broker. Всегда проверяйте документацию именно для вашей версии Doris и тестируйте изменения в тестовой среде перед применением в проде.
- Обновления форматов внешних файлов (например, обновление структур Parquet или изменение схемы JSON) требуют синхронизации с таблицами Doris: возможно потребуется переработать схемы, переформатировать данные или пересоздать таблицу.
5) Мониторинг и диагностика
- Включайте мониторинг чтения через Broker: сколько файлов прочитано, средний размер файлов, задержки чтения, пропуск ошибок чтения.
- Наблюдайте за потреблением памяти и CPU при чтении больших наборов файлов через Broker.
- В случае проблем с доступом к внешнему хранилищу смотрите логи брокера, сетевые маршруты и настройки безопасности.
6) Практические ограничения и риски
- Риск задержек в доступе к внешним источникам: сетевые проблемы, перегрузка внешних хранилищ.
- В случае изменений формата или схемы внешних файлов время отклика запросов может расти, если Doris не может автоматически сопоставить новые поля.
- Мелкие файлы: множество маленьких файлов ведет к неэффективности чтения и большему числу задач брокера; избегайте мелких файлов и применяйте утилизацию большого размера файлов.
- Безопасность: хранение ключей доступа и конфиденциальной информации требует внимания к политике доступа и аудитам.
- Обновления и совместимость: совместимость между версиями Doris и версиями внешнего хранилища может влиять на поддержку форматов или на производительность.
Риски и ограничения
- Неполная поддержка сложных структур в JSON через Broker: вложенные и переменные структуры требуют аккуратной обработки и возможной нормализации на этапе схемы Doris.
- Непредсказуемая эволюция схем в Parquet: файлы могут изменяться и добавлять новые поля, что может потребовать пересмотра DDL и миграции.
- Ограничения производительности при чтении очень большого количества мелких файлов; для эффективной работы требуется грамотная организация данных и партирования.
- Зависимость от внешних хранилищ: любые сбои в сети или проблемы в конфигурации хранилища прямо влияют на задержки аналитических запросов.
- Возможны нюансы лицензирования и юридические требования к данным в российском контексте: использование российских облачных сервисов или локальных решений может требовать дополнительной сертификации и соответствия требованиям по защите данных.
Источники данных и форматы Parquet, CSV и JSON через Broker в Doris представляют собой мощный инструмент для интеграции внешних данных без лишних копирований и с сохранением производительности аналитических запросов. Parquet обеспечивает эффективную работу с большими наборами данных и сложной схемой, CSV удобен для простых и прозрачных источников, а JSON дает гибкость для полуструктурированных данных. Важно понимать архитектуру Broker, особенности каждого формата, требования к схеме и практические ограничения, чтобы строить устойчивые конвейеры данных. При выборе подхода полезно учитывать доступность внешнего хранилища (и его совместимость с S3 API), требования по безопасности и необходимую частоту обновления данных. В最终, ваша задача как инженера — обеспечить корректную настройку брокера, согласование схемы, оптимизацию чтения файлов и мониторинг производительности, чтобы достичь требуемой скорости анализа и точности результатов.
Вопрос–Ответ (FAQ)
1) Что такое Broker в Doris и зачем он нужен?
Broker в Doris — это механизм доступа к внешним хранилищам данных (HDFS, S3, локальные файлы и т. д.) без копирования данных в Doris. Он позволяет читать данные в форматах Parquet, CSV и JSON напрямую из внешнего хранилища и обрабатывать их в аналитических запросах, используя механизмы параллельного чтения и оптимизации выполнения.
2) Какие форматы данных поддерживаются через Broker и в каком порядке они лучше использовать?
Parquet наиболее эффективен для больших объемов данных и сложных полей, а также для запросов с фильтрами и агрегациями. CSV прост, но требует строгой подготовки данных и схемы. JSON гибок для вложенных структур, особенно полезен для событий и логов. В зависимости от источника и требований к скорости анализа можно комбинировать эти форматы в разных таблицах через Broker.
3) Как организовать доступ к внешнему хранилищу через брокер — какие базовые шаги?
Базовые шаги включают: регистрацию брокера к источнику данных (указать тип хранилища, адреса, креды), создание таблицы в Doris с использованием брокера и указанием формата, пути к данным и параметров формата (разделитель, кодировка, наличие заголовков и т. д.). Затем выполняются запросы как к обычной таблице Doris.
4) Какие риски характерны для внедрения Broker и как их минимизировать?
Ключевые риски: задержки из-за сетевых проблем, несовпадение схем между внешними файлами и Doris, проблемы с маленькими файлами, проблемы безопасности и управления кредами. Минимизировать можно через: грамотную организацию данных (оптимальные размеры фа йлов), тестирование на тестовом наборе данных, безопасное хранение ключей, мониторинг производительности и устойчивую архитектуру доступа к внешнему хранилищу.
5) Какие практические ограничения встречаются в работе с Parquet/CSV/JSON через Broker?
Parquet требует совместимости типов и хорошей организации файлов, CSV — аккуратного определения схемы и корректного разделителя, кодировки и наличия заголовков, JSON — аккуратного отображения вложенных структур на столбцы. Также возможны ограничения на версию Doris и на количество файлов, влияющее на параллелизм.
6) Какие российские решения или параметры можно использовать для внешних хранилищ?
Российские решения включают использование Яндекс Облака Объектного Хранилища (которое имеет S3-совместимый API) через Doris Broker, а также локальные решения на базе HDFS/Apache Hadoop, где встречаются Parquet-форматы и S3-совместимые интерфейсы. Важно учитывать региональные требования и соответствие политики безопасности при работе с данными.
7) Какой подход к настройке и мониторингу брокера рекомендуется для начинающего?
Начинающим рекомендуется начинать с простого сценария: один брокер, один формат (чаще Parquet), несколько файлов среднего размера, явная схема в Doris, тестовый набор данных. По мере набора опыта добавляйте новые источники, проверяйте параллелизм и разделение файлов, настраивайте мониторинг чтения (скорость, задержки, ошибки) и управляйте доступами к хранению.
8) Какие практические советы можно привести для повышения производительности чтения через Broker?
- Используйте Parquet вместо CSV или JSON там, где возможно, из-за лучшей компрессии и предикат-пушдауна.
- Разделяйте данные на файлы разумного размера и избегайте очень большого количества мелких файлов.
- Устанавливайте оптимальные параметры параллелизма и распараллеливания чтения файлов через Broker.
- Следите за схемой и синхронизацией типов между внешними данными и Doris.
- Реализуйте мониторинг и алерты на задержки доступа к внешнему хранилищу и на ошибки чтения файлов.
9) Что делать в случае изменения схемы внешних данных (например, добавление нового поля)?
Проверьте совместимость типов и обновите DDL в Doris, при необходимости переразметьте данные или добавьте новые столбцы в таблицу. В случае Parquet можно учитывать эволюцию схемы в метаданных файла, но Doris будет ожидать соответствие, поэтому заранее планируйте изменение схемы и тестируйте на тестовом окружении.
10) Какую роль играет безопасность при использовании Broker в Doris?
Безопасность критична: хранение ключей доступа к внешним хранилищам, использование TLS, настройка прав доступа к каталогам и файлам, аудит доступа и мониторинг. Рекомендуется не хранить креды напрямую в DDL, использовать секрет-менеджеры и временные креды там, где возможно, и ограничивать доступ к внешним ресурсам по ролям и политикам.




