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

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Существующий Resource HDFS для доступа к HDFS. См. CREATE RESOURCE.Начиная с 2.1.4
enable_mapping_varbinaryПо умолчанию false. Для бинарных полей Parquet и ORC по умолчанию используется тип STRING, а при включении параметра используется VARBINARY. Этот параметр не зависит от enable_mapping_timestamp_tz.Начиная с 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. Если путь не существует или файл пуст, возвращается пустой результат. Недопустимые параметры, недоступное хранилище или файлы с некорректным форматом могут привести к ошибке анализа или выполнения.

Примеры​

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

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.