STREAM LOAD
Selena предоставляет метод загрузки на основе HTTP — STREAM LOAD, который помогает загружать данные из локальной файловой системы или из источника потоковых данных. После отправки загрузочного задания Selena синхронно выполняет задание и возвращает результат задания после его завершения. Вы можете определить, было ли задание успешным, на основе результата задания. Для получения информации о сценариях применения, ограничениях, принципах и поддерживаемых форматах файлов данных Stream Load см. Loading from a local file system via Stream Load.
Для быстрого старта с Selena см. раздел Быстрый старт.
Начиная с версии 3.2.7, Stream Load поддерживает сжатие данных JSON во время передачи, что снижает нагрузку на сетевую пропускную способность. Пользователи могут указать различные алгоритмы сжатия, используя параметры compression и Content-Encoding. Поддерживаемые алгор итмы сжатия включают GZIP, BZIP2, LZ4_FRAME и ZSTD. Для получения дополнительной информации см. data_desc.
Начиная с версии 3.4.0, система поддерживает объединение нескольких запросов Stream Load. Для получения дополнительной информации см. Параметры Merge Commit.
ПРИМЕЧАНИЕ
- После загрузки данных в таблицу Selena с помощью Stream Load данные материализованных представлений, созданных для этой таблицы, также обновляются.
- Вы можете загружать данные в таблицы Selena только как пользователь, имеющий привилегию INSERT для этих таблиц Selena. Если у вас нет привилегии INSERT, следуйте инструкциям, приведенным в GRANT, чтобы предоставить привилегию INSERT пользователю, который используется для подключения к вашему кластеру Selena.
Синтаксис
curl --location-trusted -u <username>:<password> -XPUT <url>
(
data_desc
)
[opt_properties]
В этом разделе используется curl в качестве примера для описания того, как загружать данные с помощью Stream Load. В дополнение к curl вы также можете использовать другие инструменты или языки, совместимые с HTTP, для выполнения Stream Load. Параметры, связанные с загрузкой, включены в поля заголовка HTTP-запроса. При вводе этих параметров обратите внимание на следующие моменты:
-
Вы можете использовать chunked transfer encoding, как показано в этом разделе. Если вы не выбираете chunked transfer encoding, вы должны ввести поле заголовка
Content-Length, чтобы указать длину содержимого, которое необходимо передать, тем самым обеспечивая целостность данных.ПРИМЕЧАНИЕ
Если вы используете curl для выполнения Stream Load, Selena автоматически добавляет поле заголовка
Content-Length, и вам не нужно вводить его вручную. -
Вы должны добавить поле заголовка
Expectи указать его значение как100-continue, как в"Expect:100-continue". Это помогает предотвратить ненужные передачи данных и снизить потребление ресурсов в случае отклонения вашего запроса на задание.
Обратите внимание, что в Selena некоторые литералы используются как зарезервированные ключевые слова языком SQL. Не используйте эти ключевые слова напрямую в операторах SQL. Если вы хотите использовать такое ключевое слово в операторе SQL, заключите его в пару обратных кавычек (`). См. Keywords.
Параметры
username и password
Укажите имя пользователя и пароль учетной записи, которую вы используете для подключения к вашему кластеру Selena. Это обязательный параметр. Если вы используете учетную запись, для которой не установлен пароль, вам нужно ввести только <username>:.
XPUT
Указывает метод HTTP-запроса. Это обязательный параметр. Stream Load поддерживает только метод PUT.
url
Указывает URL-адрес таблицы Selena. Синтаксис:
http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load
В следующей таблице описываются параметры в URL.
| Параметр | Обязательный | Описание |
|---|---|---|
| fe_host | Да | IP-адрес узла FE в вашем кластере Selena. ПРИМЕЧАНИЕ Если вы отправляете загрузочное задание на конкретный узел BE или CN, вы должны ввести IP-адрес узла BE или CN. |
| fe_http_port | Да | Номер порта HTTP узла FE в вашем кластере Selena. Номер порта по умолчанию — 8030.ПРИМЕЧАНИЕ Если вы отправляете загрузочное задание на конкретный узел BE или CN, вы должны ввести номер порта HTTP узла BE или CN. Номер порта по умолчанию — 8030. |
| database_name | Да | Имя базы данных, к которой принадлежит таблица Selena. |
| table_name | Да | Имя таблицы Selena. |
ПРИМЕЧАНИЕ
Вы можете использовать SHOW FRONTENDS для просмотра IP-адреса и порта HTTP узла FE.
data_desc
Описывает файл данных, который вы хотите загрузить. Дескриптор data_desc может включать имя файла данных, формат, разделитель столбцов, разделитель строк, целевые partition и сопоставление столбцов с таблицей Selena. Синтаксис:
-T <file_path>
-H "format: CSV | JSON"
-H "column_separator: <column_separator>"
-H "row_delimiter: <row_delimiter>"
-H "columns: <column1_name>[, <column2_name>, ... ]"
-H "partitions: <partition1_name>[, <partition2_name>, ...]"
-H "temporary_partitions: <temporary_partition1_name>[, <temporary_partition2_name>, ...]"
-H "jsonpaths: [ \"<json_path1>\"[, \"<json_path2>\", ...] ]"
-H "strip_outer_array: true | false"
-H "json_root: <json_path>"
-H "ignore_json_size: true | false"
-H "compression: <compression_algorithm> | Content-Encoding: <compression_algorithm>"
Параметры в дескрипторе data_desc можно разделить на три типа: общие параметры, параметры CSV и параметры JSON.
Общие параметры
| Параметр | Обязательный | Описание |
|---|---|---|
| file_path | Да | Путь сохранения файла данных. При желании вы можете включить расширение имени файла. |
| format | Нет | Формат файла данных. Допустимые значения: CSV и JSON. Значение по умолчанию: CSV. |
| partitions | Нет | Partition, в которые вы хотите загрузить файл данных. По умолчанию, если вы не укажете этот параметр, Selena загружает файл данных во все partition таблицы Selena. |
| temporary_partitions | Нет | Имя временного partition, в который вы хотите загрузить файл данных. Вы можете указать несколько временных partition, которые должны быть разделены запятыми (,). |
| columns | Нет | Сопоставление столбцов между файлом данных и таблицей Selena. Если поля в файле данных могут быть последовательно сопоставлены со столбцами в таблице Selena, вам не нужно указывать этот параметр. Вместо этого вы можете использовать этот параметр для выполнения преобразований данных. Например, если вы загружаете файл данных CSV, и файл состоит из двух столбцов, которые могут быть последовательно сопоставлены с двумя столбцами id и city таблицы Selena, вы можете указать "columns: city,tmp_id, id = tmp_id * 100". Для получения дополнительной информации см. раздел "Сопоставление столбцов" в этом разделе. |
Параметры CSV
| Параметр | Обязательный | Описание |
|---|---|---|
| column_separator | Нет | Символы, которые используются в файле данных для разделения полей. Если вы не укажете этот параметр, этот параметр по умолчанию равен \t, что указывает на табуляцию.Убедитесь, что разделитель столбцов, который вы указываете с помощью этого параметра, совпадает с разделителем столбцов, используемым в файле данных. ПРИМЕЧАНИЕ - Для данных CSV вы можете использовать строку UTF-8, такую как запятая (,), табуляция или вертикальная черта (|), длина которой не превышает 50 байт, в качестве текстового р азделителя. - Если файл данных использует последовательные непечатаемые символы (например, \r\n) в качестве разделителя столбцов, вы должны установить этот параметр как \\x0D0A. |
| row_delimiter | Нет | Символы, которые используются в файле данных для разделения строк. Если вы не укажете этот параметр, этот параметр по умолчанию равен \n.ПРИМЕЧАНИЕ Если файл данных использует последовательные непечатаемые символы (например, \r\n) в качестве разделителя строк, вы должны установить этот параметр как \\x0D0A. |
| skip_header | Нет | Указывает, следует ли пропускать первые несколько строк файла данных, когда файл данных в формате CSV. Тип: INTEGER. Значение по умолчанию: 0.В некоторых файлах данных в формате CSV первые несколько строк в начале используются для определения метаданных, таких как имена столбцов и типы данных столбцов. Установив параметр skip_header, вы можете включить Selena для пропуска первых нескольких строк файла данных во время загрузки данных. Например, если вы установите этот параметр в 1, Selena пропустит первую строку файла данных во время загрузки данных.Первые несколько строк в начале в файле данных должны быть разделены с помощью разделителя строк, который вы указываете в команде загрузки. |
| trim_space | Нет | Указывает, следует ли удалять пробелы перед и после разделителей столбцов из файла данных, когда файл данных в формате CSV. Тип: BOOLEAN. Значение по умолчанию: false.Для некоторых баз данных пробелы добавляются к разделителям столбцов при экспорте данных в виде файла данных в формате CSV. Такие пробелы называются начальными или конечными пробелами в зависимости от их расположения. Установив параметр trim_space, вы можете включить Selena для удаления таких ненужных пробелов во время загрузки данных.Обратите внимание, что Selena не удаляет пробелы (включая начальные и конечные пробелы) внутри поля, заключенного в пару символов, указанных в enclose. Например, следующие значения полей используют вертикальную черту (|) в качестве разделителя столбцов и двойные кавычки (") в качестве символа, указанного в enclose:|"Love Selena"| |" Love Selena "| | "Love Selena" | Если вы установите trim_space в true, Selena обрабатывает предыдущие значения полей следующим образом:|"Love Selena"| |" Love Selena "| |"Love Selena"| |
| enclose | Нет | Указывает символ, который используется для обертывания значений полей в файле данных в соответствии с RFC4180, когда файл данных в формате CSV. Тип: однобайтовый символ. Значение по умолчанию: NONE. Наиболее распространенными символами являются одинарная кавычка (') и двойная кавычка (").Все специальные символы (включая разделители строк и разделители столбцов), обернутые с помощью символа, указанного в enclose, считаются обычными символами. Selena может сделать больше, чем RFC4180, поскольку позволяет вам указать любой однобайтовый символ в качестве символа, указанного в enclose.Если значение поля содержит символ, указанный в enclose, вы можете использовать тот же символ для экранирования этого символа, указанного в enclose. Например, вы устанавливаете enclose в ", и значение поля — a "quoted" c. В этом случае вы можете ввести значение поля как "a ""quoted"" c" в файл данных. |
| escape | Нет | Указывает символ, который используется для экранирования различных специальных символов, таких как разделители строк, разделители столбцов, символы экранирования и символы, указанные в enclose, которые затем считаются Selena обычными символами и анализируются как часть значений полей, в которых они находятся. Тип: однобайтовый символ. Значение по умолчанию: NONE. Наиболее распространенным символом является косая черта (\), которая должна быть записана как двойные косые черты (\\) в операторах SQL.ПРИМЕЧАНИЕ Символ, указанный в escape, применяется как внутри, так и вне каждой пары символов, указанных в enclose.Два примера следующие:
|
ПРИМЕЧАНИЕ
- Для данных CSV вы можете использовать строку UTF-8, такую как запятая (,), табуляция или вертикальная черта (|), длина которой не превышает 50 байт, в качестве текстового разделителя.
- Значения NULL обозначаются с помощью
\N. Например, файл данных состоит из трех столбцов, и запись из этого файла данных содержит данные в первом и третьем столбцах, но не содержит данных во втором столбце. В этой ситуации вам нужно использовать\Nво втором столбце для обозначения значения null. Это означает, что запись должна быть скомпилирована какa,\N,bвместоa,,b.a,,bобозначает, что второй столбец записи содержит пустую строку.- Параметры формата, включая
skip_header,trim_space,encloseиescape, поддерживаются в версии 3.0 и более поздних версиях.
Параметры JSON
| Параметр | Обязательный | Описание |
|---|---|---|
| jsonpaths | Нет | Имена ключей, которые вы хотите загрузить из файла данных JSON. Вам нужно указать этот параметр только при загрузке данных JSON с использованием режима сопоставления. Значение этого параметра в формате JSON. См. Настройка сопоставления столбцов для загрузки данных JSON. |
| strip_outer_array | Нет | Указывает, следует ли удалять самую внешнюю структуру массива. Допустимые значения: true и false. Значение по умолчанию: false.В реальных бизнес-сценариях данные JSON могут иметь самую внешнюю структуру массива, обозначенную парой квадратных скобок []. В этой ситуации мы рекомендуем установить этот параметр в true, чтобы Selena удаляла самые внешние квадратные скобки [] и загружала каждый внутренний массив как отдельную запись данных. Если вы установите этот параметр в false, Selena анализирует весь файл данных JSON в один массив и загружает массив как одну запись данных.Например, данные JSON — [ {"category" : 1, "author" : 2}, {"category" : 3, "author" : 4} ]. Если вы установите этот параметр в true, {"category" : 1, "author" : 2} и {"category" : 3, "author" : 4} анализируются в отдельные записи данных, которые загружаются в отдельные строки таблицы Selena. |
| json_root | Нет | Корневой элемент данных JSON, которые вы хотите загрузить из файла данных JSON. Вам нужно указать этот параметр только при загрузке данных JSON с использованием режима сопоставления. Значение этого параметра — действительная строка JsonPath. По умолчанию значение этого параметра пусто, что указывает на то, что все данные из файла данных JSON будут загружены. Для получения дополнительной информации см. раздел "Загрузка данных JSON с использованием режима сопоставления с указанным корневым элементом" этого раздела. |
| ignore_json_size | Нет | Указывает, следует ли проверять размер тела JSON в HTTP-запросе. ПРИМЕЧАНИЕ По умолчанию размер тела JSON в HTTP-запросе не может превышать 100 МБ. Если тело JSON превышает 100 МБ в размере, возникает ошибка "The size of this batch exceed the max size [104857600] of json type data data [8617627793]. Set ignore_json_size to skip check, although it may lead huge memory consuming.". Чтобы предотвратить эту ошибку, вы можете добавить "ignore_json_size:true" в заголовок HTTP-запроса, чтобы указать Selena не проверять размер тела JSON. |
| compression, Content-Encoding | НЕТ | Алгоритм кодирования, который применяется к данным во время передачи. Поддерживаемые алгоритмы включают GZIP, BZIP2, LZ4_FRAME и ZSTD. Пример: curl --location-trusted -u root: -v 'http://127.0.0.1:18030/api/db0/tbl_simple/_stream_load' \-X PUT -H "expect:100-continue" \-H 'format: json' -H 'compression: lz4_frame' -T ./b.json.lz4. |
При загрузке данных JSON также обратите внимание, что размер каждого объекта JSON не может превышать 4 ГБ. Если отдельный объект JSON в файле данных JSON превышает 4 ГБ в размере, возникает ошибка "This parser can't support a document that big.".
Параметры Merge Commit
Включает Merge Commit для нескольких параллельных запросов Stream Load в пределах указанного временного окна и объединяет их в одну транзакцию.
Обратите внимание, что оптимизация Merge Commit подходит для сценария с параллельными заданиями Stream Load на одной таблице. Она не рекомендуется, если параллелизм равен единице. В то же время дважды подумайте, прежде чем устанавливать merge_commit_async в false и merge_commit_interval_ms в большое значение, поскольку они могут привести к снижению производительности загрузки.
| Параметр | Обязательный | Описание |
|---|---|---|
| enable_merge_commit | Нет | Включить ли Merge Commit для запроса на загрузку. Допустимые значения: true и false (по умолчанию). |
| merge_commit_async | Нет | Режим возврата сервера. Допустимые значения:
|
| merge_commit_interval_ms | Да | Размер окна слияния времени. Единица измерения: миллисекунды. Merge Commit пытается объединить запросы на загрузку, полученные в этом окне, в одну транзакцию. Большее окно повышает эффективность слияния, но увеличивает задержку. |
| merge_commit_parallel | Да | Степень параллелизма для плана загрузки, созданного для каждого окна слияния. Параллелизм можно настроить на основе нагрузки на прием. Увеличьте это значение, если много запросов и/или большое количество данных для загрузки. Параллелизм ограничен количеством узлов BE, рассчитывается как min(merge_commit_parallel, количество узлов BE). |
- Merge Commit поддерживает объединение только однородных запросов на загрузку в одну базу данных и таблицу. "Однородные" означает, что параметры Stream Load идентичны, включая: общие параметры, параметры формата JSON, параметры формата CSV,
opt_propertiesи параметры Merge Commit. - Для загрузки данных в формате CSV вы должны убедиться, что каждая строка заканчивается разделителем строк.
skip_headerне поддерживается. - Сервер автоматически генерирует метки для транзакций. Они будут проигнорированы, если указаны.
- Merge Commit объединяет несколько запросов на загрузку в одну транзакцию. Если один запрос содержит проблемы с качеством данных, все запросы в транзакции завершатся неудачей.
opt_properties
Указывает некоторые необязательные параметры, которые применяются ко всему загрузочному заданию. Синтаксис:
-H "label: <label_name>"
-H "where: <condition1>[, <condition2>, ...]"
-H "max_filter_ratio: <num>"
-H "timeout: <num>"
-H "strict_mode: true | false"
-H "timezone: <string>"
-H "load_mem_limit: <num>"
-H "partial_update: true | false"
-H "partial_update_mode: row | column"
-H "merge_condition: <column_name>"
В следующей таблице описываются необязательные параметры.
| Параметр | Обязательный | Описание |
|---|---|---|
| label | Нет | Метка загрузочного задания. Если вы не укажете этот параметр, Selena автоматически сгенерирует метку для загрузочного задания. Selena не позволяет использовать одну метку для многократной загрузки партии данных. Таким образом, Selena п редотвращает повторную загрузку одних и тех же данных. Для правил именования меток см. System limits. По умолчанию Selena сохраняет метки загрузочных заданий, которые были успешно завершены за последние три дня. Вы можете использовать параметр FE label_keep_max_second для изменения периода хранения меток. |
| where | Нет | Условия, на основе которых Selena фильтрует предварительно обработанные данные. Selena загружает только предварительно обработанные данные, которые соответствуют условиям фильтра, указанным в предложении WHERE. |
| max_filter_ratio | Нет | Максимальная ошибочная терпимость загрузочного задания. Ошибочная терпимость — это максимальный процент записей данных, которые могут быть отфильтрованы из-за неадекватного качества данных во всех записях данных, запрошенных загрузочным заданием. Допустимые значения: от 0 до 1. Значение по умолчанию: 0.Мы рекомендуем сохранить значение по умолчанию 0. Таким образом, если обнаружены неквалифицированные записи данных, загрузочное задание завершается неудачей, т ем самым обеспечивая правильность данных.Если вы хотите игнорировать неквалифицированные записи данных, вы можете установить этот параметр в значение больше 0. Таким образом, загрузочное задание может быть успешным, даже если файл данных содержит неквалифицированные записи данных.ПРИМЕЧАНИЕ Неквалифицированные записи данных не включают записи данных, которые фильтруются предложением WHERE. |
| log_rejected_record_num | Нет | Указывает максимальное количество неквалифицированных строк данных, которые могут быть зарегистрированы. Этот параметр поддерживается начиная с версии 3.1. Допустимые значения: 0, -1 и любое ненулевое положительное целое число. Значение по умолчанию: 0.
|
| timeout | Нет | Период времени ожидания загрузочного задания. Допустимые значения: от 1 до 259200. Единица измерения: секунда. Значение по умолчанию: 600.ПРИМЕЧАНИЕ В дополнение к параметру timeout вы также можете использовать параметр FE stream_load_default_timeout_second для централизованного управления периодом времени ожидания для всех заданий Stream Load в вашем кластере Selena. Если вы укажете параметр timeout, период времени ожидания, указанный параметром timeout, будет иметь приоритет. Если вы не укажете параметр timeout, период времени ожидания, указанный параметром stream_load_default_timeout_second, будет иметь приоритет. |
| strict_mode | Нет | Указывает, следует ли включить строгий режим. Допустимые значения: true и false. Значение по умолчанию: false. Значение true указывает на включение строгого режима, а значение false указывает на отключение строгого режима. |
| timezone | Нет | Часовой пояс, используемый загрузочным заданием. Значение по умолчанию: Asia/Shanghai. Значение эт ого параметра влияет на результаты, возвращаемые функциями, такими как strftime, alignment_timestamp и from_unixtime. Часовой пояс, указанный этим параметром, является часовым поясом уровня сеанса. Для получения дополнительной информации см. Configure a time zone. |
| load_mem_limit | Нет | Максимальный объем памяти, который может быть выделен для загрузочного задания. Единица измерения: байты. По умолчанию максимальный размер памяти для загрузочного задания составляет 2 ГБ. Значение этого параметра не может превышать максимальный объем памяти, который может быть выделен для каждого BE или CN. |
| partial_update | Нет | Использовать ли частичные обновления. Допустимые значения: TRUE и FALSE. Значение по умолчанию: FALSE, что указывает на отключение этой функции. |
| partial_update_mode | Нет | Указывает режим частичных обновлений. Допустимые значения: row и column.
|
| merge_condition | Нет | Указывает имя столбца, который вы хотите использовать в качестве условия для определения того, могут ли обновления вступить в силу. Обновление из исходной записи в целевую запись вступает в силу только тогда, когда исходная запись данных имеет большее или равное значение, чем целевая запись данных в указанном столбце. Selena поддерживает условные обновления начиная с версии 2.5. ПРИМЕЧАНИЕ Указанный вами столбец не может быть столбцом первичного ключа. Кроме того, только таблицы, использующие таблицу первичного ключа, поддерживают условные обновления. |