Partilhar via


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

O Auto Loader usa o modo de listagem de diretórios por padrão. 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 você inicie rapidamente fluxos do Auto Loader 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 padrão do modo de listagem de diretórios, bem como otimizações baseadas na ordenação lexical de arquivos.

Como funciona o modo de listagem de diretórios?

O Azure Databricks otimizou o modo de listagem de diretórios para o Auto Loader para descobrir arquivos no armazenamento em nuvem de forma mais eficiente do que outras opções do Apache Spark.

Por exemplo, se você 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 do arquivo Apache Spark lista todos os subdiretórios em paralelo. O algoritmo a seguir estima o número total de chamadas de diretório de API LIST para armazenamento de objetos:

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

Ao receber uma resposta nivelada do armazenamento, o Auto Loader reduz o número de chamadas de API para o número de arquivos em armazenamento dividido pelo número de resultados retornados por cada chamada de API, reduzindo consideravelmente os custos na 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 (preterida)

Importante

Esta caraterística foi preterida. O Databricks recomenda o uso do modo de notificação de arquivo em vez da listagem incremental.

Nota

Disponível em Databricks Runtime 9.1 LTS e superior.

A listagem incremental está disponível para o Azure Data Lake Storage Gen2 (), S3 () e GCS (abfss://s3://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 arquivos ingeridos recentemente, em vez de listar o conteúdo de todo o diretório.

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

Ordenação lexical de ficheiros

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

Arquivos versionados

A Delta Lake compromete-se a tabelar logs de transações 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
...

O AWS DMS faz upload de arquivos CDC para o AWS S3 de forma versionada.

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

Data de arquivos particionados

Os arquivos podem ser carregados em um formato particionado de 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, algumas coisas a ter em mente são:

  • Meses, dias, horas, minutos precisam ser deixados acolchoados com zeros para garantir a ordenação lexical (deve ser carregado como hour=03, em vez de ou 2021/05/03 em vez de hour=32021/5/3).
  • Os arquivos não precisam necessariamente ser carregados em ordem lexical no diretório mais profundo, desde que o processamento aconteça com menos frequência do que a granularidade de tempo do diretório pai.

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

Alterar o caminho de origem do Auto Loader

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

Aviso

Esta funcionalidade não é suportada para o modo de notificação de ficheiros. Se o modo de notificação de arquivo for usado e o caminho for alterado, você poderá falhar ao ingerir arquivos que já estão presentes no novo diretório no momento da atualização do diretório.

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