Перейти к основному содержимому
Версия: 2.0.x

Stream Load

1. Поддерживает ли Stream Load идентификацию имён столбцов в первых нескольких строках CSV-файла или пропуск первых нескольких строк при чтении данных?

Stream Load не поддерживает идентификацию имён столбцов в первых нескольких строках CSV-файла. Stream Load рассматривает первые несколько строк как обычные данные, такие же как и остальные строки.

В версии v1.5.2 и более ранних Stream Load не поддерживает пропуск первых нескольких строк CSV-файла при чтении данных. Если первые несколько строк CSV-файла, который вы хотите загрузить, содержат имена столбцов, выполните одно из следующих действий:

  • Измените настройки инструмента, который вы используете для экспорта данных. Затем повторно экспортируйте данные в CSV-файл, который не содержит имена столбцов в первых нескольких строках.
  • Используйте команды, такие как sed -i '1d' filename, чтобы удалить первые несколько строк CSV-файла.
  • В команде или операторе загрузки используйте -H "where: <column_name> != '<column_name>'" для фильтрации первых нескольких строк CSV-файла. <column_name> — это любое из имён столбцов, содержащихся в первых нескольких строках. Обратите внимание, что Selena сначала преобразует, а затем фильтрует исходные данные. Поэтому, если имена столбцов в первых нескольких строках не могут быть преобразованы в соответствующие типы данных назначения, для них возвращаются значения NULL. Это означает, что целевая таблица Selena не может содержать столбцы, установленные как NOT NULL.
  • В команде или операторе загрузки добавьте -H "max_filter_ratio:0.01", чтобы установить максимально допустимый процент ошибок, равный 1% или ниже, но допускающий несколько строк с ошибками, тем самым позволяя Selena игнорировать ошибки преобразования данных в первых нескольких строках. В этом случае задание Stream Load всё равно может завершиться успешно, даже если возвращается ErrorURL, указывающий на строки с ошибками. Не устанавливайте max_filter_ratio на большое значение. Если вы установите max_filter_ratio на большое значение, некоторые важные проблемы с качеством данных могут быть упущены.

Начиная с версии v1.5.2 Stream Load поддерживает параметр skip_header, который указывает, следует ли пропускать первые несколько строк CSV-файла. Для получения дополнительной информации см. Параметры CSV.

2. Данные, которые нужно загрузить в столбец партиции, не имеют стандартного типа DATE или INT. Например, данные имеют формат типа 202106.00. Как преобразовать данные при загрузке с помощью Stream Load?

Selena поддерживает преобразование данных при загрузке. Для получения дополнительной информации см. Преобразование данных при загрузке.

Предположим, вы хотите загрузить CSV-файл с именем TEST, и файл состоит из четырёх столбцов: NO, DATE, VERSION и PRICE, среди которых данные из столбца DATE находятся в нестандартном формате, например 202106.00. Если вы хотите использовать DATE в качестве столбца партиции в Selena, вам нужно сначала создать таблицу Selena, например, состоящую из следующих четырёх столбцов: NO, VERSION, PRICE и DATE. Затем вам нужно указать тип данных столбца DATE таблицы Selena как DATE, DATETIME или INT. Наконец, при создании задания Stream Load вам нужно указать следующую настройку в команде или операторе загрузки для преобразования данных из типа данных исходного столбца DATE в тип данных целевого столбца:

-H "columns: NO,DATE_1, VERSION, PRICE, DATE=LEFT(DATE_1,6)"

В приведённом выше примере DATE_1 можно рассматривать как временно названный столбец, отображающийся на целевой столбец DATE, и конечные результаты, загружаемые в целевой столбец DATE, вычисляются функцией left(). Обратите внимание, что сначала необходимо перечислить временные имена исходных столбцов, а затем использовать функции для преобразования данных. Поддерживаются скалярные функции, включая неагрегатные функции и оконные функции.

3. Что делать, если задание Stream Load сообщает об ошибке "body exceed max size: 10737418240, limit: 10737418240"?

Размер исходного файла данных превышает 10 ГБ, что является максимальным размером файла, поддерживаемым Stream Load. Выполните одно из следующих действий:

  • Используйте seq -w 0 n для разделения исходного файла данных на файлы меньшего размера.
  • Используйте curl -XPOST http://be_host:http_port/api/update_config?streaming_load_max_mb=<file_size> для настройки значения параметра конфигурации BE streaming_load_max_mb, чтобы увеличить максимальный размер файла.

4. Как загрузить реальные значения NULL вместо записи "null" в строковый столбец через Stream Load?

Используйте функцию replace:

-H "columns: pk, temp, pd_type=replace(temp,'NULL',NULL)"

5. Имя поля "role" вызывает ошибку Stream Load. Как следует называть столбцы?

role является зарезервированным ключевым словом. Используйте обратные кавычки для обёртывания зарезервированного ключевого слова при использовании его в именах.

Пример:

-H $'columns:k1,`role`'