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

HDFS

Описание​

Табличная функция HDFS (TVF) читает файлы в HDFS в виде реляционной таблицы. Она поддерживает форматы csv, csv_with_names, csv_with_names_and_types, json, parquet, orc и avro.

Синтаксис​

HDFS(
"uri" = "<uri>",
"fs.defaultFS" = "<fs_defaultFS>",
"hadoop.username" = "<hadoop_username>",
"format" = "<format>"
[, "<optional_property_key>" = "<optional_property_value>" [, ...] ]
)

Параметры​

Обязательные параметры​

ПараметрОписание
uriURI файла в HDFS для чтения. Если путь не существует или файл пуст, TVF возвращает пустой результат.
fs.defaultFSURI файловой системы HDFS по умолчанию.
hadoop.usernameИмя пользователя HDFS. Укажите непустую строку.
formatФормат файла: csv, csv_with_names, csv_with_names_and_types, json, parquet, orc или avro.

Необязательные параметры​

Используйте следующие ключи для <optional_property_key> и соответствующие им значения для <optional_property_value>:

ПараметрОписаниеПримечания
hadoop.security.authenticationТип аутентификации HDFS.
hadoop.kerberos.principalПринципал Kerberos.
hadoop.kerberos.keytabФайл keytab Kerberos.
dfs.client.read.shortcircuitВключает чтение HDFS в режиме short-circuit.
dfs.domain.socket.pathПуть к доменному сокету.
dfs.nameservicesNameservice, используемый в режиме HA.
dfs.ha.namenodes.<nameservice>Идентификаторы NameNode для указанного nameservice в режиме HA.
dfs.namenode.rpc-address.<nameservice>.<namenode>RPC-адрес указанного NameNode.
dfs.client.failover.proxy.provider.<nameservice>Класс провайдера прокси для переключения при отказе в nameservice.
column_separatorРазделитель столбцов; по умолчанию \t.
line_delimiterРазделитель строк; по умолчанию \n.
compress_typeСжатие: UNKNOWN, PLAIN, GZ, LZO, BZ2, LZ4FRAME, DEFLATE или SNAPPYBLOCK. По умолчанию UNKNOWN: тип сжатия определяется по суффиксу URI.
read_json_by_lineЧтение JSON построчно; по умолчанию true.Загрузка JSON
strip_outer_arrayУдаление внешнего массива JSON; по умолчанию false.Загрузка JSON
json_rootКорневой путь JSON; по умолчанию пустой.Загрузка JSON
json_pathsПути к полям JSON; по умолчанию пустые.Загрузка JSON
num_as_stringЧтение чисел JSON как строк; по умолчанию false.Загрузка JSON
fuzzy_parseВключает нечёткий разбор JSON; по умолчанию false.Загрузка JSON
trim_double_quotesЛогический параметр для CSV; по умолчанию false. Если включён, удаляет обрамляющие двойные кавычки из каждого поля.
skip_linesЦелочисленный параметр для CSV; по умолчанию 0. Пропускает начальные строки; игнорируется для csv_with_names и csv_with_names_and_types.
path_partition_keysИмена столбцов партиционирования, закодированные в пути и перечисленные через запятую. Для /path/to/city=beijing/date=2023-07-09 используйте city,date, чтобы извлечь эти значения.
resourceСуществующий HDFS Resource, используемый для доступа к HDFS. См. CREATE RESOURCE.Начиная с 2.1.4
enable_mapping_varbinaryВ версии dev принимается только для совместимости и игнорируется: внешние двоичные данные всегда сопоставляются с VARBINARY. В Doris 4.1.5 этот параметр TVF остаётся настраиваемым со значением по умолчанию false.Начиная с 4.0.3
enable_mapping_timestamp_tzНачиная с 4.1.5 принимается только для совместимости; значение игнорируется. Parquet Timestamp с isAdjustedToUTC=true и ORC TIMESTAMP_INSTANT всегда сопоставляются с TIMESTAMPTZ, даже если этот параметр имеет значение false.Начиная с 4.0.3
hive.parquet.time-zoneНеобязательная строка, по умолчанию пустая. Задаёт часовой пояс, используемый при записи Parquet INT96: часовой пояс IANA или смещение UTC от -12:00 до +14:00; короткие псевдонимы, такие как CST и PRC, не допускаются. См. Parquet.Начиная с 4.1.5

Требования к правам доступа​

При использовании параметра resource пользователю, выполняющему запрос, требуется привилегия USAGE на соответствующий Resource. Doris также должен иметь сетевой доступ к HDFS и действительные учётные данные HDFS или Kerberos для доступа к файлам.

Возвращаемое значение​

Возвращает таблицу, имена и типы столбцов которой определяются по файлам. Поля со значением NULL возвращаются как SQL NULL. Несуществующий путь или пустой файл дают пустой результат. Неверные параметры, недоступное хранилище или некорректные файлы могут привести к ошибке анализа или выполнения.

Примеры​

В следующих примерах предполагается, что файл student.csv в HDFS содержит:

1,alice,18
2,bob,20
3,jack,24
4,jackson,19
5,liming,18

Чтение файла CSV​

SELECT * FROM HDFS(
"uri" = "hdfs://127.0.0.1:8424/user/doris/csv_format_test/student.csv",
"fs.defaultFS" = "hdfs://127.0.0.1:8424",
"hadoop.username" = "doris",
"format" = "csv",
"column_separator" = ","
);
+------+---------+------+
| c1 | c2 | c3 |
+------+---------+------+
| 1 | alice | 18 |
| 2 | bob | 20 |
| 3 | jack | 24 |
| 4 | jackson | 19 |
| 5 | liming | 18 |
+------+---------+------+

Чтение файла CSV из HDFS в режиме HA​

Настройте nameservice и адреса обоих NameNode для своего кластера HA. URI и fs.defaultFS используют логический nameservice:

SELECT * FROM HDFS(
"uri" = "hdfs://my_hdfs/user/doris/csv_format_test/student.csv",
"fs.defaultFS" = "hdfs://my_hdfs",
"hadoop.username" = "doris",
"format" = "csv",
"column_separator" = ",",
"dfs.nameservices" = "my_hdfs",
"dfs.ha.namenodes.my_hdfs" = "nn1,nn2",
"dfs.namenode.rpc-address.my_hdfs.nn1" = "namenode01:8020",
"dfs.namenode.rpc-address.my_hdfs.nn2" = "namenode02:8020",
"dfs.client.failover.proxy.provider.my_hdfs" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);
+------+---------+------+
| c1 | c2 | c3 |
+------+---------+------+
| 1 | alice | 18 |
| 2 | bob | 20 |
| 3 | jack | 24 |
| 4 | jackson | 19 |
| 5 | liming | 18 |
+------+---------+------+

Просмотр автоматически определённой схемы​

DESC FUNCTION HDFS(
"uri" = "hdfs://127.0.0.1:8424/user/doris/csv_format_test/student.csv",
"fs.defaultFS" = "hdfs://127.0.0.1:8424",
"hadoop.username" = "doris",
"format" = "csv",
"column_separator" = ","
);
+-------+------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-------+---------+-------+
| c1 | TEXT | Yes | false | NULL | NONE |
| c2 | TEXT | Yes | false | NULL | NONE |
| c3 | TEXT | Yes | false | NULL | NONE |
+-------+------+------+-------+---------+-------+

Примечания по использованию​

Другие общие параметры файлов описаны в разделе S3 TVF. Настройки аутентификации и HA, специфичные для HDFS, описаны в разделе Хранилище HDFS.