Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Important
Deze functie bevindt zich in de bètaversie. Om het te gebruiken, moet een workspace-beheerder Bestandstype inschakelen op de pagina Voorvertoningen. Zie Azure Databricks previews beheren.
In deze tutorial bouw je een medallionsysteem met Lakeflow pipeline, waarmee je ongestructureerde documenten van begin tot eind verwerkt. Dit voorbeeld gebruikt de samples.sec.contracts voorbeelddataset, een verzameling door SEC ingediende juridische overeenkomsten die als PDF's in een Unity Catalog-volume zijn opgeslagen.
De pipeline neemt de PDF's als beheerde FILE referenties in met Auto Loader, parseert elk document met AI-functies, classificeert het in een overeenkomsttype en extraht gestructureerde velden voor elk type.
Voor de typereferentie, zie FILE type.
In deze tutorial, zul je:
- Incrementele contract-PDF's van een volume invoeren als beheerde
FILEreferenties met Auto Loader. - Parseer elk document met
ai_parse_documentfunction en classificeer het metai_classifyfunction. - Haal gestructureerde velden uit voor elk overeenkomsttype met de
ai_extract-functie.
Het resultaat is een pipeline volgens het medaillonmodel: brons (ruwe beheerde FILE referenties), zilver (geanalyseerde en geclassificeerde documenten) en goud (gewonnen velden per overeenkomsttype). Zie Wat is de medallion lakehouse-architectuur? voor meer informatie. De bronze-laag is een streaming-tabel die bestanden incrementeel opneemt, en de silver- en gold-lagen zijn gematerialiseerde weergaven die pas opnieuw berekenen wanneer hun invoer verandert.
Requirements
Als u deze zelfstudie wilt voltooien, moet u aan de volgende vereisten voldoen:
- Wees aangemeld bij een Azure Databricks-werkruimte met Unity Catalog ingeschakeld.
- Laat het
FILEtype voor je werkruimte ingeschakeld staan. Workspace-beheerders kunnen het inschakelen via de Previews-pagina. Zie Azure Databricks previews beheren. - Machtigingen hebben om tabellen in een schema te maken en een pipeline te maken.
- Zorg voor een Unity Catalog-volume waar je naartoe kunt schrijven. Je definieert dit volume als de
FileSpacevan de bronze table, en Unity Catalog kopieert de ingevoerde bestanden erin als managed storage. - Gebruik het Preview-kanaal.
De samples.sec.contracts dataset is standaard beschikbaar in alle werkruimtes. Deze tutorial slaat de geïngeste PDF's op als FILE MANAGED referenties: Unity Catalog kopieert elk bestand naar het volume dat je als FileSpace van de tabel hebt aangemerkt en beheert het met de tabel, dus het verwijderen van rijen maakt de gerefereerde bestanden geschikt voor garbage collection en de tabel en de bestanden blijven synchroon. Om de pipeline aan te passen aan je eigen PDF's, wijs je het bronpad naar een volume dat je bestanden bevat. Voor andere invoeropties, zie Bestanden opnemen als het FILE-type.
Maak de bestandsverwerkingspijplijn aan
De pijplijn verwerkt documenten in drie fasen.
Stap 1. Brons: ruwe pdf's opnemen als beheerde bestandsverwijzingen
Gebruik Auto Loader om de contract-PDF's stapsgewijs van het volume te lezen. Het lezen van bestanden met format => 'file' vangt een referentie en metadata voor elk bestand zonder de bytes te materialiseren. Door de kolom als FILE MANAGED te declareren, kopieer je elk bestand naar de FileSpace van de tabel, het volume dat je met de databricks.filespace-preview tabeleigenschap instelt, zodat Unity Catalog de bestanden met de tabel beheert.
SQL
CREATE OR REFRESH STREAMING TABLE raw_contracts (
path STRING,
size BIGINT,
modification_time TIMESTAMP,
file FILE MANAGED
)
TBLPROPERTIES ('databricks.filespace-preview' = '/Volumes/my_catalog/my_schema/filespace/')
AS SELECT *
FROM STREAM read_files(
'/Volumes/samples/sec/contracts/',
format => 'file');
Python
from pyspark import pipelines as dp
@dp.table(
name="raw_contracts",
schema="path STRING, size BIGINT, modification_time TIMESTAMP, file FILE MANAGED",
table_properties={"databricks.filespace-preview": "/Volumes/my_catalog/my_schema/filespace/"}
)
def raw_contracts():
return (
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "file")
.load("/Volumes/samples/sec/contracts/")
)
-
Werkt voor grote bestanden: een grote PDF staat in de
FileSpacevan de tabel, terwijl de tabelrij alleen een lichtgewichtFILE-referentie opslaat (uri,size,content_type,checksum). Vergelijk dit met hetBINARYtype, dat de bytes inline in de rij opslaat. -
Beheerde bestandslevenscyclus: Unity Catalog kopieert elk ingevoerd bestand naar de
FileSpacevan de tabel en beheert dit samen met de tabel: het verwijderen van rijen maakt de bestanden waarnaar wordt verwezen geschikt voor garbage collection, zodat de tabel en de bestanden synchroon blijven. Zie FILE MANAGED en FILE EXTERNAL voor meer informatie. -
Incrementele verwerking: de streamingtabel voert incrementeel nieuwe bestanden in zodra ze in de bron aankomen, zonder bestaande bestanden opnieuw te verwerken. De
samples.sec.contractsdataset in dit voorbeeld is statisch, maar met een live bron worden bij elke pipeline-update nieuwe bestanden opgepikt. Om ook bronwijzigingen en -verwijderingen te verspreiden, consumeer je de change feed metAUTO CDC. Zie Updates en verwijderingen toepassen bij AUTO CDC.
Stap 2. Zilver: documenten analyseren en classificeren
Geef elke FILE door aan de ai_parse_document-functie om de ruwe PDF om te zetten in een gestructureerde VARIANT met documentelementen, lay-outmetadata en tekst. Omdat ai_parse_document een FILE-kolom accepteert, leest het het document rechtstreeks uit de opslag en laadt het de bytes nooit in het clustergeheugen.
SQL
CREATE OR REFRESH MATERIALIZED VIEW parsed_contracts AS
SELECT
path,
ai_parse_document(file) AS parsed
FROM raw_contracts;
Python
@dp.materialized_view(name="parsed_contracts")
def parsed_contracts():
return (
spark.read.table("raw_contracts")
.selectExpr("path", "ai_parse_document(file) AS parsed")
)
Note
Het definiëren van de parsestap als een gematerialiseerde weergave over de raw_contracts streamingtabel maakt de berekening incrementeel. Elke pipeline-update draait ai_parse_document alleen op de bestanden die sinds de laatste update zijn toegevoegd, niet op de hele tabel. Omdat ai_parse_document de duurste stap is, voorkom je het opnieuw parseren van documenten die je al hebt verwerkt. Incrementele verversing van gematerialiseerde weergaven vereist serverloze compute; draai de pipeline op serverloze compute. Zie Spark Declarative Pipelines op Lakeflow.
Vervolgens geef je de geparseerde output door aan de functie ai_classify om elk document een van de vijf overeenkomsttypen toe te wijzen. Documenten met parseringsfouten worden gefilterd vóór classificatie. Dit voorbeeld zet ai_classify vast op versie 2.1, die de classificatie als een per-label object teruggeeft, dus lees het label uit de sleutel value.
SQL
CREATE OR REFRESH MATERIALIZED VIEW classified_contracts AS
SELECT
path,
parsed,
ai_classify(
parsed,
'["affiliate_agreement", "marketing_agreement", "consulting_agreement", "hosting_agreement", "escrow_agreement"]',
map('version', '2.1')
):response[0].value::STRING AS contract_type
FROM parsed_contracts
WHERE is_variant_null(parsed:error_status);
Python
@dp.materialized_view(name="classified_contracts")
def classified_contracts():
return (
spark.read.table("parsed_contracts")
.filter("is_variant_null(parsed:error_status)")
.selectExpr(
"path",
"parsed",
"""ai_classify(
parsed,
'["affiliate_agreement", "marketing_agreement", "consulting_agreement", "hosting_agreement", "escrow_agreement"]',
map('version', '2.1')
):response[0].value::STRING AS contract_type""")
)
Tip
Om de classificatienauwkeurigheid te verbeteren, voeg labelbeschrijvingen en een instructions-optie toe aan ai_classify. Zie ai_classify de functie.
Stap 3. Goud: velden extraheren per overeenkomsttypen
Elk overeenkomsttype heeft zijn eigen set relevante velden. Filter de geclassificeerde documenten op één type, geef de geparste inhoud door aan de ai_extract-functie met een schema van de velden die je wilt, en zet de respons vervolgens om in getypeerde kolommen. Dit voorbeeld zet ai_extract vast op versie 2.1, waarin elk geëxtraheerd veld een object is, dus lees de sleutel value.
Het volgende voorbeeld vormt de gold table voor adviesovereenkomsten:
SQL
CREATE OR REFRESH MATERIALIZED VIEW consulting_agreements AS
WITH extracted AS (
SELECT
path,
ai_extract(
parsed,
'["company_name", "consultant_name", "compensation_amount", "effective_date"]',
map('version', '2.1')
) AS fields
FROM classified_contracts
WHERE contract_type = 'consulting_agreement'
)
SELECT
path,
fields:response.company_name.value::STRING AS company_name,
fields:response.consultant_name.value::STRING AS consultant_name,
fields:response.compensation_amount.value::STRING AS compensation_amount,
fields:response.effective_date.value::STRING AS effective_date
FROM extracted;
Python
@dp.materialized_view(name="consulting_agreements")
def consulting_agreements():
return (
spark.read.table("classified_contracts")
.filter("contract_type = 'consulting_agreement'")
.selectExpr(
"path",
"""ai_extract(
parsed,
'["company_name", "consultant_name", "compensation_amount", "effective_date"]',
map('version', '2.1')
) AS fields""")
.selectExpr(
"path",
"fields:response.company_name.value::STRING AS company_name",
"fields:response.consultant_name.value::STRING AS consultant_name",
"fields:response.compensation_amount.value::STRING AS compensation_amount",
"fields:response.effective_date.value::STRING AS effective_date")
)
Met deze statements heb je een volledig incrementele pipeline: zodra nieuwe contract-PDF's in het volume binnenkomen, voert Auto Loader ze in als beheerde FILE-referenties, ai_parse_document en ai_classify elk document routeren, waarna de consulting_agreements goudgematerialiseerde weergave de geëxtraheerde velden zichtbaar maakt.
Voorbeeldnotitieboeken
De volgende notebooks bevatten de volledige pijplijn uit deze tutorial. Deze notebooks zijn pipeline-broncode, geen uitvoerbare notebooks. Importeer het notebook voor jouw taal, en specificeer vervolgens het pad in het Source Code-veld wanneer je de pipeline configureert. Zie Pijplijnen configureren.
SQL
Bestandsverwerkingspijplijn SQL-notebook
Python
Bestandsverwerkingspijplijn Python notebook
Ontdek het zelf
De pijplijn classificeert documenten in vijf overeenkomsttypes, maar extraheert velden voor slechts consulting_agreement. Om deze uit te breiden, herhaal je de gold step voor elk overgebleven type, waarbij je het contract_type filter en het ai_extract schema aanpast zodat ze overeenkomen met de velden die relevant zijn voor dat type. Voorbeeld:
-
affiliate_agreement:party_1_name,party_2_name,commission_rate,payment_frequency -
marketing_agreement:party_1_name,party_2_name,effective_date,territory -
hosting_agreement:provider_name,customer_name,effective_date,term_length -
escrow_agreement:owner_name,licensee_name,escrow_agent_name,software_name
Aanvullende bronnen
-
FILEtype - Bestanden invoeren als het FILE-type
- FILE-functies snelstart
- Meer informatie over autolaadprogramma's. Zie Wat is Auto Loader?