Udostępnij za pośrednictwem


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

Dotyczy:✅ Magazyn w usłudze Microsoft Fabric

Język Transact-SQL oferuje opcje umożliwiające ładowanie danych na dużą skalę z istniejących tabel w usłudze 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.

Utwórz nową tabelę z wynikiem zapytania przy użyciu polecenia CREATE TABLE AS SELECT (CTAS)

Instrukcja CREATE TABLE AS SELECT (CTAS) umożliwia utworzenie nowej tabeli w magazynie na podstawie danych wyjściowych instrukcji SELECT . Uruchamia ona operację pozyskiwania w nowej tabeli równolegle, dzięki czemu jest wysoce wydajna w przypadku przekształcania danych i tworzenia nowych tabel w obszarze roboczym.

Uwaga

Przykłady w tym artykule korzystają z przykładowego zestawu danych Bing COVID-19. Aby załadować przykładowy zestaw danych, wykonaj kroki opisane w temacie Pozyskiwanie danych do magazynu przy użyciu instrukcji COPY w celu utworzenia przykładowych danych w magazynie.

W pierwszym przykładzie pokazano, jak utworzyć nową tabelę, która jest kopią istniejącej dbo.[bing_covid-19_data_2023] tabeli, ale filtrowana do danych tylko z roku 2023:

CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT * 
FROM [dbo].[bing_covid-19_data] 
WHERE DATEPART(YEAR,[updated]) = '2023';

Możesz również utworzyć nową tabelę z nowymi yearkolumnami , month, dayofmonth z wartościami uzyskanymi z updated kolumny w tabeli źródłowej. Może to być przydatne, jeśli próbujesz wizualizować dane infekcji według roku lub zobaczyć miesiące, w których zaobserwowano większość przypadków COVID-19:

CREATE TABLE [dbo].[bing_covid-19_data_with_year_month_day]
AS
SELECT DATEPART(YEAR,[updated]) [year], DATEPART(MONTH,[updated]) [month], DATEPART(DAY,[updated]) [dayofmonth], * 
FROM [dbo].[bing_covid-19_data];

W innym przykładzie możesz utworzyć nową tabelę, która podsumowuje liczbę przypadków zaobserwowanych w każdym miesiącu, niezależnie od roku, aby ocenić, jak sezonowość wpływa na rozkład w danym kraju/regionie. Używa ona tabeli utworzonej w poprzednim przykładzie z nową month kolumną jako źródłem:

CREATE TABLE [dbo].[infections_by_month]
AS
SELECT [country_region],[month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM [dbo].[bing_covid-19_data_with_year_month_day]
GROUP BY [country_region],[month];

Na podstawie tej nowej tabeli widać, że Stany Zjednoczone zaobserwowano więcej potwierdzonych przypadków we wszystkich latach w miesiącu January, a następnie December i October. April jest miesiącem o najniższej liczbie przypadków:

SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;

Zrzut ekranu przedstawiający wyniki zapytania przedstawiające liczbę zakażeń według miesięcy w Stany Zjednoczone uporządkowane według miesiąca w kolejności malejącej. Numer miesiąca 1 jest wyświetlany u góry.

Aby uzyskać więcej przykładów i dokumentacji składni, zobacz CREATE TABLE AS SELECT (Transact-SQL).

Pozyskiwanie danych do istniejących tabel za pomocą zapytań T-SQL

Poprzednie przykłady tworzą nowe tabele na podstawie wyniku zapytania. Aby zreplikować przykłady, ale w istniejących tabelach, WSTAW... Można użyć wzorca SELECT . Na przykład następujący kod pozyskuje nowe dane do istniejącej tabeli:

INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data] 
WHERE [updated] > '2023-02-28';

Kryteria zapytania dla SELECT instrukcji mogą być dowolnym prawidłowym zapytaniem, o ile wynikowe typy kolumn zapytania są zgodne z kolumnami w tabeli docelowej. Jeśli nazwy kolumn są określone i zawierają tylko podzbiór kolumn z tabeli docelowej, wszystkie pozostałe kolumny są ładowane jako NULL. Aby uzyskać więcej informacji, zobacz Using INSERT INTO... WYBIERZ, aby zbiorczo importować dane przy minimalnym rejestrowaniu i równoległości.

Pozyskiwanie danych z tabel w różnych magazynach i magazynach lakehouse

W przypadku obu opcji CREATE TABLE AS SELECT i INSERT... SELECT, SELECT instrukcja może również odwoływać się do tabel w magazynach, które różnią się od magazynu, w którym jest przechowywana tabela docelowa, przy użyciu zapytań między magazynami. Można to osiągnąć za pomocą trzyczęściowej konwencji [warehouse_or_lakehouse_name.][schema_name.]table_namenazewnictwa . Załóżmy na przykład, że masz następujące zasoby obszaru roboczego:

  • Lakehouse o nazwie z cases_lakehouse najnowszymi danymi przypadku.
  • Magazyn o nazwie z reference_warehouse tabelami używanymi na potrzeby danych referencyjnych.
  • Magazyn o nazwie research_warehouse , w którym jest tworzona tabela docelowa.

Można utworzyć nową tabelę, która używa trzyczęściowego nazewnictwa do łączenia danych z tabel w tych zasobach obszaru roboczego:

CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT 
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];

Aby dowiedzieć się więcej na temat zapytań między magazynami, zobacz Pisanie zapytania SQL obejmującego wiele baz danych.