hdfs Табличная Функция
Создает таблицу из файлов в HDFS. Эта табличная функция аналогична url и file табличным функциям.
Входные параметры
URI
— Относительный URI к файлу в HDFS. Путь к файлу поддерживает следующие шаблоны в режиме только для чтения:*
,?
,{abc,def}
и{N..M}
гдеN
,M
— числа, `'abc', 'def'
— строки.format
— формат файла.structure
— Структура таблицы. Формат'column1_name column1_type, column2_name column2_type, ...'
.
Возвращаемое значение
Таблица с указанной структурой для чтения или записи данных в указанном файле.
Пример
Таблица из hdfs://hdfs1:9000/test
и выбор первых двух строк из нее:
Шаблоны в пути
Пути могут использовать шаблоны. Файлы должны соответствовать всему шаблону пути, а не только суффиксу или префиксу.
*
— Представляет произвольное количество символов, за исключением/
, но включая пустую строку.**
— Представляет все файлы внутри папки рекурсивно.?
— Представляет произвольный один символ.{some_string,another_string,yet_another_one}
— Заменяет любую из строк'some_string', 'another_string', 'yet_another_one'
. Строки могут содержать символ/
.{N..M}
— Представляет любое число>= N
и<= M
.
Конструкции с {}
аналогичны remote и file табличным функциям.
Пример
- Предположим, что у нас есть несколько файлов со следующими URI на HDFS:
- 'hdfs://hdfs1:9000/some_dir/some_file_1'
- 'hdfs://hdfs1:9000/some_dir/some_file_2'
- 'hdfs://hdfs1:9000/some_dir/some_file_3'
- 'hdfs://hdfs1:9000/another_dir/some_file_1'
- 'hdfs://hdfs1:9000/another_dir/some_file_2'
- 'hdfs://hdfs1:9000/another_dir/some_file_3'
- Запрос количества строк в этих файлах:
- Запрос количества строк во всех файлах этих двух директорий:
Если в вашем списке файлов есть диапазоны чисел с ведущими нулями, используйте конструкцию с фигурными скобками для каждой цифры отдельно или используйте ?
.
Пример
Запрос данных из файлов с названиями file000
, file001
, ... , file999
:
Виртуальные Столбцы
_path
— Путь к файлу. Тип:LowCardinality(String)
._file
— Имя файла. Тип:LowCardinality(String)
._size
— Размер файла в байтах. Тип:Nullable(UInt64)
. Если размер неизвестен, значениеNULL
._time
— Время последнего изменения файла. Тип:Nullable(DateTime)
. Если время неизвестно, значениеNULL
.
Разделение в стиле Hive
Когда use_hive_partitioning
установлено в 1, ClickHouse будет обнаруживать разделение в стиле Hive в пути (/name=value/
) и позволит использовать столбцы разделения как виртуальные столбцы в запросе. Эти виртуальные столбцы будут иметь те же имена, что и в разделенном пути, но начинаться с _
.
Пример
Использование виртуального столбца, созданного с помощью разделения в стиле Hive
Настройки Хранения
- hdfs_truncate_on_insert - позволяет обрезать файл перед вставкой в него. Отключено по умолчанию.
- hdfs_create_new_file_on_insert - позволяет создать новый файл при каждой вставке, если формат имеет суффикс. Отключено по умолчанию.
- hdfs_skip_empty_files - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
Смотрите также