Загрузка данных из локальной файловой системы
Selena предоставляет два метода загрузки данных из локальной файловой системы:
- Синхронная загрузка с использованием Stream Load
- Асинхронная загрузка с использованием Broker Load
Каждый из этих вариантов имеет свои преимущества:
- Stream Load поддерживает форматы файлов CSV и JSON. Этот метод рекомендуется, если вы хотите загрузить данные из небольшого количества файлов, размер которых не превышает 10 ГБ.
- Broker Load поддерживает форматы файлов Parquet, ORC, CSV и JSON (формат JSON поддерживается начиная с версии 1.5.0). Этот метод рекомендуется, если вы хотите загрузить данные из большого количества файлов, размер которых превышает 10 ГБ, или если файлы хранятся на сетевом устройстве хранения (NAS). Использование Broker Load для загрузки данных из локальной файловой системы поддерживается начиная с версии 1.5.0.
Для данных CSV обратите внимание на следующие моменты:
- Вы можете использовать строку UTF-8, такую как запятая (,), табуляция или вертикальная черта (|), длина которой не превышает 50 байт, в качестве разделителя текста.
- Нулевые значения обозначаются с помощью
\N. Например, файл данных состоит из трех столбцов, и запись из этого файла данных содержит данные в первом и третьем столбцах, но не содержит данных во в тором столбце. В этой ситуации вам нужно использовать\Nво втором столбце для обозначения нулевого значения. Это означает, что запись должна быть составлена какa,\N,bвместоa,,b.a,,bозначает, что второй столбец записи содержит пустую строку.
Stream Load и Broker Load поддерживают преобразование данных при загрузке и поддерживают изменения данных, выполняемые операциями UPSERT и DELETE во время загрузки данных. Для получения дополнительной информации см. Преобразование данных при загрузке и Изменение данных через загрузку.
Перед началом работы
Проверка привилегий
Вы можете загружать данные в таблицы Selena только как пользователь, имеющий привилегию INSERT на эти таблицы Selena. Если у вас нет привилегии INSERT, следуйте инструкциям в GRANT, чтобы предоставить привилегию INSERT пользователю, которого вы используете для подключения к вашему кластеру Selena. Синтаксис: GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}.
Проверка конфигурации сети
Убедитесь, что машина, на которой находятся данные, которые вы хотите загрузить, может получить доступ к узлам FE и BE кластера Selena через http_port (по умолчанию: 8030) и be_http_port (по умолчанию: 8040) соответственно.
Загрузка из локальной файловой системы через Stream Load
Stream Load — это синхронный метод загрузки на основе HTTP PUT. После отправки задания загрузки Selena синхронно выполняет задание и возвращает результат задания после его завершения. Вы можете определить, было ли задание успешным, на основе результата задания.
УВЕДОМЛЕНИЕ
После загрузки данных в таблицу Selena с помощью Stream Load данные материализованных представлений, созданных на основе этой таблицы, также обновляются.
Как это работает
Вы можете отправить запрос на загрузку с вашего клиента на FE согласно HTTP, и FE затем использует HTTP-перенаправление для пересылки запроса на загрузку конкретному BE или CN. Вы также можете напрямую отправить запрос на загрузку с вашего клиента на выбранный вами BE или CN.
Если вы отправляете запросы на загрузку на FE, FE использует механизм опроса для определения того, какой BE или CN будет служить координатором для получения и обработки запросов на загрузку. Механизм опроса помогает достичь балансировки нагрузки в вашем кластере Selena. Поэтому мы рекомендуем отправлять запросы на загрузку на FE.
BE или CN, который получает запрос на загрузку, работает как Coordinator BE или CN для разделения данных на основе используемой схемы на части и назначения каждой части данных другим участвующим BE или CN. После завершения загрузки Coordinator BE или CN возвращает результат задания загрузки вашему клиенту. Обратите внимание, что если вы остановите Coordinator BE или CN во время загрузки, задание загрузки завершится неудачей.
На следующем рисунке показан рабочий процесс задания Stream Load.

