使用 Transact-SQL 將數據內嵌至您的倉儲

適用於: Microsoft Fabric 中的倉儲

Transact-SQL 語言提供選項,可讓您從 Lakehouse 中的現有數據表大規模將數據載入倉儲中的新數據表。 如果您需要使用匯總數據建立新版本的數據表、具有數據列子集的數據表版本,或建立數據表作為複雜查詢的結果,這些選項會很方便。 讓我們來探索一些範例。

使用 CREATE TABLE AS SELECT 建立具有查詢結果的新數據表(CTAS)

CREATE TABLE AS SELECT (CTAS) 語句可讓您從 語句的SELECT輸出,在倉儲中建立新的數據表。 它會以平行方式在新的數據表中執行擷取作業,讓數據轉換和在工作區中建立新數據表的效率很高。

注意

本文中的範例會使用 Bing COVID-19 範例數據集。 若要載入範例數據集,請遵循使用 COPY 語句將數據內嵌至倉儲中的步驟,將範例數據建立至倉儲。

第一個範例說明如何建立新的數據表,該數據表是現有 dbo.[bing_covid-19_data_2023] 數據表的複本,但只篩選為 2023 年的數據:

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

您也可以使用新的yearmonthdayofmonth 資料行建立新的資料表,其中包含從updated源數據表中的數據行取得的值。 如果您嘗試依年份將感染數據可視化,或查看觀察到最多 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];

另一個範例是,您可以建立新的數據表,以摘要說明每個月觀察到的案例數目,而不論年份為何,以評估季節性如何影響特定國家/地區的分佈情況。 它會使用在上一個範例中建立的數據表,並將新的 month 資料行當做來源:

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

根據這個新數據表,我們可以看到,在月份,美國 觀察了更多確診病例January,其次是 DecemberOctoberApril 是整體案例數目最低的月份:

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

Screenshot of the query results showing the number of infections by month in the United States, ordered by month, in descending order. The month number 1 is shown on top.

如需更多範例和語法參考,請參閱 CREATE TABLE AS SELECT(Transact-SQL)。

使用 T-SQL 查詢將數據內嵌至現有的數據表

上述範例會根據查詢的結果建立新的數據表。 若要復寫範例,但在現有的數據表上, INSERT...可以使用 SELECT 模式。 例如,下列程式代碼會將新資料內嵌至現有的數據表:

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

只要產生的查詢數據行類型與目的地數據表上的數據行對齊,語句的 SELECT 查詢準則就可以是任何有效的查詢。 如果指定資料列名稱,而且只包含目的地資料表中的資料行子集,則所有其他資料行都會載入為 NULL。 如需詳細資訊,請參閱 使用 INSERT INTO...SELECT 以最少記錄和平行處理原則大容量導入數據。

從不同倉儲和 Lakehouse 數據表擷取數據

針對 CREATE TABLE AS SELECTINSERT...SELECTSELECT語句也可以參考與目的地數據表儲存所在倉儲不同的倉儲數據表,方法是使用跨倉儲查詢。 這可以使用三部分命名慣例 [warehouse_or_lakehouse_name.][schema_name.]table_name來達成。 例如,假設您有下列工作區資產:

  • 以最新案例數據命名 cases_lakehouse 的 Lakehouse。
  • 名為 reference_warehouse 的倉儲,具有用於參考數據的數據表。
  • 名為的倉儲,其中 research_warehouse 會建立目的地數據表。

您可以建立新的資料表,使用三部分命名來結合這些工作區資產上資料表的數據:

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

若要深入瞭解跨倉儲查詢,請參閱 撰寫跨資料庫 SQL 查詢