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 year
kolumnami , 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;
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_name
nazewnictwa . 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.