Pozyskiwanie danych do magazynu przy użyciu języka Transact-SQL

Dotyczy:✅ Magazyn danych w usłudze Microsoft Fabric

Język Transact-SQL oferuje opcje, które pozwalają ładować dane na dużą skalę z istniejących tabel w Lakehouse i magazynie do nowych tabel w magazynie. Te opcje są wygodne, jeśli musisz utworzyć nowe wersje tabeli z zagregowanymi danymi, wersjami tabel z podzbiorem wierszy lub utworzyć tabelę w wyniku złożonego zapytania. Przyjrzyjmy się kilku przykładom.

Wybierz instrukcję pozyskiwania T-SQL

Język T-SQL oferuje bogaty zestaw instrukcji, które możesz wykorzystać do pobierania i transformacji danych w swoim magazynie. Możesz ładować dane do nowych lub istniejących tabel, dodawać nowe wiersze, przekształcać dane podczas importu danych lub synchronizować zmiany z istniejącymi danymi. Magazyn w Microsoft Fabric obsługuje następujące instrukcje ładowania danych T-SQL:

  • CREATE TABLE AS SELECT (CTAS) polecenie, które umożliwia utworzenie nowej tabeli w magazynie na podstawie danych wyjściowych polecenia SELECT.
  • SELECT INTO klauzula query, która umożliwia wybranie wyników z dowolnego źródła tabeli i przekierowanie wyników do nowej tabeli. Jest to standardowa funkcja w języku T-SQL.
  • INSERT ... SELECT dodaje wyniki zapytań do tabeli docelowej. Użyj tej instrukcji, gdy chcesz załadować nową partię lub podzbiór inkrementalny do tabeli, której schemat kontrolujesz.
  • MERGE porównuje wiersze źródłowe i docelowe oraz warunkowo wstawia, aktualizuje lub usuwa wiersze docelowe. Użyj tej instrukcji, gdy musisz zsynchronizować nowe i zmienione wiersze lub pogodzić miejsce docelowe z kompletną migawką źródła.

Wybierz instrukcję na podstawie tego, czy tabela docelowa już istnieje i czy chcesz utworzyć, dołączyć lub zsynchronizować dane. Źródłem każdej instrukcji jest zapytanie T-SQL. Możesz używać obsługiwanych wyrażeń, funkcji, filtrów, łączenia i agregacji do kształtowania danych podczas ingestii danych. Możesz użyć następujących źródeł danych, aby odczytać dane w swoich instrukcjach T-SQL:

  • Odczytywanie tabeli magazynu, na przykład tabeli przejściowej.
  • Odczytywanie folderu Delta Lake Lakehouse przy użyciu autogenerowanej tabeli w endpointzie analityki SQL dla Lakehouse.
  • Odczytywanie plików CSV, Parquet lub JSONL bezpośrednio z usługi Azure Data Lake lub Azure Blob Storage przy użyciu funkcji OPENROWSET.

Użyj CTAS do stworzenia tabeli

CTAS tworzy tabelę docelową i ładuje wyniki zapytań w jednej operacji. W pierwszym przykładzie pokazano, jak utworzyć nową tabelę, która jest kopią istniejącej dbo.TaxiTrips tabeli, ale filtrowana tak, aby zawierała tylko dane z roku 2023:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Użyj CTAS, aby utworzyć i zapolnić nową tabelę na podstawie wyników zapytań. Ta metoda jest przydatna, gdy tabela docelowa nie istnieje lub gdy chcesz zmaterializować przekształcone lub połączone dane z jednego lub więcej źródeł.

Użyj SELECT INTO do utworzenia tabeli

SELECT ... INTO tworzy także tabelę docelową z wyników zapytań:

SELECT * 
INTO dbo.TaxiTrips_2023
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Zarówno CTAS, jak i SELECT ... INTO wywnioskują kolumny docelowe na podstawie wyniku zapytania. Jawnie rzutuj wyrażenia, gdy typ docelowy wymaga określonego typu danych, precyzji lub długości.

Użyj INSERT ... SELECT, aby dodać dane

INSERT ... SELECT Ładuje wyniki zapytania do istniejącej tabeli. Możesz dopisywać dane do tabeli, przekształcając dane z zewnętrznego, publicznie dostępnego pliku Parquet:

INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;

Użyj MERGE do synchronizacji danych

MERGE dopasowuje wiersze źródłowe i docelowe za pomocą stabilnego klucza. Poniższy wzorzec zakłada, że istnieje już dbo.DimCustomer z kolumnami używanymi przez tę instrukcję. Upewnij się, że źródło zwraca nie więcej niż jeden wiersz dla każdego klucza docelowego.

