Synapse SQL での CETAS

専用 SQL プールまたはサーバーレス SQL プールで CREATE EXTERNAL TABLE AS SELECT (CETAS) を使用して、次のタスクを実行できます。

  • 外部テーブルを作成する

  • 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 引数に別のデータ ソースを作成して使用します。

Note

次のサンプルでは、パブリックの Azure オープン データ ストレージ アカウントを使用します。 これは読み取り専用です。 これらのクエリを実行するには、書き込みアクセス許可があるデータ ソースを指定する必要があります。

-- 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

一般的な例

この例では、ビューをソースとして使用して CETAS を記述し、マネージド ID を認証として使用するためのテンプレート コードの例を確認できます。

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
  • time
  • decimal
  • numeric
  • float
  • real
  • bigint
  • tinyint
  • smallint
  • INT
  • bigint
  • bit
  • money
  • smallmoney
  • UNIQUEIDENTIFIER

Note

1 MB を超える LOB を CETAS と共に使用することはできません。

次のステップ

Apache Spark for Azure Synapse 外部テーブルのクエリを試してみます。