Dela via


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:

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

  1. I sidofältet på arbetsytan klickar du på Frågor och sedan på Skapa fråga.

  2. I frågeredigeraren väljer du ett SQL-lager som använder kanalen Current från listrutan.

  3. 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 i read_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:

  1. Uppdatera poster eller ta bort poster från strömningstabellen.
  2. Kör en REORG-instruktion mot strömningstabellen och ange parametern APPLY (PURGE). Till exempel REORG TABLE <streaming-table-name> APPLY (PURGE);.
  3. 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.
  4. REFRESH strömningstabellen. Se Uppdatera en streamingtabel med hjälp av en DLT-pipeline. Inom 24 timmar efter den REFRESH åtgärden körs DLT-underhållsaktiviteter, inklusive den VACUUM å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:

  1. Klicka Historikikon i det vänstra sidofältet för att öppna användargränssnittet för frågehistorik .
  2. Markera kryssrutan REFRESH från Statement rullgardinsfiltret.
  3. Klicka på namnet på frågeuttrycket för att visa sammanfattningsinformation som frågans varaktighet och aggregerade mått.
  4. Klicka på Se frågeprofil för att öppna frågeprofilen. Mer information om hur du navigerar i frågeprofilen finns i Frågeprofil .
  5. 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.

Ytterligare resurser