Использование
URI— полный URI файла в HDFS. Часть пути вURIможет содержать глоб-шаблоны. В этом случае таблица будет доступна только для чтения.format— задаёт один из доступных форматов файлов. Чтобы выполнять запросыSELECT, формат должен поддерживать ввод, а для выполнения запросовINSERT— вывод. Доступные форматы перечислены в разделе Форматы.- [PARTITION BY expr]
PARTITION BY
PARTITION BY — необязателен. В большинстве случаев ключ партиционирования не нужен, а если и нужен, то обычно достаточно партиционирования по месяцам. Партиционирование не ускоряет запросы (в отличие от выражения ORDER BY). Никогда не используйте слишком мелкое партиционирование. Не разбивайте данные на партиции по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY).
Для партиционирования по месяцам используйте выражение toYYYYMM(date_column), где date_column — столбец с датой типа Date. Имена партиций здесь имеют формат "YYYYMM".
Пример:
1. Настройте таблицу hdfs_engine_table:
Подробности реализации
- Чтение и запись могут выполняться параллельно.
- Не поддерживаются:
- Операции
ALTERиSELECT...SAMPLE. - Индексы.
- Репликация с нулевым копированием возможна, но не рекомендуется.
- Операции
Репликация с нулевым копированием не готова к использованию в продакшнеРепликация с нулевым копированием отключена по умолчанию в ClickHouse версии 22.8 и выше. Эта возможность не рекомендуется для использования в продакшне.
SELECT (а не в момент CREATE).
*— Подставляет любое количество любых символов, кроме/, включая пустую строку.?— Подставляет любой одиночный символ.{some_string,another_string,yet_another_one}— Подставляет любую из строк'some_string', 'another_string', 'yet_another_one'.{N..M}— Подставляет любое число в диапазоне от N до M включительно.
{} аналогичны табличной функции remote.
Пример
-
Предположим, у нас есть несколько файлов в формате TSV со следующими 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:
Конфигурация
hdfs) и пользовательский (hdfs_*). Сначала применяется глобальная конфигурация, затем — пользовательская (если она задана).
Параметры конфигурации
Поддерживается в libhdfs3
| параметр | значение по умолчанию |
|---|---|
| rpc_client_connect_tcpnodelay | true |
| dfs_client_read_shortcircuit | true |
| output_replace-datanode-on-failure | true |
| input_notretry-another-node | false |
| input_localread_mappedfile | true |
| dfs_client_use_legacy_blockreader_local | false |
| rpc_client_ping_interval | 10 * 1000 |
| rpc_client_connect_timeout | 600 * 1000 |
| rpc_client_read_timeout | 3600 * 1000 |
| rpc_client_write_timeout | 3600 * 1000 |
| rpc_client_socket_linger_timeout | -1 |
| rpc_client_connect_retry | 10 |
| rpc_client_timeout | 3600 * 1000 |
| dfs_default_replica | 3 |
| input_connect_timeout | 600 * 1000 |
| input_read_timeout | 3600 * 1000 |
| input_write_timeout | 3600 * 1000 |
| input_localread_default_buffersize | 1 * 1024 * 1024 |
| dfs_prefetchsize | 10 |
| input_read_getblockinfo_retry | 3 |
| input_localread_blockinfo_cachesize | 1000 |
| input_read_max_retry | 60 |
| output_default_chunksize | 512 |
| output_default_packetsize | 64 * 1024 |
| output_default_write_retry | 10 |
| output_connect_timeout | 600 * 1000 |
| output_read_timeout | 3600 * 1000 |
| output_write_timeout | 3600 * 1000 |
| output_close_timeout | 3600 * 1000 |
| output_packetpool_size | 1024 |
| output_heartbeat_interval | 10 * 1000 |
| dfs_client_failover_max_attempts | 15 |
| dfs_client_read_shortcircuit_streams_cache_size | 256 |
| dfs_client_socketcache_expiryMsec | 3000 |
| dfs_client_socketcache_capacity | 16 |
| dfs_default_blocksize | 64 * 1024 * 1024 |
| dfs_default_uri | ”hdfs://localhost:9000” |
| hadoop_security_authentication | ”simple” |
| hadoop_security_kerberos_ticket_cache_path | "" |
| dfs_client_log_severity | ”INFO” |
| dfs_domain_socket_path | "" |
Дополнительные параметры ClickHouse
| параметр | значение по умолчанию |
|---|---|
| hadoop_kerberos_keytab | "" |
| hadoop_kerberos_principal | "" |
| libhdfs3_conf | "" |
Ограничения
hadoop_security_kerberos_ticket_cache_pathиlibhdfs3_confмогут быть только глобальными, а не пользовательскими
Поддержка Kerberos
hadoop_security_authentication имеет значение kerberos, ClickHouse выполняет аутентификацию через Kerberos.
Параметры приведены здесь, также может быть полезен hadoop_security_kerberos_ticket_cache_path.
Обратите внимание, что из-за ограничений libhdfs3 поддерживается только старый подход:
взаимодействие с datanode не защищено с помощью SASL (HADOOP_SECURE_DN_USER — надёжный индикатор такого
подхода к безопасности). В качестве примера см. tests/integration/test_storage_kerberized_hdfs/hdfs_configs/bootstrap.sh.
Если указаны hadoop_kerberos_keytab, hadoop_kerberos_principal или hadoop_security_kerberos_ticket_cache_path, будет использоваться аутентификация Kerberos. В этом случае hadoop_kerberos_keytab и hadoop_kerberos_principal обязательны.
Поддержка HA для NameNode в HDFS
- Скопируйте
hdfs-site.xmlс узла HDFS в/etc/clickhouse-server/. - Добавьте следующий фрагмент в config-файл ClickHouse:
- Затем используйте значение тега
dfs.nameservicesизhdfs-site.xmlв качестве адреса NameNode в URI HDFS. Например, заменитеhdfs://appadmin@192.168.101.11:8020/abc/наhdfs://appadmin@my_nameservice/abc/.
Виртуальные столбцы
_path— Путь к файлу. Тип:LowCardinality(String)._file— Имя файла. Тип:LowCardinality(String)._size— Размер файла в байтах. Тип:Nullable(UInt64). Если размер неизвестен, значение —NULL._time— Время последнего изменения файла. Тип:Nullable(DateTime). Если время неизвестно, значение —NULL.
Настройки хранилища
- hdfs_truncate_on_insert - позволяет обрезать файл перед вставкой в него. По умолчанию отключено.
- hdfs_create_new_file_on_insert - позволяет создавать новый файл при каждой вставке, если у формата есть суффикс. По умолчанию отключено.
- hdfs_skip_empty_files - позволяет пропускать пустые файлы при чтении. По умолчанию отключено.