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

O Auto Loader usa o modo de listagem de diretórios por 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ório permite que você comece rapidamente a transmissão Auto Loader sem nenhuma configuração de permissão além do acesso aos seus dados no armazenamento cloud .

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

Como funciona o modo de listagem de diretórios?

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

Por exemplo, se você tiver arquivos sendo upload a cada 5 minutos como /some/path/YYYY/MM/DD/HH/fileName, para localizar todos os arquivos nesses diretórios, a origem 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 da 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 no armazenamento dividido pelo número de resultados retornados por cada chamada de API, reduzindo bastante seus custos cloud . A tabela a seguir mostra o número de arquivos retornados por cada chamada de API para armazenamento de objeto comum:

Resultados retornados por chamada

Armazenamento de objetos

1000

S3

5000

ADLS Gen2

1024

GCS

Listagem incremental (obsoleta)

Importante

Este recurso foi descontinuado. Databricks recomenda usar o modo de notificação de arquivo em vez da listagem incremental.

Observação

Disponível no Databricks Runtime 9.1 LTSe acima.

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

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

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

Ordenação léxica de arquivos

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

Arquivos com versão

O Delta Lake commit log in uma ordem léxica.

<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 upload de arquivos CDC para o AWS S3 com controle de versão.

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

Arquivos particionados por data

Os arquivos podem ser upload em um formato particionado 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 upload com particionamento de data, algumas coisas a serem lembradas são:

  • Meses, dias, horas e minutos precisam ser preenchidos com zeros para garantir a ordem lexical (deve ser upload 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 upload 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 pai.

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

Alterar o caminho de origem para 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.

Aviso

Esta funcionalidade não é suportada no modo de notificação de arquivo. 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 uma Job de ingestão diária que carrega todos os dados de uma estrutura de diretório 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 informação de estado para arquivos ingeridos de todos os diretórios de origem usados anteriormente.