Megosztás a következőn keresztül:


Adatok betöltése a raktárba a Transact-SQL használatával

A következőre vonatkozik: Warehouse a Microsoft Fabricben

A Transact-SQL nyelv lehetővé teszi az adatok nagy léptékű betöltését a tóházban és a raktárban lévő meglévő táblákból a raktár új tábláiba. Ezek a beállítások akkor kényelmesek, ha egy tábla új verzióit kell létrehoznia összesített adatokkal, a sorok egy részhalmazával rendelkező táblák verzióit, vagy összetett lekérdezés eredményeként létre kell hoznia egy táblát. Lássunk néhány példát.

Új tábla létrehozása lekérdezés eredményével a CREATE TABLE AS SELECT (CTAS) használatával

A CREATE TABLE AS SELECT (CTAS) utasítással új táblát hozhat létre a raktárban egy SELECT utasítás kimenetéből. A betöltési műveletet párhuzamosan futtatja az új táblába, így rendkívül hatékony adatátalakítást és új táblák létrehozását teszi lehetővé a munkaterületen.

Feljegyzés

A cikkben szereplő példák a Bing COVID-19 mintaadatkészletet használják. A mintaadatkészlet betöltéséhez kövesse az adatok raktárba való betöltésének lépéseit a COPY utasítással a mintaadatok raktárba való létrehozásához.

Az első példa bemutatja, hogyan hozhat létre egy új táblát, amely a meglévő dbo.[bing_covid-19_data_2023] tábla másolata, de csak a 2023-ból származó adatokra szűrve:

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

Új táblát is létrehozhat új year, oszlopokkaldayofmonth, a forrástábla oszlopából updated monthkapott értékekkel. Ez akkor lehet hasznos, ha a fertőzési adatokat év szerint szeretné megjeleníteni, vagy ha hónapokat szeretne látni, amikor a legtöbb COVID-19-es esetet figyeli meg:

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];

Egy másik példaként létrehozhat egy új táblázatot, amely összegzi az egyes hónapokban megfigyelt esetek számát az évtől függetlenül annak kiértékeléséhez, hogy a szezonalitás hogyan befolyásolja egy adott országban/régióban a szórást. Az előző példában létrehozott táblát használja az új month oszlop forrásként:

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];

Az új táblázat alapján láthatjuk, hogy a Egyesült Államok a hónap Januaryminden évében több megerősített esetet figyelt meg, majd December azt követően.October April az a hónap, amelyen a legalacsonyabb az esetek száma:

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

Képernyőkép a lekérdezés eredményeiről, amelyek a fertőzések számát jelenítik meg hónap szerint a Egyesült Államok, hónap szerint rendezve, csökkenő sorrendben. A tetején az 1. havi szám látható.

További példákért és szintaxishivatkozásért lásd: CREATE TABLE AS SELECT (Transact-SQL).

Adatok betöltése meglévő táblákba T-SQL-lekérdezésekkel

Az előző példák új táblákat hoznak létre egy lekérdezés eredménye alapján. A példák replikálásához, de a meglévő táblákon az INSERT... A SELECT minta használható. Az alábbi kód például egy meglévő táblába betölti az új adatokat:

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

Az utasítás lekérdezési SELECT feltételei bármely érvényes lekérdezés lehetnek, amennyiben az eredményként kapott lekérdezési oszloptípusok a céltábla oszlopaihoz igazodnak. Ha az oszlopnevek meg vannak adva, és csak a céltábla oszlopainak egy részhalmazát tartalmazzák, az összes többi oszlop betöltődik NULL. További információ: Az INSERT INTO használata... SELECT to Bulk Import data with minimal logging and parallelism.

Adatok betöltése különböző raktárakban és tóházakban lévő táblákból

A TÁBLA LÉTREHOZÁSA KIJELÖLÉSKÉNT és BESZÚRÁSKÉNT is... SELECT, az utasítás hivatkozhat SELECT olyan raktárak tábláira is, amelyek eltérnek attól a raktártól, ahol a céltáblát tárolják, raktárközi lekérdezések használatával. Ez a háromrészes elnevezési konvencióval [warehouse_or_lakehouse_name.][schema_name.]table_nameérhető el. Tegyük fel például, hogy a következő munkaterületi eszközök vannak:

  • Egy tóház, amely a legújabb esetadatokkal van elnevezve cases_lakehouse .
  • A referenciaadatokhoz használt táblákkal elnevezett reference_warehouse raktár.
  • A céltábla létrehozásának helyeként szolgáló research_warehouse raktár.

Létrehozhat egy új táblát, amely háromrészes elnevezéssel egyesíti az ezen munkaterület-objektumok tábláiból származó adatokat:

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];

Ha többet szeretne megtudni a raktárak közötti lekérdezésekről, olvassa el az Adatbázisközi SQL-lekérdezés írása című témakört.