Cria uma tabela com base em arquivos no HDFS. Esta função de tabela é semelhante às funções de tabela url e file.
Sintaxe
hdfs(URI, format, structure)Argumentos
| Argumento | Descrição |
|---|---|
URI |
A URI relativa para o arquivo no HDFS. O caminho para o arquivo oferece suporte aos seguintes globs no modo somente leitura: *, ?, {abc,def} e {N..M}, em que N, M — números, 'abc', 'def' — strings. |
format |
O formato do arquivo. |
structure |
Estrutura da tabela. Formato: 'column1_name column1_type, column2_name column2_type, ...'. |
Valor retornado
Uma tabela com a estrutura especificada para ler ou gravar dados no arquivo especificado.
exemplo
Tabela em hdfs://hdfs1:9000/test e seleção das duas primeiras linhas:
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 no caminho
Os caminhos podem usar globs. Os arquivos devem corresponder ao padrão do caminho completo, não apenas ao sufixo ou prefixo.
*— Representa uma quantidade arbitrária de caracteres, exceto/, incluindo a string vazia.**— Representa todos os arquivos dentro de uma pasta, recursivamente.?— Representa um único caractere arbitrário.{some_string,another_string,yet_another_one}— Substitui qualquer uma das strings'some_string', 'another_string', 'yet_another_one'. As strings podem conter o símbolo/.{N..M}— Representa qualquer número>= Ne<= M.
Construções com {} são semelhantes às funções de tabela remote e file.
Exemplo
- Suponha que haja vários arquivos com os seguintes URIs no 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'
- Consulte a quantidade de linhas nesses arquivos:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')- Consulte a quantidade de linhas de todos os arquivos nesses dois diretórios:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')Exemplo
Consulte os dados dos arquivos chamados file000, file001, … , file999:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32')Colunas virtuais
_path— Caminho do arquivo. Tipo:LowCardinality(String)._file— Nome do arquivo. Tipo:LowCardinality(String)._size— Tamanho do arquivo em bytes. Tipo:Nullable(UInt64). Se o tamanho for desconhecido, o valor seráNULL._time— Hora da última modificação do arquivo. Tipo:Nullable(DateTime). Se a hora for desconhecida, o valor seráNULL.
configuração use_hive_partitioning
Quando a configuração use_hive_partitioning é definida como 1, o ClickHouse detecta o particionamento no estilo Hive no caminho (/name=value/) e permite usar colunas de partição como colunas virtuais na consulta. Essas colunas virtuais terão os mesmos nomes do caminho particionado.
Exemplo
Usar a coluna virtual criada com o particionamento no 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;Configurações de armazenamento
- hdfs_truncate_on_insert - permite truncar o arquivo antes de inserir dados nele. Desativado por padrão.
- hdfs_create_new_file_on_insert - permite criar um novo arquivo a cada inserção se o formato tiver sufixo. Desativado por padrão.
- hdfs_skip_empty_files - permite ignorar arquivos vazios durante a leitura. Desativado por padrão.