Перейти к основному содержимому

BROKER LOAD

Selena предоставляет метод загрузки на основе MySQL под названием Broker Load. После отправки задания загрузки Selena асинхронно выполняет задание. Вы можете использовать SELECT * FROM information_schema.loads для запроса результата задания. Эта функция поддерживается начиная с версии 1.5.0. Для получения дополнительной информации о фоновой информации, принципах, поддерживаемых форматах файлов данных, выполнении загрузки одной таблицы и нескольких таблиц, а также просмотре результатов заданий см. обзор загрузки.

Вы можете загружать данные в таблицы Selena только как пользователь, имеющий привилегию INSERT на эти таблицы Selena. Если у вас нет привилегии INSERT, следуйте инструкциям в GRANT, чтобы предоставить привилегию INSERT пользователю, которого вы используете для подключения к вашему кластеру Selena. Синтаксис: GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}.

Синтаксис

LOAD LABEL [<database_name>.]<label_name>
(
data_desc[, data_desc ...]
)
WITH BROKER
(
StorageCredentialParams
)
[PROPERTIES
(
opt_properties
)
]

Обратите внимание, что в Selena некоторые литералы используются как зарезервированные ключевые слова языком SQL. Не используйте эти ключевые слова напрямую в SQL-операторах. Если вы хотите использовать такое ключевое слово в SQL-операторе, заключите его в пару обратных кавычек (`). См. Ключевые слова.

Параметры

database_name и label_name

label_name указывает метку задания загрузки. Для соглашений об именовании см. Системные ограничения.

database_name опционально указывает имя базы данных, к которой принадлежит целевая таблица.

Каждое задание загрузки имеет метку, которая уникальна в пределах всей базы данных. Вы можете использовать метку задания загрузки для просмотра статуса выполнения задания загрузки и предотвращения повторной загрузки тех же данных. Когда задание загрузки переходит в состояние FINISHED, его метка не может быть повторно использована. Только метка задания загрузки, которое перешло в состояние CANCELLED, может быть повторно использована. В большинстве случаев метка задания загрузки повторно используется для повторной попытки этого задания загрузки и загрузки тех же данных, тем самым реализуя семантику Exactly-Once.

Для соглашений об именовании меток см. Системные ограничения.

data_desc

Описание пакета данных для загрузки. Каждый дескриптор data_desc объявляет информацию, такую как источник данных, функции ETL, целевая таблица Selena и целевые разделы.

Broker Load поддерживает загрузку нескольких файлов данных одновременно. В одном задании загрузки вы можете использовать несколько дескрипторов data_desc для объявления нескольких файлов данных, которые вы хотите загрузить, или использовать один дескриптор data_desc для объявления одного пути к файлу, из которого вы хотите загрузить все файлы данных в нем. Broker Load также может обеспечить транзакционную атомарность каждого задания загрузки, которое выполняется для загрузки нескольких файлов данных. Атомарность означает, что загрузка нескольких файлов данных в одном задании загрузки должна либо полностью успешно завершиться, либо полностью провалиться. Никогда не происходит так, что загрузка некоторых файлов данных успешна, а загрузка других файлов неудачна.

data_desc поддерживает следующий синтаксис:

DATA INFILE ("<file_path>"[, "<file_path>" ...])
[NEGATIVE]
INTO TABLE <table_name>
[PARTITION (<partition1_name>[, <partition2_name> ...])]
[TEMPORARY PARTITION (<temporary_partition1_name>[, <temporary_partition2_name> ...])]
[COLUMNS TERMINATED BY "<column_separator>"]
[ROWS TERMINATED BY "<row_separator>"]
[FORMAT AS "CSV | Parquet | ORC"]
[(format_type_options)]
[(column_list)]
[COLUMNS FROM PATH AS (<partition_field_name>[, <partition_field_name> ...])]
[SET <k1=f1(v1)>[, <k2=f2(v2)> ...]]
[WHERE predicate]

data_desc должен включать следующие параметры:

  • file_path

    Указывает путь сохранения одного или нескольких файлов данных, которые вы хотите загрузить.

    Вы можете указать этот параметр как путь сохранения одного файла данных. Например, вы можете указать этот параметр как "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/20210411" для загрузки файла данных с именем 20210411 из пути /user/data/tablename на сервере HDFS.

    Вы также можете указать этот параметр как путь сохранения нескольких файлов данных, используя подстановочные знаки ?, *, [], {} или ^. См. Справочник по подстановочным знакам. Например, вы можете указать этот параметр как "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/*/*" или "hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/dt=202104*/*" для загрузки файлов данных из всех разделов или только разделов 202104 в пути /user/data/tablename на сервере HDFS.

    ПРИМЕЧАНИЕ

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

    В приведенных выше примерах параметры hdfs_host и hdfs_port описываются следующим образом:

    • hdfs_host: IP-адрес хоста NameNode в кластере HDFS.

    • hdfs_host: порт FS хоста NameNode в кластере HDFS. Номер порта по умолчанию — 9000.

    УВЕДОМЛЕНИЕ

    • Broker Load поддерживает доступ к AWS S3 согласно протоколу S3 или S3A. Поэтому при загрузке данных из AWS S3 вы можете включить s3:// или s3a:// в качестве префикса в URI S3, который вы передаете как путь к файлу.
    • Broker Load поддерживает доступ к Google GCS только согласно протоколу gs. Поэтому при загрузке данных из Google GCS вы должны включить gs:// в качестве префикса в URI GCS, который вы передаете как путь к файлу.
    • При загрузке данных из Blob Storage вы должны использовать протокол wasb или wasbs для доступа к вашим данным:
      • Если ваша учетная запись хранения разрешает доступ по HTTP, используйте протокол wasb и запишите путь к файлу как wasb://<container_name>@<storage_account_name>.blob.core.windows.net/<path>/<file_name>/*.
      • Если ваша учетная запись хранения разрешает доступ по HTTPS, используйте протокол wasbs и запишите путь к файлу как wasbs://<container_name>@<storage_account_name>.blob.core.windows.net/<path>/<file_name>/*.
    • При загрузке данных из Data Lake Storage Gen2 вы должны использовать протокол abfs или abfss для доступа к вашим данным:
      • Если ваша учетная запись хранения разрешает доступ по HTTP, используйте протокол abfs и запишите путь к файлу как abfs://<container_name>@<storage_account_name>.dfs.core.windows.net/<file_name>.
      • Если ваша учетная запись хранения разрешает доступ по HTTPS, используйте протокол abfss и запишите путь к файлу как abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<file_name>.
    • При загрузке данных из Data Lake Storage Gen1 вы должны использовать протокол adl для доступа к вашим данным и записать путь к файлу как adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>.
  • INTO TABLE

    Указывает имя целевой таблицы Selena.

data_desc также может опционально включать следующие параметры:

  • NEGATIVE

    Отменяет загрузку определенного пакета данных. Для достижения этого вам нужно загрузить тот же пакет данных с указанным ключевым словом NEGATIVE.

    ПРИМЕЧАНИЕ

    Этот параметр действителен только когда таблица Selena является таблицей Aggregate и все ее столбцы значений вычисляются функцией sum.

  • PARTITION

    Указывает разделы, в которые вы хотите загрузить данные. По умолчанию, если вы не указываете этот параметр, исходные данные будут загружены во все разделы таблицы Selena.

  • TEMPORARY PARTITION

    Указывает имя временного раздела, в который вы хотите загрузить данные. Вы можете указать несколько временных разделов, которые должны быть разделены запятыми (,).

  • COLUMNS TERMINATED BY

    Указывает разделитель столбцов, используемый в файле данных. По умолчанию, если вы не указываете этот параметр, этот параметр по умолчанию равен \t, что означает табуляцию. Разделитель столбцов, который вы указываете с помощью этого параметра, должен быть таким же, как разделитель столбцов, который фактически используется в файле данных. В противном случае задание загрузки завершится неудачей из-за неадекватного качества данных, и его State будет CANCELLED.

    Задания Broker Load отправляются согласно протоколу MySQL. Selena и MySQL оба экранируют символы в запросах загрузки. Поэтому, если разделитель столбцов является невидимым символом, таким как табуляция, вы должны добавить обратную косую черту () перед разделителем столбцов. Например, вы должны ввести \\t, если разделитель столбцов — \t, и вы должны ввести \\n, если разделитель столбцов — \n. Файлы Apache Hive™ используют \x01 в качестве разделителя столбцов, поэтому вы должны ввести \\x01, если файл данных из Hive.

    ПРИМЕЧАНИЕ

    • Для данных CSV вы можете использовать строку UTF-8, такую как запятая (,), табуляция или вертикальная черта (|), длина которой не превышает 50 байт, в качестве текстового разделителя.
    • Нулевые значения обозначаются с помощью \N. Например, файл данных состоит из трех столбцов, и запись из этого файла данных содержит данные в первом и третьем столбцах, но не содержит данных во втором столбце. В этой ситуации вам нужно использовать \N во втором столбце для обозначения нулевого значения. Это означает, что запись должна быть скомпилирована как a,\N,b вместо a,,b. a,,b означает, что второй столбец записи содержит пустую строку.
  • ROWS TERMINATED BY

    Указывает разделитель строк, используемый в файле данных. По умолчанию, если вы не указываете этот параметр, этот параметр по умолчанию равен \n, что означает разрыв строки. Разделитель строк, который вы указываете с помощью этого параметра, должен быть таким же, как разделитель строк, который фактически используется в файле данных. В противном случае задание загрузки завершится неудачей из-за неадекватного качества данных, и его State будет CANCELLED. Этот параметр поддерживается начиная с версии 1.5.0.

    Для примечаний по использованию разделителя строк см. примечания по использованию для предыдущего параметра COLUMNS TERMINATED BY.

  • FORMAT AS

    Указывает формат файла данных. Допустимые значения: CSV, Parquet и ORC. По умолчанию, если вы не указываете этот параметр, Selena определяет формат файла данных на основе расширения имени файла .csv, .parquet или .orc, указанного в параметре file_path.

  • format_type_options

    Указывает параметры формата CSV, когда FORMAT AS установлен в CSV. Синтаксис:

    (
    key = value
    key = value
    ...
    )

    ПРИМЕЧАНИЕ

    format_type_options поддерживается в версии v3.0 и более поздних.

    В следующей таблице описываются параметры.

    ПараметрОписание
    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.
    Два примера следующие:
    • Когда вы устанавливаете enclose в " и escape в \, Selena анализирует "say \"Hello world\"" в say "Hello world".
    • Предположим, что разделитель столбцов — запятая (,). Когда вы устанавливаете escape в \, Selena анализирует a, b\, c в два отдельных значения полей: a и b, c.
  • column_list

    Указывает сопоставление столбцов между файлом данных и таблицей Selena. Синтаксис: (<column_name>[, <column_name> ...]). Столбцы, объявленные в column_list, сопоставляются по имени со столбцами таблицы Selena.

    ПРИМЕЧАНИЕ

    Если столбцы файла данных сопоставляются последовательно со столбцами таблицы Selena, вам не нужно указывать column_list.

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

  • COLUMNS FROM PATH AS

    Извлекает информацию об одном или нескольких полях разделов из указанного вами пути к файлу. Этот параметр действителен только когда путь к файлу содержит поля разделов.

    Например, если файл данных хранится в пути /path/col_name=col_value/file1, в котором col_name является полем раздела и может быть сопоставлен со столбцом таблицы Selena, вы можете указать этот параметр как col_name. Таким образом, Selena извлекает значения col_value из пути и загружает их в столбец таблицы Selena, на который сопоставляется col_name.

    ПРИМЕЧАНИЕ

    Этот параметр доступен только при загрузке данных из HDFS.

  • SET

    Указывает одну или несколько функций, которые вы хотите использовать для преобразования столбца файла данных. Примеры:

    • Таблица Selena состоит из трех столбцов, которые являются col1, col2 и col3 по порядку. Файл данных состоит из четырех столбцов, среди которых первые два столбца сопоставляются последовательно с col1 и col2 таблицы Selena, а сумма последних двух столбцов сопоставляется с col3 таблицы Selena. В этом случае вам нужно указать column_list как (col1,col2,tmp_col3,tmp_col4) и указать (col3=tmp_col3+tmp_col4) в предложении SET для реализации преобразования данных.
    • Таблица Selena состоит из трех столбцов, которые являются year, month и day по порядку. Файл данных состоит только из одного столбца, который содержит значения даты и времени в формате yyyy-mm-dd hh:mm:ss. В этом случае вам нужно указать column_list как (tmp_time) и указать (year = year(tmp_time), month=month(tmp_time), day=day(tmp_time)) в предложении SET для реализации преобразования данных.
  • WHERE

    Указывает условия, на основе которых вы хотите фильтровать исходные данные. Selena загружает только исходные данные, которые соответствуют условиям фильтра, указанным в предложении WHERE.

WITH BROKER

В версии v2.3 и более ранних введите WITH BROKER "<broker_name>" для указания брокера, который вы хотите использовать. Начиная с версии 1.5.0, вам больше не нужно указывать брокера, но вы все еще должны сохранить ключевое слово WITH BROKER.

StorageCredentialParams

Информация аутентификации, используемая Selena для доступа к вашей системе хранения.

HDFS

HDFS с открытым исходным кодом поддерживает два метода аутентификации: простую аутентификацию и аутентификацию Kerberos. Broker Load использует простую аутентификацию по умолчанию. HDFS с открытым исходным кодом также поддерживает настройку механизма HA для NameNode. Если вы выбираете HDFS с открытым исходным кодом в качестве системы хранения, вы можете указать конфигурацию аутентификации и конфигурацию HA следующим образом:

  • Конфигурация аутентификации

    • Если вы используете простую аутентификацию, настройте StorageCredentialParams следующим образом:

      "hadoop.security.authentication" = "simple",
      "username" = "<hdfs_username>",
      "password" = "<hdfs_password>"

      В следующей таблице описываются параметры в StorageCredentialParams.

      ПараметрОписание
      hadoop.security.authenticationМетод аутентификации. Допустимые значения: simple и kerberos. Значение по умолчанию: simple. simple представляет простую аутентификацию, означающую отсутствие аутентификации, а kerberos представляет аутентификацию Kerberos.
      usernameИмя пользователя учетной записи, которую вы хотите использовать для доступа к NameNode кластера HDFS.
      passwordПароль учетной записи, которую вы хотите использовать для доступа к NameNode кластера HDFS.
    • Если вы используете аутентификацию Kerberos, настройте StorageCredentialParams следующим образом:

      "hadoop.security.authentication" = "kerberos",
      "kerberos_principal" = "nn/zelda1@ZELDA.COM",
      "kerberos_keytab" = "/keytab/hive.keytab",
      "kerberos_keytab_content" = "YWFhYWFh"

      В следующей таблице описываются параметры в StorageCredentialParams.

      ПараметрОписание
      hadoop.security.authenticationМетод аутентификации. Допустимые значения: simple и kerberos. Значение по умолчанию: simple. simple представляет простую аутентификацию, означающую отсутствие аутентификации, а kerberos представляет аутентификацию Kerberos.
      kerberos_principalПринципал Kerberos для аутентификации. Каждый принципал состоит из следующих трех частей для обеспечения его уникальности в кластере HDFS:
      • username или servicename: Имя принципала.
      • instance: имя сервера, на котором размещен узел для аутентификации в кластере HDFS. Имя сервера помогает обеспечить уникальность принципала, например, когда кластер HDFS состоит из нескольких DataNodes, каждый из которых независимо аутентифицируется.
      • realm: Имя области. Имя области должно быть написано заглавными буквами.
      Пример: nn/zelda1@ZELDA.COM.
      kerberos_keytabПуть сохранения файла keytab Kerberos.
      kerberos_keytab_contentСодержимое файла keytab Kerberos, закодированное в Base64. Вы можете выбрать указание либо kerberos_keytab, либо kerberos_keytab_content.
  • Конфигурация HA

    Вы можете настроить механизм HA для NameNode кластера HDFS. Таким образом, если NameNode переключается на другой узел, Selena может автоматически идентифицировать новый узел, который служит в качестве NameNode. Это включает следующие сценарии:

    • Если вы загружаете данные из одного кластера HDFS, который имеет одного пользователя Kerberos, настроенного, поддерживается как загрузка на основе брокера, так и загрузка без брокера.

      • Для выполнения загрузки на основе брокера убедитесь, что развернута по крайней мере одна независимая группа брокеров, и поместите файл hdfs-site.xml в путь {deploy}/conf на узле брокера, который обслуживает кластер HDFS. Selena добавит путь {deploy}/conf в переменную среды CLASSPATH при запуске брокера, позволяя брокерам читать информацию об узлах кластера HDFS.

      • Для выполнения загрузки без брокера вам нужно только установить hadoop.security.authentication = kerberos в conf/core-site.xml в каталогах развертывания всех узлов FE, BE и CN в вашем кластере и использовать команду kinit для настройки учетной записи Kerberos.

    • Если вы загружаете данные из одного кластера HDFS, который имеет несколько пользователей Kerberos, настроенных, поддерживается только загрузка на основе брокера. Убедитесь, что развернута по крайней мере одна независимая группа брокеров, и поместите файл hdfs-site.xml в путь {deploy}/conf на узле брокера, который обслуживает кластер HDFS. Selena добавит путь {deploy}/conf в переменную среды CLASSPATH при запуске брокера, позволяя брокерам читать информацию об узлах кластера HDFS.

    • Если вы загружаете данные из нескольких кластеров HDFS (независимо от того, настроен ли один или несколько пользователей Kerberos), поддерживается только загрузка на основе брокера. Убедитесь, что развернута по крайней мере одна независимая группа брокеров для каждого из этих кластеров HDFS, и выполните одно из следующих действий, чтобы позволить брокерам читать информацию об узлах кластера HDFS:

      • Поместите файл hdfs-site.xml в путь {deploy}/conf на узле брокера, который обслуживает каждый кластер HDFS. Selena добавит путь {deploy}/conf в переменную среды CLASSPATH при запуске брокера, позволяя брокерам читать информацию об узлах в этом кластере HDFS.

      • Добавьте следующую конфигурацию HA при создании задания:

        "dfs.nameservices" = "ha_cluster",
        "dfs.ha.namenodes.ha_cluster" = "ha_n1,ha_n2",
        "dfs.namenode.rpc-address.ha_cluster.ha_n1" = "<hdfs_host>:<hdfs_port>",
        "dfs.namenode.rpc-address.ha_cluster.ha_n2" = "<hdfs_host>:<hdfs_port>",
        "dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"

        В следующей таблице описываются параметры в конфигурации HA.

        ПараметрОписание
        dfs.nameservicesИмя кластера HDFS.
        dfs.ha.namenodes.XXXИмя NameNode в кластере HDFS. Если вы указываете несколько имен NameNode, разделите их запятыми (,). xxx — это имя кластера HDFS, которое вы указали в dfs.nameservices.
        dfs.namenode.rpc-address.XXX.NNRPC-адрес NameNode в кластере HDFS. NN — это имя NameNode, которое вы указали в dfs.ha.namenodes.XXX.
        dfs.client.failover.proxy.providerПоставщик NameNode, к которому будет подключаться клиент. Значение по умолчанию: org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.

    ПРИМЕЧАНИЕ

    Вы можете использовать оператор SHOW BROKER для проверки брокеров, развернутых в вашем кластере Selena.

AWS S3

Если вы выбираете AWS S3 в качестве системы хранения, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе профиля экземпляра, настройте StorageCredentialParams следующим образом:

    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "<aws_s3_region>"
  • Чтобы выбрать метод аутентификации на основе принятой роли, настройте StorageCredentialParams следующим образом:

    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "<iam_role_arn>",
    "aws.s3.region" = "<aws_s3_region>"
  • Чтобы выбрать метод аутентификации на основе пользователя IAM, настройте StorageCredentialParams следующим образом:

    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "<iam_user_access_key>",
    "aws.s3.secret_key" = "<iam_user_secret_key>",
    "aws.s3.region" = "<aws_s3_region>"

В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

ПараметрОбязательныйОписание
aws.s3.use_instance_profileДаУказывает, следует ли включить методы учетных данных профиль экземпляра и принятая роль. Допустимые значения: true и false. Значение по умолчанию: false.
aws.s3.iam_role_arnНетARN роли IAM, которая имеет привилегии на ваш bucket AWS S3. Если вы выбираете принятую роль в качестве метода учетных данных для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.regionДаРегион, в котором находится ваш bucket AWS S3. Пример: us-west-1.
aws.s3.access_keyНетКлюч доступа вашего пользователя IAM. Если вы выбираете пользователя IAM в качестве метода учетных данных для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.secret_keyНетСекретный ключ вашего пользователя IAM. Если вы выбираете пользователя IAM в качестве метода учетных данных для доступа к AWS S3, вы должны указать этот параметр.

Для получения информации о том, как выбрать метод аутентификации для доступа к AWS S3 и как настроить политику контроля доступа в AWS IAM Console, см. Параметры аутентификации для доступа к AWS S3.

Google GCS

Если вы выбираете Google GCS в качестве системы хранения, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе VM, настройте StorageCredentialParams следующим образом:

    "gcp.gcs.use_compute_engine_service_account" = "true"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрЗначение по умолчаниюПример значенияОписание
    gcp.gcs.use_compute_engine_service_accountfalsetrueУказывает, следует ли напрямую использовать сервисную учетную запись, привязанную к вашему Compute Engine.
  • Чтобы выбрать метод аутентификации на основе сервисной учетной записи, настройте StorageCredentialParams следующим образом:

    "gcp.gcs.service_account_email" = "<google_service_account_email>",
    "gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
    "gcp.gcs.service_account_private_key" = "<google_service_private_key>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрЗначение по умолчаниюПример значенияОписание
    gcp.gcs.service_account_email"""user@hello.iam.gserviceaccount.com"Адрес электронной почты в JSON-файле, созданном при создании сервисной учетной записи.
    gcp.gcs.service_account_private_key_id"""61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"Идентификатор закрытого ключа в JSON-файле, созданном при создании сервисной учетной записи.
    gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Закрытый ключ в JSON-файле, созданном при создании сервисной учетной записи.
  • Чтобы выбрать метод аутентификации на основе олицетворения, настройте StorageCredentialParams следующим образом:

    • Заставить экземпляр VM олицетворять сервисную учетную запись:

      "gcp.gcs.use_compute_engine_service_account" = "true",
      "gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"

      В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

      ПараметрЗначение по умолчаниюПример значенияОписание
      gcp.gcs.use_compute_engine_service_accountfalsetrueУказывает, следует ли напрямую использовать сервисную учетную запись, привязанную к вашему Compute Engine.
      gcp.gcs.impersonation_service_account"""hello"Сервисная учетная запись, которую вы хотите олицетворять.
    • Заставить сервисную учетную запись (называемую мета-сервисной учетной записью) олицетворять другую сервисную учетную запись (называемую сервисной учетной записью данных):

      "gcp.gcs.service_account_email" = "<google_service_account_email>",
      "gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
      "gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
      "gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"

      В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

      ПараметрЗначение по умолчаниюПример значенияОписание
      gcp.gcs.service_account_email"""user@hello.iam.gserviceaccount.com"Адрес электронной почты в JSON-файле, созданном при создании мета-сервисной учетной записи.
      gcp.gcs.service_account_private_key_id"""61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"Идентификатор закрытого ключа в JSON-файле, созданном при создании мета-сервисной учетной записи.
      gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Закрытый ключ в JSON-файле, созданном при создании мета-сервисной учетной записи.
      gcp.gcs.impersonation_service_account"""hello"Сервисная учетная запись данных, которую вы хотите олицетворять.

Другая S3-совместимая система хранения

Если вы выбираете другую S3-совместимую систему хранения, такую как MinIO, настройте StorageCredentialParams следующим образом:

"aws.s3.enable_ssl" = "false",
"aws.s3.enable_path_style_access" = "true",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"

В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

ПараметрОбязательныйОписание
aws.s3.enable_sslДаУказывает, следует ли включить SSL-соединение. Допустимые значения: true и false. Значение по умолчанию: true.
aws.s3.enable_path_style_accessДаУказывает, следует ли включить доступ к URL в стиле пути. Допустимые значения: true и false. Значение по умолчанию: false. Для MinIO вы должны установить значение true.
aws.s3.endpointДаКонечная точка, которая используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3.
aws.s3.access_keyДаКлюч доступа вашего пользователя IAM.
aws.s3.secret_keyДаСекретный ключ вашего пользователя IAM.

Microsoft Azure Storage

Azure Blob Storage

Если вы выбираете Blob Storage в качестве системы хранения, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации Shared Key, настройте StorageCredentialParams следующим образом:

    "azure.blob.storage_account" = "<storage_account_name>",
    "azure.blob.shared_key" = "<storage_account_shared_key>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.blob.storage_accountДаИмя пользователя вашей учетной записи Blob Storage.
    azure.blob.shared_keyДаОбщий ключ вашей учетной записи Blob Storage.
  • Чтобы выбрать метод аутентификации SAS Token, настройте StorageCredentialParams следующим образом:

    "azure.blob.storage_account" = "<storage_account_name>",
    "azure.blob.container" = "<container_name>",
    "azure.blob.sas_token" = "<storage_account_SAS_token>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.blob.storage_accountДаИмя пользователя вашей учетной записи Blob Storage.
    azure.blob.containerДаИмя контейнера blob, который хранит ваши данные.
    azure.blob.sas_tokenДаSAS-токен, который используется для доступа к вашей учетной записи Blob Storage.
Azure Data Lake Storage Gen2

Если вы выбираете Data Lake Storage Gen2 в качестве системы хранения, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации Managed Identity, настройте StorageCredentialParams следующим образом:

    "azure.adls2.oauth2_use_managed_identity" = "true",
    "azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
    "azure.adls2.oauth2_client_id" = "<service_client_id>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls2.oauth2_use_managed_identityДаУказывает, следует ли включить метод аутентификации Managed Identity. Установите значение true.
    azure.adls2.oauth2_tenant_idДаИдентификатор арендатора, данные которого вы хотите получить.
    azure.adls2.oauth2_client_idДаИдентификатор клиента (приложения) управляемой идентичности.
  • Чтобы выбрать метод аутентификации Shared Key, настройте StorageCredentialParams следующим образом:

    "azure.adls2.storage_account" = "<storage_account_name>",
    "azure.adls2.shared_key" = "<storage_account_shared_key>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls2.storage_accountДаИмя пользователя вашей учетной записи хранения Data Lake Storage Gen2.
    azure.adls2.shared_keyДаОбщий ключ вашей учетной записи хранения Data Lake Storage Gen2.
  • Чтобы выбрать метод аутентификации Service Principal, настройте StorageCredentialParams следующим образом:

    "azure.adls2.oauth2_client_id" = "<service_client_id>",
    "azure.adls2.oauth2_client_secret" = "<service_principal_client_secret>",
    "azure.adls2.oauth2_client_endpoint" = "<service_principal_client_endpoint>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls2.oauth2_client_idДаИдентификатор клиента (приложения) сервисного принципала.
    azure.adls2.oauth2_client_secretДаЗначение нового секрета клиента (приложения), созданного.
    azure.adls2.oauth2_client_endpointДаКонечная точка токена OAuth 2.0 (v1) сервисного принципала или приложения.
Azure Data Lake Storage Gen1

Если вы выбираете Data Lake Storage Gen1 в качестве системы хранения, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации Managed Service Identity, настройте StorageCredentialParams следующим образом:

    "azure.adls1.use_managed_service_identity" = "true"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls1.use_managed_service_identityДаУказывает, следует ли включить метод аутентификации Managed Service Identity. Установите значение true.
  • Чтобы выбрать метод аутентификации Service Principal, настройте StorageCredentialParams следующим образом:

    "azure.adls1.oauth2_client_id" = "<application_client_id>",
    "azure.adls1.oauth2_credential" = "<application_client_credential>",
    "azure.adls1.oauth2_endpoint" = "<OAuth_2.0_authorization_endpoint_v2>"

    В следующей таблице описываются параметры, которые вам нужно настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls1.oauth2_client_idДаИдентификатор клиента (приложения).
    azure.adls1.oauth2_credentialДаЗначение нового секрета клиента (приложения), созданного.
    azure.adls1.oauth2_endpointДаКонечная точка токена OAuth 2.0 (v1) сервисного принципала или приложения.

opt_properties

Указывает некоторые дополнительные параметры, настройки которых применяются ко всему заданию загрузки. Синтаксис:

PROPERTIES ("<key1>" = "<value1>"[, "<key2>" = "<value2>" ...])

Поддерживаются следующие параметры:

  • timeout

    Указывает период тайм-аута задания загрузки. Единица: секунда. Период тайм-аута по умолчанию составляет 4 часа. Мы рекомендуем указывать период тайм-аута короче 6 часов. Если задание загрузки не завершается в течение периода тайм-аута, Selena отменяет задание загрузки, и статус задания загрузки становится CANCELLED.

    ПРИМЕЧАНИЕ

    В большинстве случаев вам не нужно устанавливать период тайм-аута. Мы рекомендуем устанавливать период тайм-аута только когда задание загрузки не может завершиться в течение периода тайм-аута по умолчанию.

    Используйте следующую формулу для определения периода тайм-аута:

    Период тайм-аута > (Общий размер файлов данных для загрузки x Общее количество файлов данных для загрузки и материализованных представлений, созданных на файлах данных)/Средняя скорость загрузки

    ПРИМЕЧАНИЕ

    "Средняя скорость загрузки" — это средняя скорость загрузки для всего вашего кластера Selena. Средняя скорость загрузки варьируется для каждого кластера в зависимости от конфигурации сервера и максимального количества одновременных задач запросов, разрешенных для кластера. Вы можете определить среднюю скорость загрузки на основе скоростей загрузки исторических заданий загрузки.

    Предположим, что вы хотите загрузить файл данных размером 1 ГБ, на котором созданы два материализованных представления, в кластер Selena, средняя скорость загрузки которого составляет 10 МБ/с. Количество времени, необходимое для загрузки данных, составляет приблизительно 102 секунды.

    (1 x 1024 x 3)/10 = 307.2 (секунда)

    Для этого примера мы рекомендуем установить период тайм-аута на значение больше 308 секунд.

  • max_filter_ratio

    Указывает максимальную толерантность к ошибкам задания загрузки. Максимальная толерантность к ошибкам — это максимальный процент строк, которые могут быть отфильтрованы в результате неадекватного качества данных. Допустимые значения: 0~1. Значение по умолчанию: 0.

    • Если вы установите этот параметр в 0, Selena не игнорирует неквалифицированные строки во время загрузки. Таким образом, если исходные данные содержат неквалифицированные строки, задание загрузки завершится неудачей. Это помогает обеспечить правильность данных, загруженных в Selena.

    • Если вы установите этот параметр в значение больше 0, Selena может игнорировать неквалифицированные строки во время загрузки. Таким образом, задание загрузки может успешно завершиться, даже если исходные данные содержат неквалифицированные строки.

      ПРИМЕЧАНИЕ

      Строки, которые отфильтровываются из-за неадекватного качества данных, не включают строки, которые отфильтровываются предложением WHERE.

    Если задание загрузки завершается неудачей, потому что максимальная толерантность к ошибкам установлена в 0, вы можете использовать SHOW LOAD для просмотра результата задания. Затем определите, можно ли отфильтровать неквалифицированные строки. Если неквалифицированные строки могут быть отфильтрованы, вычислите максимальную толерантность к ошибкам на основе значений, возвращенных для dpp.abnorm.ALL и dpp.norm.ALL в результате задания, отрегулируйте максимальную толерантность к ошибкам и снова отправьте задание загрузки. Формула для вычисления максимальной толерантности к ошибкам следующая:

    max_filter_ratio = [dpp.abnorm.ALL/(dpp.abnorm.ALL + dpp.norm.ALL)]

    Сумма значений, возвращенных для dpp.abnorm.ALL и dpp.norm.ALL, — это общее количество строк для загрузки.

  • log_rejected_record_num

    Указывает максимальное количество неквалифицированных строк данных, которые могут быть зарегистрированы. Этот параметр поддерживается начиная с версии 1.5.0. Допустимые значения: 0, -1 и любое ненулевое положительное целое число. Значение по умолчанию: 0.

    • Значение 0 указывает, что строки данных, которые отфильтровываются, не будут зарегистрированы.
    • Значение -1 указывает, что все строки данных, которые отфильтровываются, будут зарегистрированы.
    • Ненулевое положительное целое число, такое как n, указывает, что до n строк данных, которые отфильтровываются, могут быть зарегистрированы на каждом BE.
  • load_mem_limit

    Указывает максимальное количество памяти, которое может быть предоставлено заданию загрузки. Значение этого параметра не может превышать верхний предел памяти, поддерживаемый каждым узлом BE или CN. Единица: байты: Ограничение памяти по умолчанию составляет 2 ГБ.

  • strict_mode

    Указывает, следует ли включить строгий режим. Допустимые значения: true и false. Значение по умолчанию: false. true указывает включить строгий режим, а false указывает отключить строгий режим.

  • timezone

    Указывает часовой пояс задания загрузки. Значение по умолчанию: Asia/Shanghai. Настройка часового пояса влияет на результаты, возвращаемые функциями, такими как strftime, alignment_timestamp и from_unixtime. Для получения дополнительной информации см. Настройка часового пояса. Часовой пояс, указанный в параметре timezone, является часовым поясом уровня сеанса.

  • priority

    Указывает приоритет задания загрузки. Допустимые значения: LOWEST, LOW, NORMAL, HIGH и HIGHEST. Значение по умолчанию: NORMAL. Broker Load предоставляет параметр FE max_broker_load_job_concurrency, определяет максимальное количество заданий Broker Load, которые могут выполняться одновременно в вашем кластере Selena. Если количество заданий Broker Load, которые отправляются в течение указанного периода времени, превышает максимальное количество, избыточные задания будут ожидать планирования на основе их приоритетов.

    Вы можете использовать оператор ALTER LOAD для изменения приоритета существующего задания загрузки, которое находится в состоянии QUEUEING или LOADING.

    Selena позволяет устанавливать параметр priority для задания Broker Load начиная с версии 1.5.0.

  • partial_update

    Следует ли использовать частичные обновления. Допустимые значения: TRUE и FALSE. Значение по умолчанию: FALSE, указывающее отключить эту функцию.

  • partial_update_mode

    Указывает режим для частичных обновлений. Допустимые значения: row и column.

    • Значение row (по умолчанию) означает частичные обновления в режиме строк, что более подходит для обновлений в реальном времени с множеством столбцов и небольшими пакетами.
    • Значение column означает частичные обновления в режиме столбцов, что более подходит для пакетных обновлений с небольшим количеством столбцов и множеством строк. В таких сценариях включение режима столбцов обеспечивает более быстрые скорости обновления. Например, в таблице со 100 столбцами, если обновляются только 10 столбцов (10% от общего количества) для всех строк, скорость обновления режима столбцов в 10 раз быстрее.

  • merge_condition

    Указывает имя столбца, который вы хотите использовать в качестве условия для определения того, могут ли обновления вступить в силу. Обновление из исходной записи в целевую запись вступает в силу только когда исходная запись данных имеет большее или равное значение, чем целевая запись данных в указанном столбце.

    ПРИМЕЧАНИЕ

    Столбец, который вы указываете, не может быть столбцом первичного ключа. Кроме того, только таблицы, которые используют таблицу Primary Key, поддерживают условные обновления.

Selena поддерживает загрузку данных JSON начиная с версии 1.5.0. Параметры следующие:

  • 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 с использованием согласованного режима с указанным корневым элементом" этой темы.

При загрузке данных JSON также обратите внимание, что размер каждого объекта JSON не может превышать 4 ГБ. Если отдельный объект JSON в файле данных JSON превышает 4 ГБ по размеру, сообщается ошибка "This parser can't support a document that big.".

Сопоставление столбцов

Настройка сопоставления столбцов для загрузки данных CSV

Если столбцы файла данных могут быть сопоставлены один к одному последовательно со столбцами таблицы Selena, вам не нужно настраивать сопоставление столбцов между файлом данных и таблицей Selena.

Если столбцы файла данных не могут быть сопоставлены один к одному последовательно со столбцами таблицы Selena, вам нужно использовать параметр columns для настройки сопоставления столбцов между файлом данных и таблицей Selena. Это включает следующие два случая использования:

  • Одинаковое количество столбцов, но разная последовательность столбцов. Также данные из файла данных не нужно вычислять функциями перед загрузкой в соответствующие столбцы таблицы Selena.

    В параметре columns вам нужно указать имена столбцов таблицы Selena в той же последовательности, как расположены столбцы файла данных.

    Например, таблица Selena состоит из трех столбцов, которые являются col1, col2 и col3 по порядку, и файл данных также состоит из трех столбцов, которые могут быть сопоставлены со столбцами таблицы Selena col3, col2 и col1 по порядку. В этом случае вам нужно указать "columns: col3, col2, col1".

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

    В параметре columns вам нужно указать имена столбцов таблицы Selena в той же последовательности, как расположены столбцы файла данных, и указать функции, которые вы хотите использовать для вычисления данных. Два примера следующие:

    • Таблица Selena состоит из трех столбцов, которые являются col1, col2 и col3 по порядку. Файл данных состоит из четырех столбцов, среди которых первые три столбца могут быть сопоставлены последовательно со столбцами таблицы Selena col1, col2 и col3, а четвертый столбец не может быть сопоставлен ни с одним из столбцов таблицы Selena. В этом случае вам нужно временно указать имя для четвертого столбца файла данных, и временное имя должно отличаться от любого из имен столбцов таблицы Selena. Например, вы можете указать "columns: col1, col2, col3, temp", в котором четвертый столбец файла данных временно назван temp.
    • Таблица Selena состоит из трех столбцов, которые являются year, month и day по порядку. Файл данных состоит только из одного столбца, который содержит значения даты и времени в формате yyyy-mm-dd hh:mm:ss. В этом случае вы можете указать "columns: col, year = year(col), month=month(col), day=day(col)", в котором col — временное имя столбца файла данных, а функции year = year(col), month=month(col) и day=day(col) используются для извлечения данных из столбца файла данных col и загрузки данных в соответствующие столбцы таблицы Selena. Например, year = year(col) используется для извлечения данных yyyy из столбца файла данных col и загрузки данных в столбец таблицы Selena year.

Для подробных примеров см. Настройка сопоставления столбцов.

Настройка сопоставления столбцов для загрузки данных JSON

Если ключи документа JSON имеют те же имена, что и столбцы таблицы Selena, вы можете загрузить данные в формате JSON, используя простой режим. В простом режиме вам не нужно указывать параметр jsonpaths. Этот режим требует, чтобы данные в формате JSON были объектом, обозначенным фигурными скобками {}, например {"category": 1, "author": 2, "price": "3"}. В этом примере category, author и price — имена ключей, и эти ключи могут быть сопоставлены один к одному по имени со столбцами category, author и price таблицы Selena.

Если ключи документа JSON имеют разные имена от столбцов таблицы Selena, вы можете загрузить данные в формате JSON, используя согласованный режим. В согласованном режиме вам нужно использовать параметры jsonpaths и COLUMNS для указания сопоставления столбцов между документом JSON и таблицей Selena:

  • В параметре jsonpaths указать ключи JSON в последовательности, как они расположены в документе JSON.
  • В параметре COLUMNS указать сопоставление между ключами JSON и столбцами таблицы Selena:
    • Имена столбцов, указанные в параметре COLUMNS, сопоставляются один к одному последовательно с ключами JSON.
    • Имена столбцов, указанные в параметре COLUMNS, сопоставляются один к одному по имени со столбцами таблицы Selena.

Для примеров загрузки данных в формате JSON с использованием согласованного режима см. Загрузка данных JSON с использованием согласованного режима.

Связанные элементы конфигурации

Элемент конфигурации FE max_broker_load_job_concurrency указывает максимальное количество заданий Broker Load, которые могут выполняться одновременно в вашем кластере Selena.

В Selena v2.4 и более ранних, если общее количество заданий Broker Load, которые отправляются в течение определенного периода времени, превышает максимальное количество, избыточные задания будут поставлены в очередь и запланированы на основе времени их отправки.

Начиная с Selena v2.5, если общее количество заданий Broker Load, которые отправляются в течение определенного периода времени, превышает максимальное количество, избыточные задания ставятся в очередь и планируются на основе их приоритетов. Вы можете указать приоритет для задания, используя параметр priority, описанный выше. Вы можете использовать ALTER LOAD для изменения приоритета существующего задания, которое находится в состоянии QUEUEING или LOADING.

Разделение заданий и одновременное выполнение

Задание Broker Load может быть разделено на одну или несколько задач, которые выполняются одновременно. Задачи в рамках задания загрузки выполняются в рамках одной транзакции. Они должны либо все успешно завершиться, либо все провалиться. Selena разделяет каждое задание загрузки на основе того, как вы объявляете data_desc в операторе LOAD:

  • Если вы объявляете несколько параметров data_desc, каждый из которых указывает отдельную таблицу, создается задача для загрузки данных каждой таблицы.

  • Если вы объявляете несколько параметров data_desc, каждый из которых указывает отдельный раздел для одной и той же таблицы, создается задача для загрузки данных каждого раздела.

Кроме того, каждая задача может быть дополнительно разделена на один или несколько экземпляров, которые равномерно распределяются и одновременно выполняются на узлах BE или CN вашего кластера Selena. Selena разделяет каждую задачу на основе параметра FE min_bytes_per_broker_scanner и количества узлов BE или CN. Вы можете использовать следующую формулу для вычисления количества экземпляров в отдельной задаче:

Количество экземпляров в отдельной задаче = min(Количество данных для загрузки отдельной задачей/min_bytes_per_broker_scanner, Количество узлов BE/CN)

В большинстве случаев для каждого задания загрузки объявляется только один data_desc, каждое задание загрузки разделяется только на одну задачу, и задача разделяется на то же количество экземпляров, что и количество узлов BE или CN.

Примеры

В этом разделе используется HDFS в качестве примера для описания различных конфигураций загрузки.

Загрузка данных CSV

В этом разделе используется CSV в качестве примера для объяснения различных конфигураций параметров, которые вы можете использовать для удовлетворения ваших разнообразных требований к загрузке.

Установка периода тайм-аута

Ваша база данных Selena test_db содержит таблицу с именем table1. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example1.csv также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table1.

Если вы хотите загрузить все данные из example1.csv в table1 в течение до 3600 секунд, выполните следующую команду:

LOAD LABEL test_db.label1
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example1.csv")
INTO TABLE table1
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
)
PROPERTIES
(
"timeout" = "3600"
);

Установка максимальной толерантности к ошибкам

Ваша база данных Selena test_db содержит таблицу с именем table2. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example2.csv также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table2.

Если вы хотите загрузить все данные из example2.csv в table2 с максимальной толерантностью к ошибкам 0.1, выполните следующую команду:

LOAD LABEL test_db.label2
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example2.csv")
INTO TABLE table2

)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
)
PROPERTIES
(
"max_filter_ratio" = "0.1"
);

Загрузка всех файлов данных из пути к файлу

Ваша база данных Selena test_db содержит таблицу с именем table3. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Все файлы данных, хранящиеся в пути /user/starrocks/data/input/ вашего кластера HDFS, также каждый состоят из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table3. Разделитель столбцов, используемый в этих файлах данных, — \x01.

Если вы хотите загрузить данные из всех этих файлов данных, хранящихся в пути hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/, в table3, выполните следующую команду:

LOAD LABEL test_db.label3
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/*")
INTO TABLE table3
COLUMNS TERMINATED BY "\\x01"
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

Установка механизма HA NameNode

Ваша база данных Selena test_db содержит таблицу с именем table4. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example4.csv также состоит из трех столбцов, которые сопоставляются с col1, col2 и col3 таблицы table4.

Если вы хотите загрузить все данные из example4.csv в table4 с настроенным механизмом HA для NameNode, выполните следующую команду:

LOAD LABEL test_db.label4
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example4.csv")
INTO TABLE table4
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>",
"dfs.nameservices" = "my_ha",
"dfs.ha.namenodes.my_ha" = "my_namenode1, my_namenode2","dfs.namenode.rpc-address.my_ha.my_namenode1" = "nn1_host:rpc_port",
"dfs.namenode.rpc-address.my_ha.my_namenode2" = "nn2_host:rpc_port",
"dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);

Установка аутентификации Kerberos

Ваша база данных Selena test_db содержит таблицу с именем table5. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example5.csv также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table5.

Если вы хотите загрузить все данные из example5.csv в table5 с настроенной аутентификацией Kerberos и указанным путем к файлу keytab, выполните следующую команду:

LOAD LABEL test_db.label5
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example5.csv")
INTO TABLE table5
COLUMNS TERMINATED BY "\t"
)
WITH BROKER
(
"hadoop.security.authentication" = "kerberos",
"kerberos_principal" = "starrocks@YOUR.COM",
"kerberos_keytab" = "/home/starRocks/starRocks.keytab"
);

Отмена загрузки данных

Ваша база данных Selena test_db содержит таблицу с именем table6. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example6.csv также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table6.

Вы загрузили все данные из example6.csv в table6, выполнив задание Broker Load.

Если вы хотите отменить данные, которые вы загрузили, выполните следующую команду:

LOAD LABEL test_db.label6
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example6.csv")
NEGATIVE
INTO TABLE table6
COLUMNS TERMINATED BY "\t"
)
WITH BROKER
(
"hadoop.security.authentication" = "kerberos",
"kerberos_principal" = "starrocks@YOUR.COM",
"kerberos_keytab" = "/home/starRocks/starRocks.keytab"
);

Указание целевых разделов

Ваша база данных Selena test_db содержит таблицу с именем table7. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example7.csv также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table7.

Если вы хотите загрузить все данные из example7.csv в два раздела, p1 и p2, таблицы table7, выполните следующую команду:

LOAD LABEL test_db.label7
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example7.csv")
INTO TABLE table7
PARTITION (p1, p2)
COLUMNS TERMINATED BY ","
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

Настройка сопоставления столбцов

Ваша база данных Selena test_db содержит таблицу с именем table8. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example8.csv также состоит из трех столбцов, которые сопоставляются последовательно с col2, col1 и col3 таблицы table8.

Если вы хотите загрузить все данные из example8.csv в table8, выполните следующую команду:

LOAD LABEL test_db.label8
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example8.csv")
INTO TABLE table8
COLUMNS TERMINATED BY ","
(col2, col1, col3)
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

В приведенном выше примере столбцы example8.csv не могут быть сопоставлены со столбцами table8 в той же последовательности, как эти столбцы расположены в table8. Поэтому вам нужно использовать column_list для настройки сопоставления столбцов между example8.csv и table8.

Установка условий фильтра

Ваша база данных Selena test_db содержит таблицу с именем table9. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example9.csv также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table9.

Если вы хотите загрузить только записи данных, значения которых в первом столбце больше 20180601 из example9.csv в table9, выполните следующую команду:

LOAD LABEL test_db.label9
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example9.csv")
INTO TABLE table9
(col1, col2, col3)
where col1 > 20180601
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

В приведенном выше примере столбцы example9.csv могут быть сопоставлены со столбцами table9 в той же последовательности, как эти столбцы расположены в table9, но вам нужно использовать предложение WHERE для указания условий фильтра на основе столбцов. Поэтому вам нужно использовать column_list для настройки сопоставления столбцов между example9.csv и table9.

Загрузка данных в таблицы, содержащие столбцы типа HLL

Ваша база данных Selena test_db содержит таблицу с именем table10. Таблица состоит из четырех столбцов, которые являются id, col1, col2 и col3 по порядку. col1 и col2 определены как столбцы типа HLL.

Ваш файл данных example10.csv состоит из трех столбцов, среди которых первый столбец сопоставляется с id таблицы table10, а второй и третий столбцы сопоставляются последовательно с col1 и col2 таблицы table10. Значения во втором и третьем столбцах example10.csv могут быть преобразованы в данные типа HLL с помощью функций перед загрузкой в col1 и col2 таблицы table10.

Если вы хотите загрузить все данные из example10.csv в table10, выполните следующую команду:

LOAD LABEL test_db.label10
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example10.csv")
INTO TABLE table10
COLUMNS TERMINATED BY ","
(id, temp1, temp2)
SET
(
col1 = hll_hash(temp1),
col2 = hll_hash(temp2),
col3 = empty_hll()
)
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

В приведенном выше примере три столбца example10.csv названы id, temp1 и temp2 последовательно с использованием column_list. Затем функции используются для преобразования данных следующим образом:

  • Функция hll_hash используется для преобразования значений в temp1 и temp2 из example10.csv в данные типа HLL и сопоставления temp1 и temp2 из example10.csv с col1 и col2 таблицы table10.

  • Функция hll_empty используется для заполнения указанного значения по умолчанию в col3 таблицы table10.

Для использования функций hll_hash и hll_empty см. hll_hash и hll_empty.

Извлечение значений полей разделов из пути к файлу

Broker Load поддерживает анализ значений определенных полей разделов, содержащихся в пути к файлу, на основе определений столбцов целевой таблицы Selena. Эта функция Selena похожа на функцию Partition Discovery Apache Spark™.

Ваша база данных Selena test_db содержит таблицу с именем table11. Таблица состоит из пяти столбцов, которые являются col1, col2, col3, city и utc_date по порядку.

Путь к файлу /user/starrocks/data/input/dir/city=beijing вашего кластера HDFS содержит следующие файлы данных:

  • /user/starrocks/data/input/dir/city=beijing/utc_date=2019-06-26/0000.csv

  • /user/starrocks/data/input/dir/city=beijing/utc_date=2019-06-26/0001.csv

Эти файлы данных каждый состоят из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table11.

Если вы хотите загрузить данные из всех файлов данных из пути к файлу /user/starrocks/data/input/dir/city=beijing/utc_date=*/* в table11 и в то же время вы хотите извлечь значения полей разделов city и utc_date, содержащихся в пути к файлу, и загрузить извлеченные значения в city и utc_date таблицы table11, выполните следующую команду:

LOAD LABEL test_db.label11
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/dir/city=beijing/*/*")
INTO TABLE table11
FORMAT AS "csv"
(col1, col2, col3)
COLUMNS FROM PATH AS (city, utc_date)
SET (uniq_id = md5sum(k1, city))
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

Извлечение значений полей разделов из пути к файлу, включающего %3A

В HDFS пути к файлам не могут содержать двоеточия (:). Все двоеточия (:) будут преобразованы в %3A.

Ваша база данных Selena test_db содержит таблицу с именем table12. Таблица состоит из трех столбцов, которые являются data_time, col1 и col2 по порядку. Схема таблицы следующая:

data_time DATETIME,
col1 INT,
col2 INT

Путь к файлу /user/starrocks/data вашего кластера HDFS содержит следующие файлы данных:

  • /user/starrocks/data/data_time=2020-02-17 00%3A00%3A00/example12.csv

  • /user/starrocks/data/data_time=2020-02-18 00%3A00%3A00/example12.csv

Если вы хотите загрузить все данные из example12.csv в table12 и в то же время вы хотите извлечь значения поля раздела data_time из пути к файлу и загрузить извлеченные значения в data_time таблицы table12, выполните следующую команду:

LOAD LABEL test_db.label12
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/*/example12.csv")
INTO TABLE table12
COLUMNS TERMINATED BY ","
FORMAT AS "csv"
(col1,col2)
COLUMNS FROM PATH AS (data_time)
SET (data_time = str_to_date(data_time, '%Y-%m-%d %H%%3A%i%%3A%s'))
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

В приведенном выше примере значения, извлеченные из поля раздела data_time, являются строками, которые содержат %3A, такими как 2020-02-17 00%3A00%3A00. Поэтому вам нужно использовать функцию str_to_date для преобразования строк в данные типа DATETIME перед их загрузкой в data_time таблицы table8.

Установка format_type_options

Ваша база данных Selena test_db содержит таблицу с именем table13. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example13.csv также состоит из трех столбцов, которые сопоставляются последовательно с col2, col1 и col3 таблицы table13.

Если вы хотите загрузить все данные из example13.csv в table13 с намерением пропустить первые две строки example13.csv, удалить пробелы, предшествующие и следующие за разделителями столбцов, и установить enclose в \ и escape в \, выполните следующую команду:

LOAD LABEL test_db.label13
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/*/example13.csv")
INTO TABLE table13
COLUMNS TERMINATED BY ","
FORMAT AS "CSV"
(
skip_header = 2
trim_space = TRUE
enclose = "\""
escape = "\\"
)
(col2, col1, col3)
)
WITH BROKER
(
"username" = "hdfs_username",
"password" = "hdfs_password"
)
PROPERTIES
(
"timeout" = "3600"
);

Загрузка данных Parquet

В этом разделе описываются некоторые настройки параметров, на которые вам нужно обратить внимание при загрузке данных Parquet.

Ваша база данных Selena test_db содержит таблицу с именем table13. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example13.parquet также состоит из трех столбцов, которые сопоставляются последовательно с col1, col2 и col3 таблицы table13.

Если вы хотите загрузить все данные из example13.parquet в table13, выполните следующую команду:

LOAD LABEL test_db.label13
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example13.parquet")
INTO TABLE table13
FORMAT AS "parquet"
(col1, col2, col3)
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

По умолчанию при загрузке данных Parquet Selena определяет формат файла данных на основе того, содержит ли имя файла расширение .parquet. Если имя файла не содержит расширение .parquet, вы должны использовать FORMAT AS для указания формата файла данных как Parquet.

Загрузка данных ORC

В этом разделе описываются некоторые настройки параметров, на которые вам нужно обратить внимание при загрузке данных ORC.

Ваша база данных Selena test_db содержит таблицу с именем table14. Таблица состоит из трех столбцов, которые являются col1, col2 и col3 по порядку.

Ваш файл данных example14.orc также содержит три столбца, которые сопоставляются последовательно с col1, col2 и col3 таблицы table14.

Если вы хотите загрузить все данные из example14.orc в table14, выполните следующую команду:

LOAD LABEL test_db.label14
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example14.orc")
INTO TABLE table14
FORMAT AS "orc"
(col1, col2, col3)
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

  • По умолчанию при загрузке данных ORC Selena определяет формат файла данных на основе того, содержит ли имя файла расширение .orc. Если имя файла не содержит расширение .orc, вы должны использовать FORMAT AS для указания формата файла данных как ORC.

  • В Selena v2.3 и более ранних, если файл данных содержит столбцы типа ARRAY, вы должны убедиться, что столбцы файла данных ORC имеют те же имена, что и их соответствующие столбцы в таблице Selena, и столбцы не могут быть указаны в предложении SET.

Загрузка данных JSON

В этом разделе описываются настройки параметров, на которые вам нужно обратить внимание при загрузке данных JSON.

Ваша база данных Selena test_db содержит таблицу с именем tbl1, схема которой следующая:

`category` varchar(512) NULL COMMENT "",
`author` varchar(512) NULL COMMENT "",
`title` varchar(512) NULL COMMENT "",
`price` double NULL COMMENT ""

Загрузка данных JSON с использованием простого режима

Предположим, что ваш файл данных example1.json состоит из следующих данных:

{"category":"C++","author":"avc","title":"C++ primer","price":895}

Чтобы загрузить все данные из example1.json в tbl1, выполните следующую команду:

LOAD LABEL test_db.label15
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example1.csv")
INTO TABLE tbl1
FORMAT AS "json"
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);

ПРИМЕЧАНИЕ

В приведенном выше примере параметры columns и jsonpaths не указаны. Поэтому ключи в example1.json сопоставляются по имени со столбцами tbl1.

Загрузка данных JSON с использованием согласованного режима

Selena выполняет следующие шаги для сопоставления и обработки данных JSON:

  1. (Опционально) Удаляет внешнюю структуру массива согласно настройке параметра strip_outer_array.

    ПРИМЕЧАНИЕ

    Этот шаг выполняется только когда внешний слой данных JSON является структурой массива, обозначенной парой квадратных скобок []. Вам нужно установить strip_outer_array в true.

  2. (Опционально) Сопоставляет корневой элемент данных JSON согласно настройке параметра json_root.

    ПРИМЕЧАНИЕ

    Этот шаг выполняется только когда данные JSON имеют корневой элемент. Вам нужно указать корневой элемент с помощью параметра json_root.

  3. Извлекает указанные данные JSON согласно настройке параметра jsonpaths.

Загрузка данных JSON с использованием согласованного режима без указания корневого элемента

Предположим, что ваш файл данных example2.json состоит из следующих данных:

[
{"category":"xuxb111","author":"1avc","title":"SayingsoftheCentury","price":895},
{"category":"xuxb222","author":"2avc","title":"SayingsoftheCentury","price":895},
{"category":"xuxb333","author":"3avc","title":"SayingsoftheCentury","price":895}
]

Чтобы загрузить только category, author и price из example2.json, выполните следующую команду:

LOAD LABEL test_db.label16
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example2.csv")
INTO TABLE tbl1
FORMAT AS "json"
(category, price, author)
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
)
PROPERTIES
(
"strip_outer_array" = "true",
"jsonpaths" = "[\"$.category\",\"$.price\",\"$.author\"]"
);

ПРИМЕЧАНИЕ

В приведенном выше примере внешний слой данных JSON является структурой массива, обозначенной парой квадратных скобок []. Структура массива состоит из нескольких объектов JSON, каждый из которых представляет запись данных. Поэтому вам нужно установить strip_outer_array в true для удаления внешней структуры массива. Ключ title, который вы не хотите загружать, игнорируется во время загрузки.

Загрузка данных JSON с использованием согласованного режима с указанным корневым элементом

Предположим, ваш файл данных example3.json состоит из следующих данных:

{
"id": 10001,
"RECORDS":[
{"category":"11","title":"SayingsoftheCentury","price":895,"timestamp":1589191587},
{"category":"22","author":"2avc","price":895,"timestamp":1589191487},
{"category":"33","author":"3avc","title":"SayingsoftheCentury","timestamp":1589191387}
],
"comments": ["3 records", "there will be 3 rows"]
}

Чтобы загрузить только category, author и price из example3.json, выполните следующую команду:

LOAD LABEL test_db.label17
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/data/input/example3.csv")
INTO TABLE tbl1
FORMAT AS "json"
(category, price, author)
)
WITH BROKER
(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
)
PROPERTIES
(
"json_root"="$.RECORDS",
"strip_outer_array" = "true",
"jsonpaths" = "[\"$.category\",\"$.price\",\"$.author\"]"
);

ПРИМЕЧАНИЕ

В приведенном выше примере внешний слой данных JSON является структурой массива, обозначенной парой квадратных скобок []. Структура массива состоит из нескольких объектов JSON, каждый из которых представляет запись данных. Поэтому вам нужно установить strip_outer_array в true для удаления внешней структуры массива. Ключи title и timestamp, которые вы не хотите загружать, игнорируются во время загрузки. Кроме того, параметр json_root используется для указания корневого элемента, который является массивом, данных JSON.