Mata in data med SQL-metoder

Slutförd

SQL-kommandon ger en deklarativ metod för datainmatning i Azure Databricks. Om du redan är nöjd med SQL-syntaxen kan du med dessa metoder skapa och fylla i tabeller utan att skriva procedurkod. De tre primära SQL-inmatningsteknikerna –CREATE TABLE AS SELECT (CTAS) , CREATE OR REPLACE TABLEoch COPY INTO– hanterar olika inmatningsscenarier samtidigt som fullständig kompatibilitet med Unity Catalog bibehålls.

Skapa tabeller från frågor med CTAS

-instruktionen CREATE TABLE AS SELECT kombinerar tabellskapande och datapopulation till en enda åtgärd. Du definierar en ny tabell baserat på resultatet av en SELECT fråga, vilket gör den idealisk för att transformera data under inmatning.

Tänk dig ett scenario där du behöver mata in kunddata från en extern källa och tillämpa transformeringar. Med CTAS skriver du en fråga som läser från källan, tillämpar dina transformeringar och sparar resultatet i en ny hanterad tabell:

CREATE TABLE catalog.schema.customers AS
SELECT 
    customer_id,
    UPPER(customer_name) AS customer_name,
    email,
    created_date
FROM external_staging.raw_customers
WHERE customer_status = 'active';

Tabellschemat härleds automatiskt från frågeresultatet. Azure Databricks skapar tabellen med Delta-format som standard, vilket ger ACID-transaktioner, tidsresor och optimerad prestanda.

CTAS fungerar bra för inledande datainläsningar och engångsmigreringar. När du behöver läsa data från filer, kombinerar du CTAS med tabellvärdefunktionen read_files.

CREATE TABLE catalog.schema.sales_data AS
SELECT * FROM read_files(
    '/Volumes/catalog/schema/volume/sales/*.parquet',
    format => 'parquet'
);

Anmärkning

CTAS skapar en ny tabell varje gång den körs. Om tabellen redan finns misslyckas kommandot om du inte använder IF NOT EXISTS satsen , men den satsen hoppar över körningen helt i stället för att uppdatera tabellen.

Uppdatera tabeller med CREATE OR REPLACE TABLE

När du behöver uppdatera innehållet i en tabell fullständigt, tillhandahåller CREATE OR REPLACE TABLE en ren lösning. Det här kommandot skapar antingen en ny tabell eller helt ersätter en befintlig tabellhistorik, beviljad behörighet och eventuella radfilter eller kolumnmasker som du har konfigurerat.

Den här metoden visar sig vara värdefull för periodiska datauppdateringar där du vill ersätta alla befintliga data:

CREATE OR REPLACE TABLE catalog.schema.daily_metrics AS
SELECT 
    report_date,
    SUM(revenue) AS total_revenue,
    COUNT(DISTINCT customer_id) AS unique_customers
FROM catalog.schema.transactions
WHERE report_date >= CURRENT_DATE - INTERVAL 30 DAYS
GROUP BY report_date;

Till skillnad från att släppa och återskapa en tabell CREATE OR REPLACE behåller tabellens metadata och behörigheter. Underordnade användare och program fortsätter att komma åt tabellen utan omkonfiguration.

Du kan också använda det här kommandot för att läsa in data direkt från filer. Schemat härleds automatiskt från frågeresultatet:

CREATE OR REPLACE TABLE catalog.schema.products AS
SELECT * FROM read_files(
    '/Volumes/catalog/schema/volume/products.csv',
    format => 'csv',
    header => true
);

Viktigt!

CREATE OR REPLACE utför en fullständig tabellersättning. Använd COPY INTO istället för inkrementella uppdateringar där du bara vill lägga till nya poster.

Läs in filer stegvis med COPY INTO

COPY INTO hanterar en vanlig inmatningsutmaning: att läsa in filer från molnlagring på ett tillförlitligt och repeterbart sätt. Till skillnad från CTAS, som körs en gång och skapar en tabell, COPY INTO är utformad för pågående inmatningsarbetsflöden där nya filer tas emot regelbundet.