Ограничения
Stream Load не поддерживает загрузку данных CSV-файла, содержащего столбец в формате JSON.
Типичный пример
В этом разделе используется curl в качестве примера для описания того, как загрузить данные CSV или JSON файла из вашей локальной файловой системы в Selena. Для подробного описания синтаксиса и параметров см. STREAM LOAD.
Обратите внимание, что в Selena некоторые литералы используются как зарезервированные ключевые слова языком SQL. Не используйте эти ключевые слова напрямую в SQL-операторах. Если вы хотите использовать такое ключевое слово в SQL-операторе, заключите его в пару обратных кавычек (`). См. Ключевые слова.
Загрузка данных CSV
Подготовка наборов данных
В вашей локальной файловой системе создайте CSV-файл с именем example1.csv. Файл состоит из трех столбцов, которые представляют ID пользователя, имя пользователя и оценку пользователя по порядку.
1,Lily,23
2,Rose,23
3,Alice,24
4,Julia,25
Создание базы данных и таблицы
Создайте базу данных и переключитесь на неё:
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;
Создайте таблицу Primary Key с именем table1. Таблица состоит из трех столбцов: id, name и score, где id является первичным ключом.
CREATE TABLE `table1`
(
`id` int(11) NOT NULL COMMENT "user ID",
`name` varchar(65533) NULL COMMENT "user name",
`score` int(11) NOT NULL COMMENT "user score"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`);
Начиная с версии 1.5.0, Selena может автоматически устанавливать количество корзин (BUCKETS) при создании таблицы или добавлении раздела. Вам больше не нужно вручную устанавливать количество корзин. Для получения подробной информации см. установка количества корзин.
Запуск Stream Load
Выполните следующую команду для загрузки данных из example1.csv в table1:
curl --location-trusted -u <username>:<password> -H "label:123" \
-H "Expect:100-continue" \
-H "column_separator:," \
-H "columns: id, name, score" \
-T example1.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/mydatabase/table1/_stream_load
- Если вы используете учетную запись, для которой не установлен пароль, вам нужно ввести только
<username>:. - Вы можете использовать SHOW FRONTENDS для просмотра IP-адреса и HTTP-порта узла FE.
example1.csv состоит из трех столбцов, которые разделены запятыми (,) и могут быть последовательно сопоставлены со столбцами id, name и score таблицы table1. Поэтому вам нужно использовать параметр column_separator для указания запятой (,) в качестве разделителя столбцов. Вам также нужно использовать параметр columns для временного именования трех столбцов example1.csv как id, name и score, которые последовательно сопоставляются с тремя столбцами table1.
После завершения загрузки вы можете запросить table1, чтобы убедиться, что загрузка прошла успешно:
SELECT * FROM table1;
+------+-------+-------+
| id | name | score |
+------+-------+-------+
| 1 | Lily | 23 |
| 2 | Rose | 23 |
| 3 | Alice | 24 |
| 4 | Julia | 25 |
+------+-------+-------+
4 rows in set (0.00 sec)
Загрузка данных JSON
Начиная с версии 1.5.0, Stream Load поддерживает сжатие данных JSON во время передачи, что снижает нагрузку на пропускную способность сети. Пользователи могут указывать различные алгоритмы сжатия, используя параметры compression и Content-Encoding. Поддерживаемые алгоритмы сжатия включают GZIP, BZIP2, LZ4_FRAME и ZSTD. Для синтаксиса см. STREAM LOAD.
Подготовка наборов данных
В вашей локальной файловой системе создайте JSON-файл с именем example2.json. Файл состоит из двух столбцов, которые представляют ID города и название города по порядку.
{"name": "Beijing", "code": 2}
Создание базы данных и таблицы
Создайте баз у данных и переключитесь на неё:
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;
Создайте таблицу Primary Key с именем table2. Таблица состоит из двух столбцов: id и city, где id является первичным ключом.
CREATE TABLE `table2`
(
`id` int(11) NOT NULL COMMENT "city ID",
`city` varchar(65533) NULL COMMENT "city name"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`);
Начиная с версии 1.5.0, Selena может автоматически устанавливать количество корзин (BUCKETS) при создании таблицы или добавлении раздела. Вам больше не нужно вручную устанавливать количество корзин. Для получения подробной информации см. установка количества корзин.
Запуск Stream Load
Выполните следующую команду для загрузки данных из example2.json в table2:
curl -v --location-trusted -u <username>:<password> -H "strict_mode: true" \
-H "Expect:100-continue" \
-H "format: json" -H "jsonpaths: [\"$.name\", \"$.code\"]" \
-H "columns: city,tmp_id, id = tmp_id * 100" \
-T example2.json -XPUT \
http://<fe_host>:<fe_http_port>/api/mydatabase/table2/_stream_load
- Если вы используете учетную запись, для которой не установлен пароль, вам нужно ввести только
<username>:. - Вы можете использовать SHOW FRONTENDS для просмотра IP-адреса и HTTP-порта узла FE.
example2.json состоит из двух ключей, name и code, которые сопоставляются со столбцами id и city таблицы table2, как показано на следующем рисунке.

Сопоставления, показанные на предыдущем рисунке, описываются следующим образом:
-
Selena извлекает ключи
nameиcodeизexample2.jsonи сопоставляет их с полямиnameиcode, объявленными в параметреjsonpaths. -
Selena извлекает поля
nameиcode, объявленные в параметреjsonpaths, и сопоставляет их по порядку с полямиcityиtmp_id, объявленными в параметреcolumns. -
Selena извлекает поля
cityиtmp_id, объявленные в параметреcolumns, и сопоставляет их по имени со столбцамиcityиidтаблицыtable2.
В предыдущем примере зна чение code в example2.json умножается на 100 перед загрузкой в столбец id таблицы table2.
Для подробных сопоставлений между jsonpaths, columns и столбцами таблицы Selena см. раздел "Сопоставления столбцов" в STREAM LOAD.
После завершения загрузки вы можете запросить table2, чтобы убедиться, что загрузка прошла успешно:
SELECT * FROM table2;
+------+--------+
| id | city |
+------+--------+
| 200 | Beijing|
+------+--------+
4 rows in set (0.01 sec)