MERGE dbo.DimCustomer AS target
USING staging.Customers AS source
ON target.CustomerID = source.CustomerID
WHEN MATCHED AND source.ModifiedDate > target.ModifiedDate THEN
    UPDATE SET CustomerName = source.CustomerName, City = source.City,
        ModifiedDate = source.ModifiedDate
WHEN NOT MATCHED BY TARGET THEN
    INSERT (CustomerID, CustomerName, City, ModifiedDate)
    VALUES (source.CustomerID, source.CustomerName, source.City, source.ModifiedDate);

Używaj WHEN NOT MATCHED BY SOURCE THEN DELETE tylko wtedy, gdy zapytanie źródłowe reprezentuje pełny autorytatywny zbiór danych dla wierszy w zakresie. Nie używaj tej klauzuli z inkrementalnym wsadem źródłowym, ponieważ wiersze docelowe nieobecne w partii mogą zostać usunięte.

Wybierz źródło danych

Instrukcje ingestii działają spójnie we wszystkich obsługiwanych typach źródeł. Zmienia się tylko odniesienie źródłowe.

Pliki w jeziorze danych

Używaj OPENROWSET do odczytu plików Parquet, CSV lub JSONL w OneLake, Azure Data Lake Storage lub Azure Blob Storage. Możesz wskazać jeden plik, wiele plików za pomocą znaków wieloznacznych lub foldery partycjonowane.

Aby poznać ścieżki plików, wnioskowanie schematów, filtrowanie partycji, funkcje metadanych oraz przykłady wszystkich czterech instrukcji ingestion, zobacz Ingest and transform lake data with OPENROWSET and T-SQL.

Tabele Delta w architekturze lakehouse

Endpoint analityki SQL w lakehouse udostępnia tabele Delty w swoim /Tables obszarze. Z magazynu w tym samym obszarze roboczym odwołaj się do tabeli, używając trzyczęściowej nazwy <lakehouse>.<schema>.<table>. Nie ogranicza się to tylko do tabel Delta przechowywanych fizycznie w lakehouse. Tabele dostępne za pomocą skrótów OneLake w /Tables tym obszarze mogą również odwoływać się do danych przechowywanych gdzie indziej, w tym w obszarze lakehouse /Files, zewnętrznych pamięci masowych takich jak ADLS czy Amazon S3, danych lustrzanych oraz danych OneLake w innych przestrzeniach roboczych. Dzięki tej architekturze możesz wysyłać zapytania do danych opartych na skrótach za pośrednictwem punktu końcowego analityki SQL usługi Lakehouse bez kopiowania danych do usługi Lakehouse.

W przypadku tworzenia tabel, ładowania przyrostowego i przykładów synchronizacji zobacz Pozyskiwanie tabel Delta Lake za pomocą języka T-SQL.

Tabele w bieżącej hurtowni

Użyj nazwy dwuczęściowej, na przykład <schema>.<table>, do pobierania danych z tabeli w bieżącej hurtowni.

Zobacz Pozyskiwanie danych z tabel magazynu i dublowanych baz danych za pomocą języka T-SQL, aby zapoznać się z przykładami Bronze-to-Silver-to-Gold, które łączą, agregują i inkrementalnie ładują tabele w jednym magazynie.

Lustrzane bazy danych i inne elementy przestrzeni roboczej

Aby pobrać dane z lustrzanej bazy danych, innej hurtowni danych lub innego obsługiwanego elementu w tym samym obszarze roboczym, należy dodać element do Eksploratora i użyć nazwy trzyczęściowej <item>.<schema>.<table>. Aby dowiedzieć się więcej na temat zapytań między hurtowniami danych, zobacz Jak napisać zapytanie SQL obejmujące wiele baz danych. Przykłady używania obu wzorców nazewnictwa można znaleźć w artykule Pozyskiwanie danych z tabel magazynu danych i dublowanych baz danych przy użyciu języka T-SQL.

Inspekcja i monitorowanie ingestowania kodu T-SQL

CTAS, SELECT ... INTO, INSERT ... SELECT, oraz operacje MERGE pojawiają się w historii/aktywności zapytań magazynu. Korzystaj z analiz zapytań, aby przejrzeć szczegóły wykonania i rozwiązywać problemy z zapytaniami pozyskiwania danych.

Opcje pozyskiwania danych

Używaj pozyskiwania danych za pomocą języka T-SQL, gdy ładowanie danych obejmuje filtrowanie, konwersję typów, połączenia, obliczenia, agregację lub synchronizację. Wybierz inną opcję, jeśli: Inne sposoby pozyskiwania danych do twojego magazynu obejmują: