Azure Synapse Analytics の専用 SQL プールに Azure Data Lake Storage からデータを読み込む

このガイドでは、COPY ステートメントを使用して Azure Data Lake Storage からデータを読み込む方法について説明します。 すべての認証方法で COPY ステートメントを使用する簡単な例については、専用 SQL プールを使用してデータを安全に読み込むに関する記事を参照してください。

Note

COPY ステートメントに関するご意見や問題の報告は、配布リストの sqldwcopypreview@service.microsoft.com までメールでお寄せください。

  • Azure Data Lake Storage からデータを読み込む対象テーブルを作成します。
  • データ ウェアハウスにデータを読み込む COPY ステートメントを作成します。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。

開始する前に

このチュートリアルを始める前に、最新バージョンの SQL Server Management Studio (SSMS) をダウンロードしてインストールします。

このチュートリアルを実行するには、次のものが必要です。

  • 専用 SQL プール。 専用 SQL プールの作成とデータのクエリに関する記事をご覧ください。
  • Data Lake Storage アカウント。 Azure Data Lake Storage の使用開始に関する記事を参照してください。 このストレージ アカウントでは、次のいずれかの資格情報を構成または指定して読み込む必要があります: ストレージ アカウント キー、Shared Access Signature (SAS) キー、Azure Directory アプリケーション ユーザー、またはストレージ アカウントに対して適切な Azure ロールを持つ Microsoft Entra ユーザー。
  • 現在、新しい Azure Storage DNS パーティション機能を使っている Azure ストレージ アカウントに COPY コマンドを使ってデータを取り込むと、エラーが発生します。 このチュートリアルでは、DNS パーティション分割を使っていないサブスクリプションにストレージ アカウントをプロビジョニングしてください。

ターゲット テーブルを作成する

専用 SQL プールに接続して、読み込み先のターゲット テーブルを作成します。 この例では、製品ディメンション テーブルを作成します。

-- A: Create the target table
-- DimProduct
CREATE TABLE [dbo].[DimProduct]
(
    [ProductKey] [int] NOT NULL,
    [ProductLabel] [nvarchar](255) NULL,
    [ProductName] [nvarchar](500) NULL
)
WITH
(
    DISTRIBUTION = HASH([ProductKey]),
    CLUSTERED COLUMNSTORE INDEX
    --HEAP
);

COPY ステートメントを作成する

専用 SQL プールに接続して、COPY ステートメントを実行します。 例の完全な一覧については、専用 SQL プールを使用してデータを安全に読み込むに関する記事を参照してください。

-- B: Create and execute the COPY statement

COPY INTO [dbo].[DimProduct]  
--The column list allows you map, omit, or reorder input file columns to target table columns.  
--You can also specify the default value when there is a NULL value in the file.
--When the column list is not specified, columns will be mapped based on source and target ordinality
(
    ProductKey default -1 1,
    ProductLabel default 'myStringDefaultWhenNull' 2,
    ProductName default 'myStringDefaultWhenNull' 3
)
--The storage account location where you data is staged
FROM 'https://storageaccount.blob.core.windows.net/container/directory/'
WITH  
(
   --CREDENTIAL: Specifies the authentication method and credential access your storage account
   CREDENTIAL = (IDENTITY = '', SECRET = ''),
   --FILE_TYPE: Specifies the file type in your storage account location
   FILE_TYPE = 'CSV',
   --FIELD_TERMINATOR: Marks the end of each field (column) in a delimited text (CSV) file
   FIELDTERMINATOR = '|',
   --ROWTERMINATOR: Marks the end of a record in the file
   ROWTERMINATOR = '0x0A',
   --FIELDQUOTE: Specifies the delimiter for data of type string in a delimited text (CSV) file
   FIELDQUOTE = '',
   ENCODING = 'UTF8',
   DATEFORMAT = 'ymd',
   --MAXERRORS: Maximum number of reject rows allowed in the load before the COPY operation is canceled
   MAXERRORS = 10,
   --ERRORFILE: Specifies the directory where the rejected rows and the corresponding error reason should be written
   ERRORFILE = '/errorsfolder',
) OPTION (LABEL = 'COPY: ADLS tutorial');

列ストア圧縮の最適化

既定では、テーブルはクラスター化列ストア インデックスとして定義されます。 読み込みの完了時、一部のデータ行が、列ストアに圧縮されない可能性があります。 これにはさまざまな理由があります。 詳しくは、列ストア インデックスの管理に関するページをご覧ください。

読み込み後のクエリのパフォーマンスと列ストア圧縮を最適化するには、列ストア インデックスですべての行が強制的に圧縮されるようにテーブルを再構築します。


ALTER INDEX ALL ON [dbo].[DimProduct] REBUILD;

統計の最適化

読み込みの直後に単一列の統計を作成することをお勧めします。 統計には選択肢がいくつかあります。 たとえば、すべての列に対して単一列の統計を作成する場合は、すべての統計の再構築に時間がかかる場合があります。 クエリ述語に含まれない列があることがわかっている場合は、その列に対する統計の作成はスキップできます。

すべてのテーブルのすべての列で単一列の統計を作成する場合は、統計に関する記事のストアド プロシージャのコード サンプル prc_sqldw_create_stats を使うことができます。

次の例は、統計の作成の出発点として適しています。 これによりディメンション テーブルの各列と、ファクト テーブルの各結合列に、単一列の統計が作成されます。 他のファクト テーブルの列には、後で単一列または複数列の統計をいつでも追加できます。

結果

データがデータ ウェアハウスに正常に読み込まれました。 すばらしい結果です。

次のステップ

データの読み込みは、Azure Synapse Analytics を使ってデータ ウェアハウス ソリューションを開発する際の最初の手順です。 開発リソースを確認してください。

読み込みの例とリファレンスに関する詳細については、次のドキュメントを確認してください。