다음을 통해 공유


데이터 가상화(미리 보기)

적용 대상:Microsoft Fabric의 SQL 데이터베이스

중요합니다

이 기능은 프리뷰 상태입니다.

패브릭의 SQL 데이터베이스에서 데이터 가상화를 사용하면 T-SQL을 사용하여 OneLake에 저장된 외부 데이터를 쿼리할 수 있습니다.

데이터 가상화 구문을 사용하면 OneLake에서 공통 데이터 형식으로 데이터를 저장하는 파일에서 T-SQL(Transact-SQL) 쿼리를 실행할 수 있습니다. 조인을 사용하여 이 데이터를 로컬로 저장된 관계형 데이터와 결합할 수 있습니다. 데이터 가상화를 사용하면 읽기 전용 모드에서 외부 데이터에 투명하게 액세스하면서 원래 형식과 위치에 유지할 수 있습니다.

문법

Fabric SQL Database는 다음과 같은 데이터 가상화 기능을 지원합니다.

Authentication

Fabric Lakehouses에 대한 인증은 Microsoft Entra ID 통과 인증을 사용합니다.

Fabric OneLake에서 파일에 액세스하려면 사용자의 ID에 Lakehouse 및 파일 위치 모두에 대한 권한이 있어야 합니다.

Permissions

사용자는 Microsoft Entra ID 패스스루를 통해 적용된 OneLake의 파일 또는 폴더에 읽기 권한이 있어야 합니다.

지원되는 파일 형식

  • Parquet
  • CSV
  • JSON 파일 형식은 쿼리가 모든 문서를 별도의 행으로 반환하는 CSV 파일 형식을 지정하여 간접적으로 지원됩니다. JSON_VALUEOPENJSON을 사용하여 행을 추가로 구문 분석할 수 있습니다.

지원되는 데이터 원본

패브릭 레이크하우스만 현재 기본적으로 지원됩니다. 그러나 OneLake 바로 가기를 사용하여 Azure Blob Storage, Azure Data Lake Gen2, Dataverse, Amazon S3, Amazon S3 Compatible, Google Cloud Storage, 공용 HTTPS 등과 같은 다양한 외부 원본으로 확장할 수 있습니다.

패브릭 바로 가기에 대한 자세한 내용은 OneLake 바로 가기를 사용하여 데이터 원본 통합을 참조하세요.

레이크하우스의 ABFSS 파일 위치를 찾는 방법

Fabric Lakehouse 데이터 소스를 생성하려면 작업 공간 ID, 테넌트, 그리고 lakehouse ID를 제공해야 합니다. 레이크하우스의 ABFSS 파일 위치를 찾으려면 다음을 수행합니다.

  1. 패브릭 포털로 이동합니다.
  2. 레이크하우스로 이동합니다.
  3. 원하는 폴더 위치로 이동합니다.
  4. 선택한 다음 ...속성을 선택하십시오.
  5. ABFS 경로를 복사하는데, 대략 이런 식으로 보입니다: abfss://<workspace ID>@<Tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/.

제한점

  • 예를 들어 dbo.Customer_CSVCSV 외부 테이블은 스키마로 한정된 이름을 사용하여 쿼리해야 합니다.
  • BULK INSERT 는 현재 .와 함께 OPENROWSET (BULK)사용할 때만 지원됩니다.

예시

다음 샘플 스크립트는 Cold_Lake라는 Fabric Lakehouse를 사용하여 Contoso의 저장소 및 고객 데이터를 parquet 및 csv 파일 형식으로 호스팅합니다.

Cold _ Lake라는 샘플 Lakehouse의 스크린샷.

A. OPENROWSET을 사용하여 Parquet 파일을 쿼리하기

다음 예제에서는 Parquet 파일에서 샘플 데이터를 검색하는 데 사용하는 OPENROWSET 방법을 보여 줍니다.

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 파일 쿼리

다음 예제에서는 CSV 파일에서 샘플 데이터를 검색하는 데 사용하는 OPENROWSET 방법을 보여 줍니다.

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;

기존 테이블은 OPENROWSET에서 INSERT INTO을 사용하여 채울 수 있습니다.

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()를 참조하세요.