Создаёт таблицу на основе файлов в HDFS. Эта табличная функция похожа на табличные функции url и file.
Синтаксис
hdfs(URI, format, structure)Аргументы
| Аргумент | Описание |
|---|---|
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 и выборка первых двух строк из неё:
SELECT *
FROM hdfs('hdfs://hdfs1:9000/test', 'TSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
LIMIT 2┌─column1─┬─column2─┬─column3─┐
│ 1 │ 2 │ 3 │
│ 3 │ 2 │ 1 │
└─────────┴─────────┴─────────┘Глоб-шаблоны в пути
В путях можно использовать глоб-шаблоны. Файлы должны соответствовать всему шаблону пути, а не только суффиксу или префиксу.
*— Обозначает произвольное количество символов, кроме/, включая пустую строку.**— Обозначает все файлы в папке рекурсивно.?— Обозначает один произвольный символ.{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'
- Выполните запрос, чтобы подсчитать количество строк в этих файлах:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')- Запросите количество строк во всех файлах в этих двух каталогах:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')Пример
Выполните запрос к данным из файлов с именами file000, file001, … , file999:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32')Виртуальные столбцы
_path— Путь к файлу. Тип:LowCardinality(String)._file— Имя файла. Тип:LowCardinality(String)._size— Размер файла в байтах. Тип:Nullable(UInt64). Если размер неизвестен, значение —NULL._time— Время последнего изменения файла. Тип:Nullable(DateTime). Если время неизвестно, значение —NULL.
настройка use_hive_partitioning
Если для настройки use_hive_partitioning установлено значение 1, ClickHouse распознаёт партиционирование в стиле Hive в пути (/name=value/) и позволяет использовать столбцы партиции в запросе как виртуальные столбцы. Эти виртуальные столбцы будут иметь те же имена, что и в пути с партициями.
Пример
Использование виртуального столбца, созданного при партиционировании в стиле Hive
SELECT * FROM HDFS('hdfs://hdfs1:9000/data/path/date=*/country=*/code=*/*.parquet') WHERE date > '2020-01-01' AND country = 'Netherlands' AND code = 42;Настройки хранилища
- hdfs_truncate_on_insert - позволяет обрезать файл перед вставкой в него. По умолчанию отключено.
- hdfs_create_new_file_on_insert - позволяет создавать новый файл при каждой вставке, если у формата есть суффикс. По умолчанию отключено.
- hdfs_skip_empty_files - позволяет пропускать пустые файлы при чтении. По умолчанию отключено.