Läsa in data med hjälp av strömmande tabeller i Databricks SQL
Databricks rekommenderar att du använder strömmande tabeller för att mata in data med Databricks SQL. En strömningstabell är en tabell som är registrerad i Unity Catalog med extra stöd för direktuppspelning eller inkrementell databehandling. En DLT-pipeline skapas automatiskt för varje strömmande tabell. Du kan använda strömmande tabeller för inkrementell datainläsning från Kafka och molnobjektlagring.
Den här artikeln visar hur du använder strömmande tabeller för att läsa in data från molnobjektlagring som konfigurerats som en Unity Catalog-volym (rekommenderas) eller extern plats.
Anmärkning
Information om hur du använder Delta Lake-tabeller som strömmande källor och mottagare finns i Delta table streaming reads and writes.
Viktigt!
Strömmande tabeller som skapats i Databricks SQL backas upp av en serverlös DLT-pipeline. Din arbetsyta måste ha stöd för serverlösa pipelines för att kunna använda den här funktionen.
Innan du börjar
Innan du börjar måste du uppfylla följande krav.
Krav för arbetsyta:
- Ett Azure Databricks-konto med serverlöst aktiverat. Mer information finns i Aktivera serverlösa SQL-lager.
- En arbetsyta med Unity Catalog aktiverat. Mer information finns i Konfigurera och hantera Unity Catalog.
Beräkningskrav:
Du måste använda något av följande:
- Ett SQL-lager som använder
Current
kanalen. - Beräkning med standardåtkomstläge (tidigare delat åtkomstläge) på Databricks Runtime 13.3 LTS eller senare.
Beräkning med dedikerat åtkomstläge (tidigare åtkomstläge för en enskild användare) på Databricks Runtime 15.4 LTS eller senare.
På Databricks Runtime 15.3 och nedan kan du inte använda dedikerad beräkning för att köra frågor mot strömmande tabeller som ägs av andra användare. Du kan endast använda dedikerad beräkning på Databricks Runtime 15.3 och lägre om du äger strömningstabellen. Skaparen av tabellen är ägare.
Databricks Runtime 15.4 LTS och senare stöder frågor om DLT-genererade tabeller vid dedikerad beräkning, oavsett tabellägarskap. Om du vill dra nytta av datafiltreringen i Databricks Runtime 15.4 LTS och senare måste du bekräfta att din arbetsyta är aktiverad för serverlös beräkning eftersom datafiltreringsfunktionen som stöder DLT-genererade tabeller körs på serverlös beräkning. Du kan debiteras för serverlösa beräkningsresurser när du använder dedikerad beräkning för att köra datafiltreringsåtgärder. Se Detaljerad åtkomstkontroll för dedikerade datorresurser (tidigare enanvändarberäkning).
Behörighetskrav:
- Behörighet
READ FILES
på en extern plats i Unity-katalogen. Mer information finns i Skapa en extern plats för att ansluta molnlagring till Azure Databricks. - Den
USE CATALOG
-behörigheten i katalogen där du skapar streamingtabelle. - Den
USE SCHEMA
behörigheten för schemat där du skapar strömningstabellen. - Den
CREATE TABLE
behörigheten för schemat där du skapar streamingtabellen.
Andra krav:
Sökvägen till dina källdata.
Exempel på volymsökväg:
/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
Exempel på extern platssökväg:
abfss://myContainer@myStorageAccount.dfs.core.windows.net/analysis
Anteckning
Den här artikeln förutsätter att de data som du vill läsa in finns på en molnlagringsplats som motsvarar en Unity Catalog-volym eller en extern plats som du har åtkomst till.
Identifiera och förhandsgranska källdata
I sidofältet på arbetsytan klickar du på Frågor och sedan på Skapa fråga.
I frågeredigeraren väljer du ett SQL-lager som använder kanalen
Current
från listrutan.Klistra in följande i redigeraren, ersätt värden i vinkelparenteser (
<>
) för den information som identifierar dina källdata och klicka sedan på Kör.Kommentar
Du kan stöta på schemainferensfel när du kör funktionen
read_files
tabellvärde om standardvärdena för funktionen inte kan parsa dina data. Du kan till exempel behöva konfigurera flerradsläge för CSV- eller JSON-filer med flera rader. En lista över parsningsalternativ finns iread_files
tabellvärdesfunktion./* Discover your data in a volume */ LIST "/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>" /* Preview your data in a volume */ SELECT * FROM read_files("/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>") LIMIT 10 /* Discover your data in an external location */ LIST "abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>" /* Preview your data */ SELECT * FROM read_files("abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>") LIMIT 10
Ladda data i en strömmande tabell
Om du vill skapa en strömmande tabell från data i molnobjektlagring klistrar du in följande i frågeredigeraren och klickar sedan på Kör:
/* Load data from a volume */
CREATE OR REFRESH STREAMING TABLE <table-name> AS
SELECT * FROM STREAM read_files('/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>')
/* Load data from an external location */
CREATE OR REFRESH STREAMING TABLE <table-name> AS
SELECT * FROM STREAM read_files('abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>')
Ange körningskanalen
Strömmande tabeller som skapats med SQL-lager uppdateras automatiskt med hjälp av en DLT-pipeline. DLT-pipelines använder körmiljö i current
-kanalen som standard. Se versionsinformation om DLT och uppgraderingsprocessen för releaser för att lära dig mer om releaser.
Databricks rekommenderar att du använder current
kanalen för produktionsarbetsbelastningar. Nya funktioner släpps först till preview
kanalen. Du kan ange en pipeline till DLT-förhandsgranskningskanalen för att testa nya funktioner genom att ange preview
som en tabellegenskap. Du kan ange den här egenskapen när du skapar tabellen eller när tabellen har skapats med hjälp av en ALTER-instruktion.
I följande kodexempel visas hur du ställer in kanalen som förhandsversion i en CREATE-instruktion:
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
Uppdatera en strömmande tabell med hjälp av en DLT-pipeline
I det här avsnittet beskrivs mönster för att uppdatera en strömmande tabell med de senaste tillgängliga data från källorna som definierats i frågan.
När du CREATE
eller REFRESH
en strömmande tabell bearbetas uppdateringen med hjälp av en serverlös DLT-pipeline. Varje strömmande tabell som du definierar har en associerad DLT-pipeline.
När du har kört kommandot REFRESH
returneras DLT-pipelinelänken. Du kan använda DLT-pipelinelänken för att kontrollera status för uppdateringen.
Anteckning
Endast tabellägaren kan uppdatera en strömmande tabell för att hämta de senaste data. Användaren som skapar tabellen är ägare och ägaren kan inte ändras. Du kan behöva uppdatera strömningstabellen innan du använder frågor om tidsresor.
Se Vad är DLT?.
Mata bara in ny data
Som standard läser funktionen read_files
alla befintliga data i källkatalogen när tabellen skapas och bearbetar sedan nyligen ankommande poster med varje uppdatering.
Om du vill undvika att mata in data som redan finns i källkatalogen när tabellen skapas anger du alternativet includeExistingFiles
till false
. Det innebär att endast data som tas emot i katalogen när tabellen har skapats har bearbetats. Till exempel:
CREATE OR REFRESH STREAMING TABLE my_bronze_table
AS SELECT *
FROM STREAM read_files(
'abfss://myContainer@myStorageAccount.dfs.core.windows.net/analysis/*/*/*.json',
includeExistingFiles => false)
Uppdatera en strömningstabell fullständigt
Fullständiga uppdateringar bearbetar om alla data som är tillgängliga i källan med den senaste definitionen. Vi rekommenderar inte att du anropar fullständiga uppdateringar på källor som inte behåller hela datahistoriken eller har korta kvarhållningsperioder, till exempel Kafka, eftersom den fullständiga uppdateringen trunkerar befintliga data. Du kanske inte kan återställa gamla data om data inte längre är tillgängliga i källan.
Till exempel:
REFRESH STREAMING TABLE my_bronze_table FULL
Schemalägga en strömningstabell för automatisk uppdatering
Om du vill konfigurera en strömmande tabell så att den uppdateras automatiskt baserat på ett definierat schema klistrar du in följande i frågeredigeraren och klickar sedan på Kör:
ALTER STREAMING TABLE
[[<catalog>.]<database>.]<name>
ADD [SCHEDULE [REFRESH]
CRON '<cron-string>'
[ AT TIME ZONE '<timezone-id>' ]];
Exempel på uppdateringsschemafrågor finns i ALTER STREAMING TABLE.
Spåra status för en uppdatering
Du kan visa status för en uppdatering av en strömmande tabell genom att visa pipelinen som hanterar strömningstabellen i DLT-användargränssnittet eller genom att visa Uppdatera information som returneras av kommandot DESCRIBE EXTENDED
för strömningstabellen.
DESCRIBE EXTENDED <table-name>
Strömmande inmatning från Kafka
Ett exempel på strömmande inmatning från Kafka finns i read_kafka.
Bevilja användare åtkomst till en streamingtavla
Om du vill ge användarna SELECT
behörighet i strömningstabellen så att de kan köra frågor mot den klistrar du in följande i frågeredigeraren och klickar sedan på Kör:
GRANT SELECT ON TABLE <catalog>.<schema>.<table> TO <user-or-group>
Mer information om hur du beviljar behörigheter för skyddsbara objekt i Unity Catalog finns i Unity Catalog-privilegier och skyddsbara objekt.
ta bort poster från en streamingtabell permanent
Viktigt!
Stöd för REORG
-instruktionen med strömmande tabeller finns i offentlig förhandsversion.
Kommentar
- Om du använder en
REORG
-instruktion med en strömmande tabell krävs Databricks Runtime 15.4 och senare. - Även om du kan använda instruktionen
REORG
med en strömmande tabell krävs den bara när du tar bort poster från en strömmande tabell med borttagningsvektorer aktiverade. Kommandot har ingen effekt när det används med en strömmande tabell utan att borttagningsvektorer har aktiverats.
För att fysiskt ta bort poster från den underliggande lagringen för en strömmande tabell med borttagningsvektorer aktiverade, till exempel för GDPR-efterlevnad, måste ytterligare åtgärder vidtas för att säkerställa att en VACUUM åtgärd körs på strömningstabellens data.
Följande beskriver de här stegen mer detaljerat:
- Uppdatera poster eller ta bort poster från strömningstabellen.
- Kör en
REORG
-instruktion mot strömningstabellen och ange parameternAPPLY (PURGE)
. Till exempelREORG TABLE <streaming-table-name> APPLY (PURGE);
. - Vänta tills lagringsperioden för strömningstabellen har passerat. Standardperioden för datakvarhållning är sju dagar, men den kan konfigureras med egenskapen
delta.deletedFileRetentionDuration
tabell. Se även Konfigurera datakvarhållning för historiska sökfrågor. -
REFRESH
strömningstabellen. Se Uppdatera en streamingtabel med hjälp av en DLT-pipeline. Inom 24 timmar efter denREFRESH
åtgärden körs DLT-underhållsaktiviteter, inklusive denVACUUM
åtgärd som krävs för att säkerställa att poster tas bort permanent. Se Underhållsaktiviteter som utförs av DLT.
Övervaka körningar med hjälp av frågehistorik
Du kan använda sidan för frågehistorik för att få åtkomst till frågeinformation och frågeprofiler som kan hjälpa dig att identifiera frågor och flaskhalsar som fungerar dåligt i DLT-pipelinen som används för att köra uppdateringar av strömningstabellen. En översikt över vilken typ av information som är tillgänglig i frågehistorik och frågeprofiler finns i Frågehistorik och Frågeprofil.
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion. Arbetsyteadministratörer kan aktivera den här funktionen från sidan Förhandsversioner . Se Hantera Förhandsversioner av Azure Databricks.
Alla instruktioner som rör strömmande tabeller visas i frågehistoriken. Du kan använda listrutan Statement för att välja valfritt kommando och granska relaterade frågor. Alla CREATE
-instruktioner följs av en REFRESH
-instruktion som körs asynkront på en DLT-pipeline. Instruktionerna REFRESH
innehåller vanligtvis detaljerade frågeplaner som ger insikter om hur du optimerar prestanda.
Använd följande steg för att komma åt REFRESH
instruktioner i användargränssnittet för frågehistorik:
- Klicka
i det vänstra sidofältet för att öppna användargränssnittet för frågehistorik .
- Markera kryssrutan REFRESH från Statement rullgardinsfiltret.
- Klicka på namnet på frågeuttrycket för att visa sammanfattningsinformation som frågans varaktighet och aggregerade mått.
- Klicka på Se frågeprofil för att öppna frågeprofilen. Mer information om hur du navigerar i frågeprofilen finns i Frågeprofil .
- Du kan också använda länkarna i avsnittet Frågekälla för att öppna den relaterade frågan eller pipelinen.
Du kan också komma åt frågeinformation med hjälp av länkar i SQL-redigeraren eller från en notebook-fil som är kopplad till ett SQL-lager.