Crea una tabla a partir de archivos de HDFS. Esta función de tabla es similar a las funciones de tabla url y file.
Sintaxis
hdfs(URI, format, structure)Argumentos
| Argumento | Descripción |
|---|---|
URI |
La URI relativa del archivo en HDFS. La ruta del archivo admite los siguientes globs en modo de solo lectura: *, ?, {abc,def} y {N..M}, donde N y M son números, y 'abc' y 'def' son cadenas. |
format |
El formato del archivo. |
structure |
Estructura de la tabla. Formato: 'column1_name column1_type, column2_name column2_type, ...'. |
Valor devuelto
Una tabla con la estructura especificada para leer o escribir datos en el archivo indicado.
ejemplo
Tabla de hdfs://hdfs1:9000/test y selección de sus dos primeras filas:
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 │
└─────────┴─────────┴─────────┘Globs en la ruta
Las rutas pueden usar globs. Los archivos deben coincidir con el patrón de la ruta completa, no solo con el sufijo o el prefijo.
*— Representa una cantidad arbitraria de caracteres, excepto/, incluida la cadena vacía.**— Representa todos los archivos dentro de una carpeta de forma recursiva.?— Representa un único carácter cualquiera.{some_string,another_string,yet_another_one}— Sustituye cualquiera de las cadenas'some_string', 'another_string', 'yet_another_one'. Las cadenas pueden contener el símbolo/.{N..M}— Representa cualquier número>= Ny<= M.
Las construcciones con {} son similares a las funciones de tabla remote y file.
Ejemplo
- Supongamos que tenemos varios archivos 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'
- Consulta la cantidad de filas de estos archivos:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')- Consulta cuántas filas hay en todos los archivos de estos dos directorios:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')Ejemplo
Consulte los datos de los archivos llamados file000, file001, … , file999:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32')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— Hora de la última modificación del archivo. Tipo:Nullable(DateTime). Si se desconoce la hora, el valor esNULL.
configuración use_hive_partitioning
Cuando use_hive_partitioning se establece en 1, ClickHouse detecta el particionado al estilo Hive en la ruta (/name=value/) y permite usar las columnas de partición como columnas virtuales en la consulta. Estas columnas virtuales tendrán los mismos nombres que en la ruta particionada.
Ejemplo
Usar una columna virtual creada con particionado al estilo Hive
SELECT * FROM HDFS('hdfs://hdfs1:9000/data/path/date=*/country=*/code=*/*.parquet') WHERE date > '2020-01-01' AND country = 'Netherlands' AND code = 42;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 incluye un sufijo. Deshabilitado de forma predeterminada.
- hdfs_skip_empty_files - permite omitir archivos vacíos durante la lectura. Deshabilitado de forma predeterminada.