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 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?

Databricks otimizou o modo de listagem de diretórios para que o Auto Loader descubra arquivos no armazenamento cloud 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 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 site Auto Loader reduz o número de chamadas para API ao número de arquivos no armazenamento dividido pelo número de resultados retornados por cada chamada para API, reduzindo consideravelmente os custos do site cloud. 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)

Importante

Esse recurso foi descontinuado. A Databricks recomenda o uso do 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 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 aumentar 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 lexical (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.

Aviso

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.