Vad är kataloglistningsläge för automatisk inläsning?

Automatisk inläsare använder kataloglistningsläge som standard. I kataloglistningsläge identifierar Auto Loader nya filer genom att visa indatakatalogen. Med kataloglistningsläget kan du snabbt starta automatiska inläsningsströmmar utan några andra behörighetskonfigurationer än åtkomst till dina data i molnlagringen.

För bästa prestanda med kataloglistningsläge använder du Databricks Runtime 9.1 eller senare. Den här artikeln beskriver standardfunktionerna i kataloglistningsläget samt optimeringar baserat på lexikal ordning av filer.

Hur fungerar kataloglistningsläget?

Azure Databricks har optimerat kataloglistningsläget för automatisk inläsning för att identifiera filer i molnlagring effektivare än andra Apache Spark-alternativ.

Om du till exempel har filer som laddas upp var femte minut som /some/path/YYYY/MM/DD/HH/fileName, för att hitta alla filer i dessa kataloger, visar Apache Spark-filkällan alla underkataloger parallellt. Följande algoritm uppskattar det totala antalet API-kataloganrop LIST till objektlagring:

1 (baskatalog) + 365 (per dag) * 24 (per timme) = 8761 samtal

Genom att ta emot ett utplattat svar från lagringen minskar Auto Loader antalet API-anrop till antalet filer i lagringen dividerat med antalet resultat som returneras av varje API-anrop, vilket avsevärt minskar molnkostnaderna. I följande tabell visas antalet filer som returneras av varje API-anrop för gemensam objektlagring:

Resultat som returneras per anrop Objektlagring
1000 S3
5000 ADLS Gen2
1024 GCS

Inkrementell lista (inaktuell)

Viktigt!

Den här funktionen är inaktuell. Databricks rekommenderar att du använder filmeddelandeläget i stället för inkrementell lista.

Kommentar

Finns i Databricks Runtime 9.1 LTS och senare.

Inkrementell lista är tillgänglig för Azure Data Lake Storage Gen2 (abfss://), S3 (s3://) och GCS (gs://).

För lexicographically genererade filer utnyttjar Auto Loader den lexikala filordningen och optimerade listnings-API:er för att förbättra effektiviteten i kataloglistan genom att lista från nyligen inmatade filer i stället för att visa innehållet i hela katalogen.

Som standard identifierar Auto Loader automatiskt om en viss katalog är tillämplig för inkrementell listning genom att kontrollera och jämföra filsökvägar för tidigare slutförda kataloglistor. För att säkerställa eventuell fullständighet av data i auto läge utlöser Auto Loader automatiskt en fullständig kataloglista efter att ha slutfört 7 på varandra följande inkrementella listor. Du kan styra frekvensen för fullständiga kataloglistor genom att ange cloudFiles.backfillInterval att utlösa asynkrona återfyllnad vid ett visst intervall.

Lexikal ordning av filer

För att filer ska ordnas lexikalt måste nya filer som laddas upp ha ett prefix som är lexicographically större än befintliga filer. Några exempel på lexikala beställda kataloger visas nedan.

Versionshanterade filer

Delta Lake gör incheckningar i tabelltransaktionsloggar i en lexikal ordning.

<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 DMS laddar upp CDC-filer till AWS S3 på ett versionsmässigt sätt.

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

Datum för partitionerade filer

Filer kan laddas upp i ett datumpartitionerat format. Några exempel på detta är:

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

När filer laddas upp med datumpartitionering är några saker att tänka på:

  • Månader, dagar, timmar, minuter måste lämnas vadderade med nollor för att säkerställa lexikal beställning (bör laddas upp som hour=03, i stället för hour=3 eller 2021/05/03 i stället 2021/5/3för ).
  • Filer behöver inte nödvändigtvis laddas upp i lexikal ordning i den djupaste katalogen så länge bearbetningen sker mindre ofta än den överordnade katalogens tidskornighet.

Vissa tjänster som kan ladda upp filer i en datumpartitionerad lexikal ordning är:

Ändra källsökväg för automatisk inläsning

I Databricks Runtime 11.3 LTS och senare kan du ändra sökvägen för katalogindata för automatisk inläsning som konfigurerats med kataloglistningsläge utan att behöva välja en ny kontrollpunktskatalog.

Varning

Den här funktionen stöds inte för filaviseringsläge. Om filmeddelandeläget används och sökvägen ändras, kan du misslyckas med att inhämta filer som redan finns i den nya katalogen vid tidpunkten för uppdateringen av katalogen.

Om du till exempel vill köra ett dagligt inmatningsjobb som läser in alla data från en katalogstruktur som organiseras per dag, till exempel , kan du använda samma kontrollpunkt för att spåra information om inmatningstillstånd i en annan källkatalog varje dag samtidigt som /YYYYMMDD/tillståndsinformation för filer som matas in från alla tidigare använda källkataloger bibehålls.