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 - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
Смотрите также