Synapse SQL의 CETAS

전용 SQL 풀 또는 서버리스 SQL 풀에서 CETAS(CREATE EXTERNAL TABLE AS SELECT)를 사용하여 다음 작업을 완료할 수 있습니다.

  • 외부 테이블 만들기

  • Transact-SQL SELECT 문의 결과를 다음 위치에 병렬로 내보내기:

    • Hadoop
    • Azure Storage Blob
    • Azure Data Lake Storage Gen2

전용 SQL 풀의 CETAS

전용 SQL 풀, CETAS 사용 및 구문에 대해서는 CREATE EXTERNAL TABLE AS SELECT 문서를 확인하세요. 또한 전용 SQL 풀을 사용하는 CTAS에 대한 지침은 CREATE TABLE AS SELECT 문서를 참조하세요.

서버리스 SQL 풀의 CETAS

서버리스 SQL 풀을 사용하는 경우 CETAS는 외부 테이블을 만들고 쿼리 결과를 Azure Storage Blob 또는 Azure Data Lake Storage Gen2로 내보내는 데 사용됩니다.

전체 구문은 CREATE EXTERNAL TABLE AS SELECT(Transact-SQL)를 참조하세요.

예제

다음 예제에서는 CETAS를 사용하여 연도 및 상태별로 집계한 총 인구 수를 population_ds 데이터 원본에 있는 aggregated_data 폴더에 저장합니다.

이 샘플은 이전에 만든 자격 증명, 데이터 원본 및 외부 파일 형식을 사용합니다. 외부 테이블 문서를 참조하세요. 같은 데이터 원본의 다른 폴더에 쿼리 결과를 저장하려면 LOCATION 인수를 변경하면 됩니다.

다른 스토리지 계정에 결과를 저장하려면 DATA_SOURCE 인수에 대한 다른 데이터 원본을 만들어서 사용하면 됩니다.

참고 항목

다음 샘플에서는 퍼블릭 Azure Open Data 스토리지 계정을 사용합니다. 읽기 전용입니다. 이러한 쿼리를 실행하려면 쓰기 권한이 있는 데이터 원본을 제공해야 합니다.

-- use CETAS to export select statement with OPENROWSET result to  storage
CREATE EXTERNAL TABLE population_by_year_state
WITH (
    LOCATION = 'aggregated_data/',
    DATA_SOURCE = population_ds,  
    FILE_FORMAT = census_file_format
)  
AS
SELECT decennialTime, stateName, SUM(population) AS population
FROM
    OPENROWSET(BULK 'https://azureopendatastorage.dfs.core.windows.net/censusdatacontainer/release/us_population_county/year=*/*.parquet',
    FORMAT='PARQUET') AS [r]
GROUP BY decennialTime, stateName
GO

-- you can query the newly created external table
SELECT * FROM population_by_year_state

다음 샘플에서는 외부 테이블을 CETAS의 원본으로 사용합니다. 이 샘플은 이전에 만든 자격 증명, 데이터 원본, 외부 파일 형식 및 외부 테이블 형식을 사용합니다. 외부 테이블 문서를 참조하세요.

-- use CETAS with select from external table
CREATE EXTERNAL TABLE population_by_year_state
WITH (
    LOCATION = 'aggregated_data/',
    DATA_SOURCE = population_ds,  
    FILE_FORMAT = census_file_format
)  
AS
SELECT decennialTime, stateName, SUM(population) AS population
FROM census_external_table
GROUP BY decennialTime, stateName
GO

-- you can query the newly created external table
SELECT * FROM population_by_year_state

일반 예제

이 예제에서는 뷰를 원본으로 사용하고 관리 ID를 인증으로 사용하는 CETAS를 작성하는 템플릿 코드의 예제를 볼 수 있습니다.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'Managed Identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
    LOCATION = 'https://<mystoageaccount>.dfs.core.windows.net/<mycontainer>/<mybaseoutputfolderpath>',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SynapseSQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

지원되는 데이터 형식

CETAS를 사용하여 다음 SQL 데이터 형식으로 결과 세트를 저장할 수 있습니다.

  • binary
  • varbinary
  • char
  • varchar
  • nchar
  • nvarchar
  • smalldate
  • date
  • datetime
  • datetime2
  • datetimeoffset
  • 시간
  • decimal
  • numeric
  • float
  • real
  • bigint
  • tinyint
  • smallint
  • int
  • bigint
  • bit
  • money
  • smallmoney
  • uniqueidentifier

참고 항목

1MB보다 큰 LOB는 CETAS와 함께 사용할 수 없습니다.

다음 단계

Apache Spark for Azure Synapse 외부 테이블을 쿼리해 보세요.