Pozyskiwanie danych za pomocą metod SQL
Wskazówka
Aby uzyskać więcej szczegółów, zobacz kartę Tekst i obrazy .
Polecenia SQL zapewniają deklaratywne podejście do pozyskiwania danych w usłudze Azure Databricks. Jeśli masz już doświadczenie ze składnią SQL, te metody umożliwiają tworzenie i wypełnianie tabel bez konieczności pisania kodu proceduralnych. Trzy podstawowe techniki pobierania SQL—CREATE TABLE AS SELECT (CTAS), CREATE OR REPLACE TABLE i COPY INTO—każda z nich dotyczy innego scenariusza pobierania przy zachowaniu pełnej zgodności z Unity Catalog.
Tworzenie tabel na podstawie zapytań za pomocą usługi CTAS
Instrukcja CREATE TABLE AS SELECT łączy tworzenie tabel i populację danych w jedną operację. Możesz zdefiniować nową tabelę na podstawie wyników SELECT zapytania, co czyni ją idealną do przekształcania danych w trakcie pobierania.
Rozważmy scenariusz, w którym należy pozyskiwać dane klientów z zewnętrznego źródła i stosować przekształcenia. W przypadku funkcji CTAS piszesz zapytanie, które odczytuje ze źródła, stosuje przekształcenia i zapisuje wyniki w nowej tabeli zarządzanej:
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';
Schemat tabeli jest automatycznie uzyskiwany z wyników zapytania. Usługa Azure Databricks domyślnie tworzy tabelę przy użyciu formatu delta, który zapewnia transakcje ACID, podróże czasowe i zoptymalizowaną wydajność.
Funkcja CTAS dobrze sprawdza się w przypadku początkowych obciążeń danych i jednorazowych migracji. Gdy musisz odczytać dane z plików, połącz funkcję CTAS z funkcją read_files wartości tabeli:
CREATE TABLE catalog.schema.sales_data AS
SELECT * FROM read_files(
'/Volumes/catalog/schema/volume/sales/*.parquet',
format => 'parquet'
);
Uwaga / Notatka
Funkcja CTAS tworzy nową tabelę za każdym razem, gdy jest uruchamiana. Jeśli tabela już istnieje, polecenie zakończy się niepowodzeniem, chyba że zostanie użyta IF NOT EXISTS klauzula — lecz ta klauzula nie wykonuje się, zamiast tego pomija aktualizację tabeli.
Odświeżanie tabel za pomocą polecenia CREATE OR REPLACE TABLE
Jeśli musisz w pełni odświeżyć zawartość tabeli, CREATE OR REPLACE TABLE zapewnia czyste rozwiązanie. To polecenie tworzy nową tabelę lub całkowicie zastępuje istniejącą, zachowując historię tabel, przyznane uprawnienia i wszystkie skonfigurowane filtry wierszy lub maski kolumn.
Takie podejście jest przydatne w przypadku okresowych odświeżeń danych, w których chcesz zastąpić wszystkie istniejące dane:
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;
W przeciwieństwie do upuszczania i ponownego tworzenia tabeli, CREATE OR REPLACE zachowuje metadane i uprawnienia tabeli. Użytkownicy podrzędni i aplikacje nadal uzyskują dostęp do tabeli bez ponownej konfiguracji.
Za pomocą tego polecenia można również załadować dane bezpośrednio z plików. Schemat jest automatycznie wnioskowany z wyników zapytania:
CREATE OR REPLACE TABLE catalog.schema.products AS
SELECT * FROM read_files(
'/Volumes/catalog/schema/volume/products.csv',
format => 'csv',
header => true
);
Ważne
CREATE OR REPLACE Przeprowadza pełne zastąpienie tabeli. W przypadku aktualizacji przyrostowych, w których chcesz dodać tylko nowe rekordy, użyj COPY INTO zamiast tego.
Przyrostowe ładowanie plików za pomocą funkcji COPY INTO
COPY INTO rozwiązuje typowe wyzwanie dotyczące wczytywania: ładowanie plików z magazynu w chmurze w niezawodny, powtarzalny sposób. W przeciwieństwie do usługi CTAS, która jest uruchamiana raz i tworzy tabelę, COPY INTO jest przeznaczona do bieżących przepływów pracy pozyskiwania danych, w których nowe pliki są regularnie dostarczane.
Polecenie odczytuje pliki z określonej lokalizacji i dołącza je do istniejącej tabeli delty. Jego kluczową funkcją jest idempotencyjność — pliki, które zostały już załadowane, są automatycznie pomijane, nawet w wielu wykonaniach:
COPY INTO catalog.schema.events
FROM '/Volumes/catalog/schema/volume/events/'
FILEFORMAT = JSON
FORMAT_OPTIONS ('multiline' = 'true');
Przed uruchomieniem COPY INTO tabela docelowa musi już istnieć. Utwórz go przy użyciu odpowiedniego schematu:
CREATE TABLE IF NOT EXISTS catalog.schema.events (
event_id STRING,
event_type STRING,
event_timestamp TIMESTAMP,
payload STRING
);
Konfigurowanie wyboru pliku
Jeśli katalog źródłowy zawiera pliki z różnymi wzorcami nazewnictwa lub musisz załadować określone pliki, użyj PATTERN opcji lub 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');
Obsługa schematu i jakości danych
COPY INTO Udostępnia opcje obsługi zmian schematu i weryfikowania danych przed załadowaniem:
COPY INTO catalog.schema.sensor_data
FROM '/Volumes/catalog/schema/volume/sensors/'
FILEFORMAT = CSV
FORMAT_OPTIONS (
'header' = 'true',
'inferSchema' = 'true'
)
COPY_OPTIONS ('mergeSchema' = 'true');
Opcja mergeSchema umożliwia rozwijanie schematu tabeli w miarę pojawiania się nowych kolumn w plikach źródłowych. Aby zweryfikować dane bez ich ładowania, dodaj klauzulę VALIDATE:
COPY INTO catalog.schema.sensor_data
FROM '/Volumes/catalog/schema/volume/sensors/'
FILEFORMAT = CSV
VALIDATE ALL;
Ta walidacja sprawdza, czy dane mogą być analizowane, pasują do schematu tabeli i spełniają wymagania dotyczące wartości null oraz ograniczeń kontrolnych.
Wybieranie właściwej metody
Każda metoda pozyskiwania SQL służy do odrębnych celów w przepływach pracy inżynierii danych:
| Metoda | Najlepsze dla | Zachowanie |
|---|---|---|
| CTAS | Początkowe ładowanie danych, jednorazowe migracje, tworzenie tabel na podstawie zapytań | Tworzy nową tabelę; niepowodzi się, jeśli tabela istnieje |
| TWORZENIE LUB ZASTĘPOWANIE | Okresowe pełne odświeżanie, zastępując tabele przejściowe | Zamienia całą tabelę; zachowuje uprawnienia |
| KOPIUJ DO | Ciągłe pozyskiwanie plików, przyrostowe obciążenia | Dołącza do istniejącej tabeli; pomija załadowane pliki |
W przypadku pozyskiwania opartego na plikach, które wymaga automatycznego wnioskowania schematu, powiadomień o plikach lub dokładnie jednokrotnych gwarancji, rozważ użycie automatycznego modułu ładującego jako uzupełniające podejście. Gdy potrzeby pozyskiwania danych są proste i wolisz deklaratywne SQL od kodu proceduralnego, te trzy metody zapewniają kompletny zestaw narzędzi do zarządzania przepływem danych do Unity Catalog.
Uwaga / Notatka
COPY INTO działa dobrze podczas pozyskiwania plików w ilości dochodzącej do tysięcy w skali czasu. W przypadku źródeł, które będą rosnąć do milionów plików lub więcej, automatyczne ładowanie (omówione w następnej lekcji) jest zalecanym podejściem — odnajduje pliki wydajniej, obsługuje bardziej zaawansowaną ewolucję schematu i skaluje bez konieczności wprowadzania listy katalogów. Databricks również zaleca tabele strumieniowe wsparte przez Auto Loader jako skalowalną, długoterminową alternatywę dla pozyskiwania plików opartych na języku SQL.