使用 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';
您也可以使用新的 year
、month
、dayofmonth
資料行建立新的資料表,其中包含從來源資料表中的 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
月份,美國觀測到更多確診病例,其次是 December
和 October
。 April
是整體案例數目最低的月份:
SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;
如需更多範例和語法參考,請參閱 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 SELECT 和 INSERT...SELECT,SELECT
陳述式也可以參考與目的地資料表儲存所在倉儲不同的倉儲資料表,方法是使用跨倉儲查詢。 這可以使用三部分命名慣例 [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 查詢。