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örhour=3
eller2021/05/03
i stället2021/5/3
fö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:
- Azure Data Factory kan konfigureras för att ladda upp filer i lexikal ordning. Se ett exempel här.
- Kinesis Firehose
Ä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.