Uso
URI- URI completa del archivo en HDFS. La parte de la ruta deURIpuede contener globs. En ese caso, la tabla sería de solo lectura.format- especifica uno de los formatos de archivo disponibles. Para realizar consultasSELECT, el formato debe admitir entrada, y para realizar consultasINSERT, salida. Los formatos disponibles se enumeran en la sección Formatos.- [PARTITION BY expr]
PARTITION BY
PARTITION BY — Opcional. En la mayoría de los casos, no se necesita una clave de partición y, si hace falta, por lo general no debe ser más granular que por mes. La partición no acelera las consultas (a diferencia de la expresión ORDER BY). Nunca debe usar una partición demasiado granular. No particione sus datos por identificadores o nombres de clientes (en su lugar, haga que el identificador o el nombre del cliente sea la primera columna de la expresión ORDER BY).
Para particionar por mes, use la expresión toYYYYMM(date_column), donde date_column es una columna con una fecha del tipo Date. Aquí, los nombres de las particiones tienen el formato "YYYYMM".
Ejemplo:
1. Configure la tabla hdfs_engine_table:
Detalles de implementación
- Las lecturas y escrituras pueden ser paralelas.
- No se admiten:
- Las operaciones
ALTERySELECT...SAMPLE. - Los índices.
- La replicación zero-copy es posible, pero no se recomienda.
- Las operaciones
La replicación zero-copy no está lista para producciónLa replicación zero-copy está deshabilitada de forma predeterminada en ClickHouse versión 22.8 y posteriores. Esta función no se recomienda para uso en producción.
SELECT (no en el momento de CREATE).
*— Sustituye cualquier cantidad de caracteres, excepto/, incluida la cadena vacía.?— Sustituye cualquier carácter individual.{some_string,another_string,yet_another_one}— Sustituye cualquiera de las cadenas'some_string', 'another_string', 'yet_another_one'.{N..M}— Sustituye cualquier número en el intervalo de N a M, incluidos ambos extremos.
{} son similares a la función de tabla remote.
Ejemplo
-
Supongamos que tenemos varios archivos en formato TSV con los siguientes URI en 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’
- Hay varias formas de crear una tabla compuesta por los seis archivos:
Si la lista de archivos contiene rangos numéricos con ceros a la izquierda, use la sintaxis con llaves para cada dígito por separado o use
?.file000, file001, … , file999:
Configuración
hdfs) y otra a nivel de usuario (hdfs_*). Primero se aplica la configuración global y, después, la configuración a nivel de usuario (si existe).
Opciones de configuración
Compatible con libhdfs3
| parámetro | valor predeterminado |
|---|---|
| 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 | "" |
Opciones adicionales de ClickHouse
| parámetro | valor predeterminado |
|---|---|
| hadoop_kerberos_keytab | "" |
| hadoop_kerberos_principal | "" |
| libhdfs3_conf | "" |
Limitaciones
hadoop_security_kerberos_ticket_cache_pathylibhdfs3_confsolo pueden ser globales, no específicos para cada usuario
Compatibilidad con Kerberos
hadoop_security_authentication tiene el valor kerberos, ClickHouse se autentica mediante Kerberos.
Los parámetros están aquí, y hadoop_security_kerberos_ticket_cache_path puede ser útil.
Tenga en cuenta que, debido a las limitaciones de libhdfs3, solo se admite el enfoque tradicional;
las comunicaciones del datanode no están protegidas mediante SASL (HADOOP_SECURE_DN_USER es un indicador fiable de este
enfoque de seguridad). Use tests/integration/test_storage_kerberized_hdfs/hdfs_configs/bootstrap.sh como referencia.
Si se especifican hadoop_kerberos_keytab, hadoop_kerberos_principal o hadoop_security_kerberos_ticket_cache_path, se utilizará la autenticación de Kerberos. En este caso, hadoop_kerberos_keytab y hadoop_kerberos_principal son obligatorios.
Compatibilidad con HDFS NameNode HA
- Copie
hdfs-site.xmldesde un nodo de HDFS a/etc/clickhouse-server/. - Agregue la siguiente sección al archivo de configuración de ClickHouse:
- Luego, usa el valor de la etiqueta
dfs.nameservicesdehdfs-site.xmlcomo dirección del namenode en el URI de HDFS. Por ejemplo, sustituyehdfs://appadmin@192.168.101.11:8020/abc/porhdfs://appadmin@my_nameservice/abc/.
Columnas virtuales
_path— Ruta del archivo. Tipo:LowCardinality(String)._file— Nombre del archivo. Tipo:LowCardinality(String)._size— Tamaño del archivo en bytes. Tipo:Nullable(UInt64). Si se desconoce el tamaño, el valor esNULL._time— Fecha y hora de la última modificación del archivo. Tipo:Nullable(DateTime). Si se desconoce la hora, el valor esNULL.
Configuración de almacenamiento
- hdfs_truncate_on_insert - permite truncar el archivo antes de insertar datos en él. Deshabilitado de forma predeterminada.
- hdfs_create_new_file_on_insert - permite crear un archivo nuevo en cada inserción si el formato tiene un sufijo. Deshabilitado de forma predeterminada.
- hdfs_skip_empty_files - permite omitir archivos vacíos durante la lectura. Deshabilitado de forma predeterminada.