Одноразовый импорт из S3
Одноразовый импорт из S3 является экспериментальной функцией и поддерживается начиная с Doris 4.1.6.
При одноразовом импорте режим ONE_TIME используется для пакетной загрузки соответствующих файлов S3 в существующую таблицу Doris. После фиксации последнего пакета задание переходит в FINISHED. Такой режим подходит для инициализации исторических данных, разовой офлайн-загрузки или дозагрузки в отдельном префиксе.
Подготовьте все файлы до создания задания и сохраняйте стабильность исходного пути во время импорта. Завершенное задание не ожидает появления новых файлов. Для непрерывного импорта выберите упорядоченный импорт или импорт по уведомлениям.
Быстрый старт
Шаг 1: подготовьте целевую таблицу и файлы
Учетной записи, выполняющей операцию, требуется привилегия LOAD для целевой таблицы и соответствующие привилегии для создания базы данных и таблицы. Учетные данные S3 должны иметь права s3:ListBucket и s3:GetObject. Узлы Doris должны иметь доступ к конечной точке S3.
CREATE DATABASE IF NOT EXISTS db1;
CREATE TABLE db1.tbl1 (
id INT,
name STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
В этом примере для кластера с одним BE используется одна реплика. Установите число реплик в соответствии с вашим рабочим кластером. Загрузите приведенные ниже данные в s3://bucket/001.csv и замените bucket, endpoint, Region и учетные данные в SQL фактическими значениями:
1,Alice
2,Bob
Шаг 2: создайте задание
CREATE JOB s3_one_time_job
PROPERTIES (
"s3.ingestion_mode" = "ONE_TIME",
"s3.max_batch_files" = "256",
"s3.max_batch_bytes" = "10737418240"
)
ON STREAMING DO
INSERT INTO db1.tbl1
SELECT * FROM S3(
"uri" = "s3://bucket/*.csv",
"format" = "csv",
"column_separator" = ",",
"s3.region" = "<s3_region>",
"s3.endpoint" = "<s3_endpoint>",
"s3.access_key" = "<s3_access_key>",
"s3.secret_key" = "<s3_secret_key>"
);
Проверка завершения
Запросите состояние задания:
SELECT Name, ExecuteType, Status
FROM jobs("type" = "insert")
WHERE Name = 's3_one_time_job';
Ожидаемый результат:
Name ExecuteType Status
s3_one_time_job STREAMING FINISHED
Выполните SELECT * FROM db1.tbl1 ORDER BY id;. Ожидаемый результат:
id name
1 Alice
2 Bob
Ограничения и восстановление
ONE_TIME не делает снимок каталога при создании. Файлы перечисляются пакетами, и задание останавливается после фиксации последнего пакета. Файлы, добавленные после зафиксированного курсора, не будут дозагружены. Подготовьте все исходные файлы до создания задания и прекратите запись или перезапись объектов по этому пути во время импорта. После перезапуска FE задание возобновляется с зафиксированного прогресса и переходит в FINISHED, когда обработка завершена.
Параметры
Настройте следующие параметры в PROPERTIES задания. Параметры подключения к S3, учетные данные и параметры формата файлов указываются в S3(...).
| Параметр | Тип | Значение по умолчанию | Обязательно | Описание |
|---|---|---|---|---|
s3.ingestion_mode | Строка | ORDERED_LIST | Да | Установите ONE_TIME. После создания изменить нельзя. |
s3.max_batch_files | Положительное целое число | 256 | Нет | Порог количества файлов в пакете. |
s3.max_batch_bytes | Целое число | 10737418240 | Нет | Порог количества байт в пакете: от 104857600 до 10737418240. Суффиксы единиц не принимаются. |
max_interval | Положительное целое число | 10 | Нет | Интервал планирования при простое, в секундах. |
Не задавайте offset, s3.event.source или s3.sqs.queue_url. max_interval не заставляет завершенное задание ждать появления новых файлов. Настройки сеанса см. в INSERT INTO SELECT.
Режим импорта и URI S3 нельзя изменить после создания. Чтобы изменить режим или путь, создайте другое задание.
Устранение неполадок и рекомендации
- Создание завершается ошибкой: убедитесь, что существует соответствующий непустой файл, доступный для чтения, чтобы S3 TVF мог вывести схему.
- Задание не завершается: проверьте
Status,ErrorMsgи задачи с ошибками. Недоступные для чтения объекты и ошибки формата могут помешать фиксации пакета. - Новые файлы не читаются после завершения:
FINISHED— конечное состояние. Поместите следующий пакет в отдельный префикс и создайте новое задание, чтобы избежать повторной загрузки старых данных. - Сочетание с импортом по уведомлениям: используйте непересекающиеся префиксы для исторических и поступающих данных либо обрабатывайте пересечения и дубликаты в приложении.
О приостановке, возобновлении и проверке задач см. Обзор непрерывной загрузки. Чтобы изменить задание, см. ALTER JOB.