Pular para o conteúdo principal

O que é o modo de listagem de diretórios do Auto Loader?

Auto Loader usa o modo de listagem de diretórios em default. No modo de listagem de diretórios, o Auto Loader identifica novos arquivos listando o diretório de entrada. O modo de listagem de diretórios permite que o senhor comece rapidamente Auto Loader transmissão sem nenhuma configuração de permissão além do acesso aos seus dados no armazenamento em nuvem.

Para obter o melhor desempenho com o modo de listagem de diretórios, use o Databricks Runtime 9.1 ou superior. Este artigo descreve a funcionalidade default do modo de listagem de diretórios, bem como as otimizações baseadas na ordenação lexical de arquivos.

Como funciona o modo de listagem de diretórios?

A Databricks otimizou o modo de listagem de diretórios do Auto Loader para descobrir arquivos no armazenamento em nuvem com mais eficiência do que outras opções do Apache Spark.

Por exemplo, se o senhor tiver arquivos sendo carregados a cada 5 minutos como /some/path/YYYY/MM/DD/HH/fileName, para encontrar todos os arquivos nesses diretórios, a fonte de arquivos Apache Spark lista todos os subdiretórios em paralelo. O algoritmo a seguir estima o número total de chamadas de diretório da API LIST para o armazenamento de objetos:

1 (diretório base) + 365 (por dia) * 24 (por hora) = 8761 chamadas

Ao receber uma resposta achatada do armazenamento, o Auto Loader reduz o número de chamadas de API para o número de arquivos no armazenamento dividido pelo número de resultados retornados por cada chamada de API, reduzindo consideravelmente seus custos de nuvem. A tabela a seguir mostra o número de arquivos retornados por cada chamada de API para armazenamento de objetos comuns:

Resultados retornados por chamada

Armazenamento de objetos

1000

S3

5000

ADLS Gen2

1024

GCS

Listagem incremental (descontinuada)

important

Esse recurso foi descontinuado. A Databricks recomenda o uso do modo de notificação de arquivo em vez de listagem incremental.

nota

Disponível em Databricks Runtime 9.1 LTS e acima.

A listagem incremental está disponível para o Azure Data Lake Storage Gen2 (abfss://), S3 (s3://) e GCS (gs://).

Para arquivos gerados lexicograficamente, o Auto Loader aproveita a ordenação de arquivos lexicais e as APIs de listagem otimizadas para melhorar a eficiência da listagem de diretórios, listando os arquivos recentemente ingeridos em vez de listar o conteúdo de todo o diretório.

Em default, o Auto Loader detecta automaticamente se um determinado diretório é aplicável à listagem incremental, verificando e comparando caminhos de arquivos de listagens de diretórios concluídas anteriormente. Para garantir a eventual integridade dos dados no modo auto, o Auto Loader aciona automaticamente uma lista de diretórios completa após a conclusão de 7 listas incrementais consecutivas. Você pode controlar a frequência das listas completas de diretórios definindo cloudFiles.backfillInterval para acionar preenchimentos assíncronos em um determinado intervalo.

Ordenação lexical dos arquivos

Para que os arquivos sejam ordenados lexicalmente, os novos arquivos carregados precisam ter um prefixo que seja lexicograficamente maior do que os arquivos existentes. Alguns exemplos de diretórios léxicos ordenados são mostrados abaixo.

Arquivos versionados

Delta Lake faz o commit no log de transações da tabela em uma ordem lexical.

<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...

AWS O DMS carrega os arquivos CDC para AWS S3 de forma versionada.

database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...

Arquivos particionados por data

Os arquivos podem ser carregados em um formato dividido por data. Alguns exemplos disso são:

// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...

// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute

Quando os arquivos são carregados com particionamento de data, alguns aspectos devem ser considerados:

  • Os meses, dias, horas e minutos precisam ser preenchidos com zeros para garantir a ordenação léxica (devem ser carregados como hour=03, em vez de hour=3 ou 2021/05/03 em vez de 2021/5/3).
  • Os arquivos não precisam necessariamente ser carregados em ordem léxica no diretório mais profundo, desde que o processamento ocorra com menos frequência do que a granularidade de tempo do diretório principal.

Alguns serviços que podem upload arquivos em uma ordem lexical particionada por data são:

Alterar o caminho de origem do Auto Loader

No Databricks Runtime 11.3 LTSe acima, você pode alterar o caminho de entrada do diretório para o Auto Loader configurado com o modo de listagem de diretórios sem precisar escolher um novo diretório de ponto de verificação.

atenção

Essa funcionalidade não é compatível com o modo de notificação de arquivos. Se o modo de notificação de arquivo for usado e o caminho for alterado, talvez você não consiga ingerir arquivos que já estão presentes no novo diretório no momento da atualização do diretório.

Por exemplo, se o senhor desejar executar um Job de ingestão diária que carregue todos os dados de uma estrutura de diretório organizada por dia, como /YYYYMMDD/, poderá usar o mesmo ponto de verificação para rastrear as informações de estado de ingestão em um diretório de origem diferente a cada dia, mantendo as informações de estado dos arquivos ingeridos de todos os diretórios de origem usados anteriormente.