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 a utilização do modo de notificação de ficheiro 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 (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 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 backfills 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 dehour=3
ou2021/05/03
em vez de2021/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:
- O Azure Data Factory pode ser configurado para carregar ficheiros por ordem lexical. Veja um exemplo aqui.
- Mangueira Kinesis
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 ficheiro for utilizado e o caminho for alterado, podem ocorrer falhas na ingestão de ficheiros já existentes no novo diretório aquando 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.