適用於:✅Microsoft Fabric 中的 SQL 資料庫
這很重要
這項功能目前處於預覽階段。
Fabric 中的 SQL 資料庫中的資料虛擬化,使得使用 T-SQL 查詢儲存在 OneLake 中的外部資料。
透過資料虛擬化語法,你可以對 OneLake 中以常見資料格式儲存資料的檔案執行 Transact-SQL(T-SQL)查詢。 您可以使用聯結,將此資料與本端儲存的關聯式資料結合。 透過資料虛擬化,您可以以唯讀模式透明地存取外部資料,同時將其保留為原始格式和位置。
語法
Fabric SQL 資料庫支援以下資料虛擬化功能:
- CREATE DATABASE SCOPED CREDENTIAL(建立資料庫範圍的憑證)
- 建立外部資料來源
- CREATE EXTERNAL FILE FORMAT(建立外部檔案格式)
- 建立外部資料表
- OPENROWSET(BULK)
- 選擇進入...... 來自 OPENROWSET
- 元資料函式: filename()、 filepath()、 sp_describe_first_result_set()
Authentication
Fabric Lakehouses 的認證使用 Microsoft Entra ID 直通驗證。
從 Fabric OneLake 存取檔案需要使用者的身份,必須同時擁有 Lakehouse 和檔案位置的權限。
權限
使用者必須在 OneLake 中擁有檔案或資料夾的 READ 權限,並透過 Microsoft Entra ID 直通強制執行。
支援的檔案類型
- Parquet
- CSV
- JSON 檔案格式透過指定 CSV 檔案格式間接支援,查詢時會將每份文件作為獨立列回傳。 你可以用 JSON_VALUE 和 OPENJSON 進一步解析列。
支持的數據源
目前僅有 Fabric Lakehouse 原生支援。 不過,OneLake 捷徑可以用來擴展到各種外部來源,例如 Azure Blob Storage、Azure Data Lake Gen2、Dataverse、Amazon S3、Amazon S3 相容性、Google Cloud Storage、公開 HTTPS 等等。
欲了解更多關於 Fabric 捷徑的資訊,請參閱 Unify 資料來源搭配 OneLake 捷徑。
如何找到湖邊別墅的ABFSS檔案位置
要建立 Fabric Lakehouse 資料來源,你需要提供工作區 ID、租戶和 Lakehouse ID。 要查找湖屋的ABFSS檔案位置:
- 前往 Fabric 入口網站。
- 導航到你的湖畔別墅。
- 請導覽到想要的資料夾位置。
- 選擇
...後 再選屬性。 - 複製 ABFS 路徑,大致如下:
abfss://<workspace ID>@<Tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/。
局限性
- CSV 外部資料表必須使用結構限定名稱查詢,例如
dbo.Customer_CSV。 -
BULK INSERT目前僅在與OPENROWSET (BULK)結合使用時才支援。
範例
以下範例腳本使用一個名為 Cold_Lake 的 Fabric Lakehouse,該 Lakehouse 以 parquet 和 csv 檔案保存 Contoso 的商店與客戶資料。
A。 使用 OPENROWSET 查詢 parquet 檔案
以下範例示範如何使用 OPENROWSET 從 Parquet 檔案擷取樣本資料。
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/customer.parquet',
FORMAT = 'parquet'
) AS customer_dataset;
B. 查詢使用 OPENROWSET 的 CSV 檔案
以下範例展示了如何使用 該 OPENROWSET 從 CSV 檔案中擷取範例資料。
SELECT *
FROM OPENROWSET(
BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/customer.csv',
FORMAT = 'CSV',
FIRST_ROW = 2
) WITH (
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
Country_Region_Full NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6)
) AS customer_dataset;
C. 建立外部資料來源
以下範例展示了如何建立外部資料來源,以簡化外部資料表與指令,例如 OPENROWSET:
CREATE EXTERNAL DATA SOURCE [Cold_Lake]
WITH (
LOCATION = 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/');
建立外部資料來源後,你可以簡化 OPENROWSET,例如:
-- USING DATA SOURCE WITH OPENROWSET
SELECT TOP 100 * FROM OPENROWSET
(BULK '/customer.parquet'
, FORMAT = 'parquet'
, DATA_SOURCE = 'Cold_Lake' )
AS Customer_dataset;
-- USING DATA SOURCE WITH OPENROWSET
SELECT TOP 100 *
FROM OPENROWSET(
BULK '/customer.csv',
FORMAT = 'CSV',
DATA_SOURCE = 'Cold_Lake',
FIRST_ROW = 2
) WITH (
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
Country_Region_Full NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6)
) AS customer_dataset;
D. 創建外部表格以使用 Parquet 格式
以下範例示範如何建立外部檔案格式,然後建立專門用於parquet資料的外部表格。
CREATE EXTERNAL FILE FORMAT Parquetff WITH (FORMAT_TYPE=PARQUET);
CREATE EXTERNAL TABLE [ext_product](
[ProductKey] [int] NULL,
[ProductCode] [nvarchar](255) NULL,
[ProductName] [nvarchar](500) NULL,
[Manufacturer] [nvarchar](50) NULL,
[Brand] [nvarchar](50) NULL,
[Color] [nvarchar](20) NULL,
[WeightUnit] [nvarchar](20) NULL,
[Weight] DECIMAL(20, 5) NULL,
[Cost] DECIMAL(20, 5) NULL,
[Price] DECIMAL(20, 5) NULL,
[CategoryKey] [int] NULL,
[CategoryName] [nvarchar](30) NULL,
[SubCategoryKey] [int] NULL,
[SubCategoryName] [nvarchar](50) NULL)
WITH
(LOCATION = '/product.parquet'
,DATA_SOURCE = [Cold_Lake]
,FILE_FORMAT = Parquetff);
SELECT * FROM [dbo].[ext_product]
E. 建立 CSV 的外部表格
以下範例示範如何設定外部檔案格式並建立專門用於 CSV 資料的外部資料表。
CREATE EXTERNAL FILE FORMAT [CSVFileFormat]
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = ',',
FIRST_ROW = 2
)
);
CREATE EXTERNAL TABLE ext_customer_csv (
CustomerKey INT NOT NULL,
GeoAreaKey INT NOT NULL,
StartDT DATETIME2 NOT NULL,
EndDT DATETIME2 NOT NULL,
Continent VARCHAR(50) NOT NULL,
Gender VARCHAR(10) NOT NULL,
Title VARCHAR(10) NOT NULL,
GivenName VARCHAR(100) NOT NULL,
MiddleInitial VARCHAR(2) NOT NULL,
Surname VARCHAR(100) NOT NULL,
StreetAddress VARCHAR(200) NOT NULL,
City VARCHAR(100) NOT NULL,
State VARCHAR(100) NOT NULL,
StateFull VARCHAR(100) NOT NULL,
ZipCode VARCHAR(20) NOT NULL,
Country_Region CHAR(2) NOT NULL
)
WITH (
LOCATION = '/customer.csv'
, DATA_SOURCE = Cold_Lake
, FILE_FORMAT = CSVFileFormat
);
SELECT * FROM [dbo].[ext_customer_csv];
F. 使用 OPENROWSET 擷取資料
以下範例展示了如何 OPENROWSET 將資料匯入新資料表:
SELECT *
INTO tb_store
FROM OPENROWSET
(BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
對於現有的表格,可以使用INSERT INTO從OPENROWSET填入資料。
INSERT INTO tb_store
SELECT TOP 100 * FROM OPENROWSET
(BULK ' abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
G. 使用元資料函式 - sp_describe_first_result_set
此函式 sp_describe_first_result_set 可與此結合 OPENROWSET (BULK) 使用,以估算外部檔案結構。 你可以辨識 CREATE TABLE 或 CREATE EXTERNAL TABLE 語句的模式,並用於進一步進行資料探索。
該 sp_describe_first_result_set 函數利用資料樣本來估算結構。 如果樣本不具代表性,可能會產生不準確的結果。 如果結構已經已知,則透過 WITH 子句來指定。
EXEC sp_describe_first_result_set N'
SELECT * FROM OPENROWSET(
BULK ''abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/store.parquet'',
FORMAT = ''parquet''
) AS DATA';
欲了解更多資訊,請參見 sp_describe_first_result_set()。
H. 使用元資料函式 - filename() 和 filepath()
Fabric SQL 資料庫同時提供filename()filepath()函數,用於資料夾與檔案探索以及動態查詢創建,這些功能也可以配合 OPENROWSET 使用,以便在跨多個子資料夾的資料檔案中建立虛擬欄位。
以下範例列出所有parquet檔案及其位置。
SELECT
r.filename() as file_name
, r.filepath() as full_path
FROM OPENROWSET
(BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/*/*.parquet',
FORMAT = 'parquet'
) AS r
GROUP BY r.filename(), r.filepath()
ORDER BY file_name;
欲了解更多資訊,請參閱 filename() 與 filepath()。