Exemplo
Criar uma tabela
Parâmetros do motor
path— URL do bucket com o caminho para o arquivo. Suporta os seguintes curingas no modo somente leitura:*,**,?,{abc,def}e{N..M}, em queN,M— números,'abc','def'— strings. Para mais informações, veja abaixo.NOSIGN- Se esta palavra-chave for fornecida no lugar das credenciais, nenhuma solicitação será assinada.format— O formato do arquivo.aws_access_key_id,aws_secret_access_key- Credenciais de longo prazo para o usuário da conta AWS. Você pode usá-las para autenticar suas solicitações. O parâmetro é opcional. Se as credenciais não forem especificadas, elas serão obtidas do arquivo de configuração. Para mais informações, veja Usar o S3 para armazenamento de dados.compression— Tipo de compressão. Valores compatíveis:none,gzip/gz,brotli/br,xz/LZMA,zstd/zst. O parâmetro é opcional. Por padrão, a compressão será detectada automaticamente pela extensão do arquivo.partition_strategy– Opções:WILDCARDouHIVE.WILDCARDexige um{_partition_id}nopath, que é substituído pela chave de partição.HIVEnão permite curingas, assume que opathé a raiz da tabela e gera diretórios particionados no estilo Hive, com Snowflake IDs como nomes de arquivo e o formato do arquivo como extensão. O padrão éWILDCARDpartition_columns_in_data_file- Usado apenas com a estratégia de particionamentoHIVE. Informa ao ClickHouse se ele deve esperar que as colunas de partição sejam gravadas no arquivo de dados. O padrão éfalse.storage_class_name- Opções:STANDARDouINTELLIGENT_TIERING; permite especificar o AWS S3 Intelligent Tiering.extra_credentials- Opcional. Usado para passar umrole_arnpara acesso baseado em funções no ClickHouse Cloud. Veja Secure S3 para as etapas de configuração.
Cache de dados
S3 oferece suporte ao cache de dados em disco local.
Consulte as opções de configuração e o uso do cache do sistema de arquivos nesta seção.
O cache é feito com base no caminho e no ETag do objeto de armazenamento, portanto o ClickHouse não lerá uma versão desatualizada do cache.
Para ativar o cache, use as configurações filesystem_cache_name = '<name>' e enable_filesystem_cache = 1.
- adicione a seguinte seção ao arquivo de configuração do ClickHouse:
- reutilize a configuração de cache (e, portanto, o armazenamento em cache) da seção
storage_configurationdo ClickHouse, descrita aqui
PARTITION BY
PARTITION BY — Opcional. Na maioria dos casos, você não precisa de uma chave de partição e, se precisar, em geral ela não precisa ser mais granular do que mensal. O particionamento não acelera as consultas (ao contrário da expressão ORDER BY). Você nunca deve usar um particionamento granular demais. Não particione seus dados por identificadores ou nomes de clientes (em vez disso, use o identificador ou nome do cliente como a primeira coluna na expressão ORDER BY).
Para particionamento por mês, use a expressão toYYYYMM(date_column), em que date_column é uma coluna com uma data do tipo Date. Os nomes das partições aqui seguem o formato "YYYYMM".
Estratégia de particionamento
WILDCARD (padrão): substitui o curinga {_partition_id} no caminho do arquivo pela chave de partição real. Leitura não é suportada.
HIVE implementa o particionamento no estilo Hive para leituras & gravações. A leitura é implementada usando um padrão glob recursivo; isso é equivalente a SELECT * FROM s3('table_root/**.parquet').
A gravação gera arquivos no seguinte formato: <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>.
Observação: ao usar a estratégia de particionamento HIVE, a configuração use_hive_partitioning não tem efeito.
Exemplo de estratégia de particionamento HIVE:
Consultando dados particionados
ENGINE usa o token de parâmetro {_partition_id} como parte do objeto no S3 (nome do arquivo) e que as consultas SELECT consultam os nomes de objeto resultantes (por exemplo, test_3.csv).
Como mostrado no exemplo, no momento não há suporte direto para consultar tabelas no S3 que sejam
particionadas, mas isso pode ser feito consultando as partições individuais
usando a função de tabela S3.O principal caso de uso para gravar
dados particionados no S3 é permitir a transferência desses dados para outro
sistema ClickHouse (por exemplo, migrar de sistemas on-premises para ClickHouse
Cloud). Como os conjuntos de dados do ClickHouse costumam ser muito grandes e a
confiabilidade da rede às vezes não é ideal, faz sentido transferir esses conjuntos de dados
em subconjuntos, daí a gravação particionada.
Criar a tabela
Inserir dados
Consultar a partição 3
Selecione a partir da partição 1
Selecionar a partir da partição 45
Limitação
Select * from p, mas, como observado acima, essa consulta falhará; use a consulta anterior.
Inserir dados
s3_truncate_on_insert e s3_create_new_file_on_insert. Veja mais detalhes aqui.
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— Data e hora da última modificação do arquivo. Tipo:Nullable(DateTime). Se a data e hora forem desconhecidas, o valor seráNULL._etag— ETag do arquivo. Tipo:LowCardinality(String). Se o ETag for desconhecido, o valor seráNULL._tags— Tags do arquivo. Tipo:Map(String, String). Se não houver tags, o valor será um map vazio `’.
Detalhes de implementação
- Leituras e gravações podem ocorrer em paralelo
- Não há suporte para:
- Operações
ALTEReSELECT...SAMPLE. - Índices.
- A replicação zero-copy é possível, mas não há suporte para ela.
- Operações
A replicação zero-copy não está pronta para produçãoA replicação zero-copy é desativada por padrão no ClickHouse 22.8 e em versões posteriores. Este recurso não é recomendado para uso em produção.
Curingas no caminho
path pode especificar vários arquivos usando curingas no estilo do bash. Para ser processado, o arquivo deve existir e corresponder ao padrão do caminho completo. A listagem de arquivos é determinada durante o SELECT (não no momento do CREATE).
*— Substitui qualquer quantidade de caracteres, exceto/, inclusive a string vazia.**— Substitui qualquer quantidade de caracteres, inclusive/, inclusive a string vazia.?— Substitui um único caractere.{some_string,another_string,yet_another_one}— Substitui qualquer uma das strings'some_string', 'another_string', 'yet_another_one'.{N..M}— Substitui qualquer número no intervalo de N a M, incluindo ambos os limites. N e M podem ter zeros à esquerda, por exemplo000..078.
{} são semelhantes à table function remote.
Se a listagem de arquivos contiver intervalos numéricos com zeros à esquerda, use a construção com chaves para cada dígito separadamente ou use
?.file-000.csv, file-001.csv, … , file-999.csv:
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_1.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_2.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_3.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_1.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_2.csv'
- ‘https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_3.csv'
- Especifique o intervalo de sufixos dos arquivos:
- Pegue todos os arquivos com o prefixo
some_file_(não deve haver arquivos extras com esse prefixo em nenhuma das duas pastas):
- Pegue todos os arquivos de ambas as pastas (todos os arquivos devem atender ao formato e ao esquema descritos na consulta):
Configurações de armazenamento
- s3_truncate_on_insert - permite truncar o arquivo antes de inserir dados nele. Desativado por padrão.
- s3_create_new_file_on_insert - permite criar um novo arquivo a cada inserção se o formato tiver sufixo. Desativado por padrão.
- s3_skip_empty_files - permite ignorar arquivos vazios durante a leitura. Ativado por padrão.
Configurações relacionadas ao S3
s3_max_single_part_upload_size— O tamanho máximo do objeto a ser enviado usando upload de parte única para o S3. O valor padrão é32Mb.s3_min_upload_part_size— O tamanho mínimo da parte a ser enviada durante o upload multipartes no S3 Multipart upload. O valor padrão é16Mb.s3_max_redirects— Número máximo de saltos de redirecionamento do S3 permitidos. O valor padrão é10.s3_single_read_retries— O número máximo de tentativas durante uma única leitura. O valor padrão é4.s3_max_put_rps— Taxa máxima de requisições PUT por segundo antes da limitação de taxa. O valor padrão é0(ilimitado).s3_max_put_burst— Número máximo de requisições que podem ser emitidas simultaneamente antes de atingir o limite de requisições por segundo. Por padrão (valor0), é igual as3_max_put_rps.s3_max_get_rps— Taxa máxima de requisições GET por segundo antes da limitação de taxa. O valor padrão é0(ilimitado).s3_max_get_burst— Número máximo de requisições que podem ser emitidas simultaneamente antes de atingir o limite de requisições por segundo. Por padrão (valor0), é igual as3_max_get_rps.s3_upload_part_size_multiply_factor- Multiplicas3_min_upload_part_sizepor esse fator sempre ques3_multiply_parts_count_thresholdpartes forem enviadas em uma única gravação para o S3. O valor padrão é2.s3_upload_part_size_multiply_parts_count_threshold- Sempre que esse número de partes for enviado para o S3,s3_min_upload_part_sizeé multiplicado pors3_upload_part_size_multiply_factor. O valor padrão é500.s3_max_inflight_parts_for_one_file- Limita o número de requisições PUT que podem ser executadas concorrentemente para um objeto. Esse valor deve ser limitado. O valor0significa ilimitado. O valor padrão é20. Cada parte em andamento tem um buffer de tamanhos3_min_upload_part_sizepara as primeirass3_upload_part_size_multiply_factorpartes, e maior quando o arquivo é grande o suficiente; consulteupload_part_size_multiply_factor. Com as configurações padrão, um arquivo enviado consome no máximo320Mbpara um arquivo com menos de8G. O consumo é maior para arquivos maiores.
s3_max_redirects deve ser definido como zero para evitar ataques de SSRF; ou, alternativamente, remote_host_filter deve ser especificado na configuração do servidor.
Configurações por endpoint
endpoint— Especifica o prefixo de um endpoint. Obrigatório.access_key_idesecret_access_key— Especifica as credenciais a serem usadas com o endpoint informado. Opcional.use_environment_credentials— Se definido comotrue, o cliente S3 tentará obter credenciais de variáveis de ambiente e dos metadados da instância EC2 da Amazon para o endpoint informado. Opcional; o valor padrão éfalse.region— Especifica o nome da região do S3. Opcional.use_insecure_imds_request— Se definido comotrue, o cliente S3 usará uma solicitação IMDS insegura ao obter credenciais dos metadados da Amazon EC2. Opcional; o valor padrão éfalse.expiration_window_seconds— Período de tolerância para verificar se credenciais com expiração já expiraram. Opcional; o valor padrão é120.no_sign_request- Ignora todas as credenciais para que as solicitações não sejam assinadas. Útil para acessar buckets públicos.header— Adiciona o cabeçalho HTTP especificado a uma solicitação para o endpoint informado. Opcional, pode ser especificado várias vezes.access_header- Adiciona o cabeçalho HTTP especificado a uma solicitação para o endpoint informado, nos casos em que não houver outras credenciais de outra origem.server_side_encryption_customer_key_base64— Se especificado, os cabeçalhos necessários para acessar objetos S3 com criptografia SSE-C serão definidos. Opcional.server_side_encryption_kms_key_id- Se especificado, os cabeçalhos necessários para acessar objetos S3 com criptografia SSE-KMS serão definidos. Se uma string vazia for especificada, a chave S3 gerenciada pela AWS será usada. Opcional.server_side_encryption_kms_encryption_context- Se especificado junto comserver_side_encryption_kms_key_id, o cabeçalho do contexto de criptografia fornecido para SSE-KMS será definido. Opcional.server_side_encryption_kms_bucket_key_enabled- Se especificado junto comserver_side_encryption_kms_key_id, o cabeçalho para ativar chaves de bucket do S3 para SSE-KMS será definido. Opcional; pode sertrueoufalse; o padrão é nenhum valor (corresponde à configuração no nível do bucket).max_single_read_retries— O número máximo de tentativas em uma única leitura. O valor padrão é4. Opcional.max_put_rps,max_put_burst,max_get_rpsemax_get_burst- Configurações de limitação de taxa (veja a descrição acima) a serem usadas para um endpoint específico em vez de por consulta. Opcional.
Trabalhando com arquivos compactados
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip'
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip'
- ‘https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip'
ClickHouse oferece suporte a três formatos de arquivo:
ZIP
TAR
7Z
Embora os arquivos ZIP e TAR possam ser acessados de qualquer local de armazenamento compatível, os arquivos 7Z só podem ser lidos no sistema de arquivos local onde o ClickHouse está instalado.
Acessando buckets públicos
403.
Esse problema pode ser evitado usando a palavra-chave NOSIGN, o que força o cliente a ignorar todas as credenciais e não assinar as requisições.
Otimizando o desempenho
s3, consulte nosso guia detalhado.
Acesso baseado em função
roleARN pode ser informado por meio do parâmetro extra_credentials: