共用方式為


使用 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;

查詢結果的螢幕擷取畫面,其中顯示依月份排序的美國感染數目,依月份遞減順序排序。月份數位 1 會顯示在頂端。

如需更多範例和語法參考,請參閱 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 查詢