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
month
kapott é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 January
minden é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;
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.