Kommandot läser filer från en angiven plats och lägger till dem i en befintlig Delta-tabell. Dess nyckelfunktion är idempotens – filer som redan har lästs in hoppas över automatiskt, även över flera exekveringar.

COPY INTO catalog.schema.events
FROM '/Volumes/catalog/schema/volume/events/'
FILEFORMAT = JSON
FORMAT_OPTIONS ('multiline' = 'true');

Innan du kör COPY INTOmåste måltabellen redan finnas. Skapa den med lämpligt schema:

CREATE TABLE IF NOT EXISTS catalog.schema.events (
    event_id STRING,
    event_type STRING,
    event_timestamp TIMESTAMP,
    payload STRING
);

Konfigurera val av filer

När källkatalogen PATTERN innehåller filer med olika namngivningsmönster eller om du behöver läsa in specifika filer använder du alternativen eller FILES :

-- Load only files matching a pattern
COPY INTO catalog.schema.orders
FROM '/Volumes/catalog/schema/volume/orders/'
FILEFORMAT = PARQUET
PATTERN = 'orders_2024*.parquet';

-- Load specific files by name
COPY INTO catalog.schema.orders
FROM '/Volumes/catalog/schema/volume/orders/'
FILEFORMAT = PARQUET
FILES = ('orders_001.parquet', 'orders_002.parquet');

Hantera schema- och datakvalitet

COPY INTO innehåller alternativ för att hantera schemaändringar och verifiera data innan de läses in:

COPY INTO catalog.schema.sensor_data
FROM '/Volumes/catalog/schema/volume/sensors/'
FILEFORMAT = CSV
FORMAT_OPTIONS (
    'header' = 'true',
    'inferSchema' = 'true'
)
COPY_OPTIONS ('mergeSchema' = 'true');

Med mergeSchema alternativet kan tabellschemat utvecklas när nya kolumner visas i källfiler. Om du vill verifiera data utan att läsa in dem lägger du till VALIDATE-satsen:

COPY INTO catalog.schema.sensor_data
FROM '/Volumes/catalog/schema/volume/sensors/'
FILEFORMAT = CSV
VALIDATE ALL;

Den här valideringen kontrollerar om data kan parsas, matchar tabellschemat och uppfyller nullbarhets- och kontrollbegränsningarna.

Välj rätt metod

Varje SQL-inmatningsmetod har olika syften i dina arbetsflöden för datateknik:

Metod Passar bäst för Beteende
CTAS Inledande datainläsningar, engångsmigreringar, skapande av tabeller från frågor Skapar en ny tabell. misslyckas om tabellen finns
SKAPA ELLER ERSÄTT Periodiska fullständiga uppdateringar som ersätter mellanlagringstabeller Ersätter hela tabellen. bevarar behörigheter
KOPIERA TILL Pågående filinmatning, inkrementella inläsningar Lägger till i befintlig tabell; hoppar över inlästa filer

För filbaserad inmatning som kräver automatisk schemainferens, filaviseringar eller exakt en-gångs-garantier bör du överväga att använda Auto Loader som en kompletterande metod. När dina inmatningsbehov är enkla och du föredrar deklarativ SQL framför procedurkod, ger dessa tre metoder en komplett verktygslåda för att hantera dataflödet till Unity Catalog.

Anmärkning

COPY INTO fungerar bra när du bearbetar filer i tusental över tid. För källor som kommer att växa till miljontals filer eller fler är Auto Loader (som beskrivs i nästa enhet) den rekommenderade metoden – den identifierar filer mer effektivt, stöder rikare schemautveckling och skalar utan omkostnader för kataloglistan. Databricks rekommenderar också strömmande tabeller som backas upp av Auto Loader som ett skalbart, långsiktigt alternativ för SQL-baserad filinmatning.