CREATE ROUTINE LOAD
Описание
Функция Routine Load позволяет пользователям создавать постоянно действующую задачу загрузки, которая непрерывно считывает данные из указанного источника и загружает их в Doris.
В настоящее время поддерживается только загрузка данных в формате CSV или JSON из Kafka без аутентификации или с аутентификацией по SSL. Пример загрузки данных в формате JSON
Синтаксис
CREATE ROUTINE LOAD [<db>.]<job_name> [ON <tbl_name>]
[<merge_type>]
[<load_properties>]
[<job_properties>]
FROM <data_source> [<data_source_properties>]
[COMMENT "<comment>"]
Обязательные параметры
1. [<db>.]<job_name>
Имя задания загрузки. В одной базе данных одновременно может выполняться только одно задание с таким именем.
2. FROM <data_source>
Тип источника данных. В настоящее время поддерживается: KAFKA
3. <data_source_properties>
<kafka_broker_list>Данные для подключения к брокерам Kafka. Формат: ip:host. Несколько брокеров разделяются запятыми.
"kafka_broker_list" = "broker1:9092,broker2:9092"
<kafka_topic>Задает топик Kafka для подписки.
"kafka_topic" = "my_topic"
Необязательные параметры
1. <tbl_name>
Задает имя таблицы, в которую загружаются данные. Это необязательный параметр. Если он не указан, используется динамический выбор таблицы, для которого данные в Kafka должны содержать имя таблицы.
В настоящее время имя таблицы можно получить только из Value сообщения Kafka. Данные должны соответствовать следующему формату, например для JSON:
table_name|{"col1": "val1", "col2": "val2"}, гдеtbl_name— имя таблицы, а|— разделитель между именем таблицы и ее данными.Для данных в формате CSV используется аналогичный формат:
table_name|val1,val2,val3. Обратите внимание:table_nameздесь должно совпадать с именем таблицы в Doris, иначе загрузка завершится ошибкой.Совет: динамические таблицы не поддерживают параметр
columns_mapping. Если структура ваших таблиц соответствует структуре таблиц в Doris и требуется загрузить данные для большого количества таблиц, этот способ будет наиболее подходящим.
2. <merge_type>
Тип слияния данных. По умолчанию используется APPEND: загружаемые данные записываются обычными операциями добавления. Типы MERGE и DELETE доступны только для таблиц модели Unique Key. Тип MERGE необходимо использовать вместе с предложением [DELETE ON], чтобы задать столбец Delete Flag. Тип DELETE означает, что все загружаемые данные обозначают удаление.
Совет: при динамической загрузке в несколько таблиц этот параметр должен соответствовать типу каждой динамической таблицы, иначе загрузка завершится ошибкой.
3. <load_properties>
Описывает загружаемые данные. Состав параметра:
[column_separator],
[columns_mapping],
[preceding_filter],
[where_predicates],
[partitions],
[DELETE ON],
[ORDER BY]
<column_separator>Задает разделитель столбцов. Значение по умолчанию:
\t
COLUMNS TERMINATED BY ","
<columns_mapping>Задает сопоставление столбцов файла со столбцами таблицы, а также различные преобразования столбцов. Подробное описание приведено в документе [Сопоставление, преобразование и фильтрация столбцов].
(k1, k2, tmpk1, k3 = tmpk1 + 1)Совет: динамические таблицы не поддерживают этот параметр.
<preceding_filter>Фильтрует исходные данные. Подробное описание приведено в документе [Сопоставление, преобразование и фильтрация столбцов].
WHERE k1 > 100 and k2 = 1000Совет: динамические таблицы не поддерживают этот параметр.
<where_predicates>Фильтрует загружаемые данные по условиям. Подробное описание приведено в документе [Сопоставление, преобразование и фильтрация столбцов].
WHERE k1 > 100 and k2 = 1000Совет: при динамической загрузке в несколько таблиц этот параметр должен соответствовать столбцам каждой динамической таблицы, иначе загрузка завершится ошибкой. При такой загрузке рекомендуем использовать этот параметр только для столбцов, общих для всех таблиц.
<partitions>Задает разделы целевой таблицы, в которые нужно загрузить данные. Если параметр не указан, данные автоматически загружаются в соответствующие разделы.
PARTITION(p1, p2, p3)Совет: при динамической загрузке в несколько таблиц этот параметр должен соответствовать каждой динамической таблице, иначе загрузка завершится ошибкой.
<DELETE ON>Должен использоваться с режимом загрузки MERGE и применим только к таблицам модели Unique Key. Задает столбец Delete Flag и выражение для его вычисления в загружаемых данных.
DELETE ON v3 >100Совет: при динамической загрузке в несколько таблиц этот параметр должен соответствовать каждой динамической таблице, иначе загрузка завершится ошибкой.
<ORDER BY>Применим только к таблицам модели Unique Key. Задает столбец Sequence Col в загружаемых данных. В основном используется для обеспечения порядка данных при загрузке.
Совет: при динамической загрузке в несколько таблиц этот параметр должен соответствовать каждой динамической таблице, иначе загрузка завершится ошибкой.
4. <job_properties>
Задает общие параметры заданий Routine Load.
PROPERTIES (
"key1" = "val1",
"key2" = "val2"
)В настоящее время поддерживаются следующие параметры:
<desired_concurrent_number>Желаемое число параллельно выполняемых задач. Задание Routine Load разделяется на несколько подзадач. Этот параметр задает, сколько задач одного задания могут выполняться одновременно. Значение должно быть больше 0. Значение по умолчанию: 5.
Это число не является фактическим числом параллельно выполняемых задач. Фактическое значение определяется с учетом количества узлов кластера, нагрузки и состояния источника данных.
"desired_concurrent_number" = "3"
<max_batch_interval>/<max_batch_rows>/<max_batch_size>Эти три параметра задают:
- Максимальное время выполнения каждой подзадачи в секундах. Значение должно быть больше или равно 1. Значение по умолчанию: 10.
- Максимальное количество строк, считываемых каждой подзадачей. Значение должно быть больше или равно 200000. Значение по умолчанию: 20000000.
- Максимальное количество байтов, считываемых каждой подзадачей. Единица измерения — байты, диапазон — от 100MB до 10GB. Значение по умолчанию: 1G.
Эти три параметра управляют временем выполнения и объемом обработки подзадачи. Когда любой из них достигает порогового значения, задача завершается.
"max_batch_interval" = "20",
"max_batch_rows" = "300000",
"max_batch_size" = "209715200"
<max_error_number>Максимальное допустимое количество ошибочных строк в окне выборки. Значение должно быть больше или равно 0. Значение по умолчанию: 0, то есть ошибочные строки не допускаются.
Размер окна выборки составляет
max_batch_rows * 10. Если количество ошибочных строк в окне выборки превышаетmax_error_number, задание Routine Load приостанавливается и требует ручной проверки проблем с качеством данных.Строки, отфильтрованные условиями where, не считаются ошибочными.
<strict_mode>Определяет, включен ли строгий режим. По умолчанию он отключен. Если режим включен и преобразование типа столбца превращает исходное значение, отличное от NULL, в NULL, такая строка отфильтровывается. Задается следующим образом:
"strict_mode" = "true"Строгий режим означает строгую фильтрацию при преобразовании типов столбцов во время загрузки. Применяются следующие правила:
- Если строгий режим установлен в true, при преобразовании типов столбцов ошибочные данные отфильтровываются. Здесь под ошибочными понимаются исходные данные, которые не равны NULL, но после преобразования типа столбца дают значение NULL.
- Строгий режим не влияет на столбцы, значения которых формируются с помощью функций преобразования при загрузке.
- Для столбцов с ограничениями диапазона строгий режим не влияет на данные, которые проходят преобразование типа, но не соответствуют ограничениям диапазона. Например, если тип — decimal(1,0), а исходное значение — 10, оно проходит преобразование типа, но выходит за объявленный диапазон столбца. Строгий режим на такие данные не влияет.
Связь строгого режима с загрузкой исходных данных
Пример для столбца типа TinyInt
Примечание: столбцы таблицы допускают значения NULL
исходные данные пример исходных данных string в int strict_mode результат null \NN/A true или false NULL not null aaa или 2000 NULL true некорректные данные (отфильтрованы) not null aaa NULL false NULL not null 1 1 true или false корректные данные Пример для столбца типа Decimal(1,0)
Примечание: столбцы таблицы допускают значения NULL
исходные данные пример исходных данных string в int strict_mode результат null \NN/A true или false NULL not null aaa NULL true некорректные данные (отфильтрованы) not null aaa NULL false NULL not null 1 или 10 1 true или false корректные данные Примечание: хотя значение 10 выходит за допустимый диапазон, его тип соответствует требованиям decimal, поэтому строгий режим на него не влияет. Значение 10 в итоге будет отфильтровано на других этапах обработки ETL, но не в строгом режиме.
<timezone>Задает часовой пояс задания загрузки. По умолчанию используется значение параметра timezone текущего сеанса. Этот параметр влияет на результаты всех функций, связанных с часовыми поясами и используемых при загрузке.
"timezone" = "Asia/Shanghai"
<format>Задает формат загружаемых данных. По умолчанию используется CSV, также поддерживается JSON.
"format" = "json"
<jsonpaths>При загрузке данных в формате JSON параметр jsonpaths позволяет указать поля, которые нужно извлечь из данных JSON.
-H "jsonpaths: [\"$.k2\", \"$.k1\"]"
<strip_outer_array>При загрузке данных в формате JSON значение true параметра strip_outer_array указывает, что данные JSON представлены массивом, каждый элемент которого обрабатывается как отдельная строка. Значение по умолчанию: false.
-H "strip_outer_array: true"
<json_root>При загрузке данных в формате JSON параметр json_root позволяет указать корневой узел данных JSON. Doris разбирает элементы, извлеченные из корневого узла с помощью json_root. По умолчанию значение пустое.
-H "json_root: $.RECORDS"
<send_batch_parallelism>Целочисленный параметр, задающий степень параллелизма при отправке пакетов данных. Если значение превышает
max_send_batch_parallelism_per_jobв конфигурации BE, узел BE, выполняющий роль координатора, использует значениеmax_send_batch_parallelism_per_job.
"send_batch_parallelism" = "10"
<load_to_single_tablet>Логический параметр. Значение true позволяет задаче загружать данные только в один tablet соответствующего раздела. Значение по умолчанию: false. Этот параметр разрешено задавать только при загрузке данных в таблицы olap со случайным распределением по бакетам.
"load_to_single_tablet" = "true"
<partial_columns>Логический параметр. Значение true включает частичное обновление столбцов. Значение по умолчанию: false. Этот параметр разрешено задавать только для таблиц модели Unique, использующих Merge on Write. Динамическая загрузка в несколько таблиц не поддерживает этот параметр.
"partial_columns" = "true"
<max_filter_ratio>Максимальная допустимая доля отфильтрованных строк в окне выборки. Значение должно быть больше или равно 0 и меньше или равно 1. Значение по умолчанию: 0.
Размер окна выборки составляет
max_batch_rows * 10. Если в окне выборки отношение количества ошибочных строк к общему количеству строк превышаетmax_filter_ratio, задание Routine Load приостанавливается и требует ручной проверки проблем с качеством данных.Строки, отфильтрованные условиями where, не считаются ошибочными.
<enclose>Символ обрамления. Если поля данных CSV содержат разделители строк или столбцов, для защиты от случайного разделения можно задать однобайтовый символ обрамления. Например, если разделитель столбцов — ",", а символ обрамления — "'", то в данных "a,'b,c'" значение "b,c" будет разобрано как одно поле.
Примечание: если enclose установлен в
", trim_double_quotes должен быть установлен в true.
<escape>Символ экранирования. Используется для экранирования символов в полях CSV, совпадающих с символом обрамления. Например, если данные имеют вид "a,'b,'c'", символ обрамления — "'", и требуется разобрать "b,'c" как одно поле, нужно указать однобайтовый символ экранирования, например
\, и изменить данные наa,'b,\'c'.
5. Необязательные свойства в data_source_properties
<kafka_partitions>/<kafka_offsets>Задает разделы Kafka для подписки и начальное смещение для каждого раздела. Если указано время, чтение начнется с ближайшего смещения, соответствующего этому времени или более позднему.
В качестве offset можно указать конкретное смещение, большее или равное 0, либо:
OFFSET_BEGINNING: начать подписку с начала имеющихся данных.OFFSET_END: начать подписку с конца.- Время, например: "2021-05-22 11:00:00"
Если параметр не указан, по умолчанию выполняется подписка на все разделы топика с
OFFSET_END."kafka_partitions" = "0,1,2,3",
"kafka_offsets" = "101,0,OFFSET_BEGINNING,OFFSET_END""kafka_partitions" = "0,1,2,3",
"kafka_offsets" = "2021-05-22 11:00:00,2021-05-22 11:00:00,2021-05-22 11:00:00"Примечание: формат времени нельзя смешивать с форматом OFFSET.
<property>Задает пользовательские параметры Kafka. Работает так же, как параметр "--property" в оболочке Kafka.
Если значением параметра является файл, перед значением нужно добавить ключевое слово "FILE:".
О создании файлов см. документацию команды CREATE FILE.
Другие поддерживаемые пользовательские параметры приведены среди настроек клиента в официальной документации CONFIGURATION библиотеки librdkafka. Например:
"property.client.id" = "12345",
"property.ssl.ca.location" = "FILE:ca.pem"2.1 При подключении к Kafka по SSL необходимо указать следующие параметры:
```text
"property.security.protocol" = "ssl",
"property.ssl.ca.location" = "FILE:ca.pem",
"property.ssl.certificate.location" = "FILE:client.pem",
"property.ssl.key.location" = "FILE:client.key",
"property.ssl.key.password" = "abcdefg"
```
Among them:
`property.security.protocol` and `property.ssl.ca.location` are required, used to specify the connection method as SSL and the location of the CA certificate.
If client authentication is enabled on the Kafka server side, the following also need to be set:
```text
"property.ssl.certificate.location"
"property.ssl.key.location"
"property.ssl.key.password"
```
Used to specify the client's public key, private key, and private key password respectively.2.2 Задание начального смещения по умолчанию для разделов Kafka
Если
<kafka_partitions>/<kafka_offsets>не указан, по умолчанию данные считываются из всех разделов.В этом случае начальное смещение можно задать с помощью
<kafka_default_offsets>. Значение по умолчанию —OFFSET_END, то есть подписка начинается с конца.Пример:
"property.kafka_default_offsets" = "OFFSET_BEGINNING"
6. COMMENT
Comment information for the routine load task.
Требования к правам доступа
Пользователям, выполняющим эту команду SQL, необходимы как минимум следующие права:
| Право | Объект | Примечания |
|---|---|---|
| LOAD_PRIV | Таблица | CREATE ROUTINE LOAD относится к операции LOAD для таблицы |
Примечания по использованию
- Динамические таблицы не поддерживают параметр
columns_mapping - При динамической загрузке в несколько таблиц такие параметры, как merge_type, where_predicates и другие, должны соответствовать требованиям каждой динамической таблицы
- Формат времени нельзя смешивать с форматом OFFSET
kafka_partitionsиkafka_offsetsдолжны соответствовать друг другу один к одному- Если
encloseустановлен в",trim_double_quotesдолжен быть установлен в true.
Примеры
Полные примеры загрузки CSV/JSON из Kafka, аутентификации по SSL, режима Merge, столбцов последовательности и других возможностей приведены в разделе Routine Load руководства по загрузке данных.