クイック スタート: COPY ステートメントを使用してデータを一括読み込みする

Tip

Microsoft Fabric Data Warehouse は、将来のアーキテクチャ、組み込みの AI、および新機能を備えた、Data Lake 基盤上のエンタープライズ 規模のリレーショナル ウェアハウスです。 データ ウェアハウスを初めて使用する場合は、Fabric Data Warehouseから始めます。 既存の dedicated SQL プール ワークロードは、Fabric にアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。

このクイック スタートでは、シンプルで柔軟な COPY ステートメント を使用して専用 SQL プールにデータを一括読み込みし、高スループットのデータ インジェストを行います。 COPY ステートメントは、次の機能を提供することでシームレスかつ柔軟にデータを読み込むため、推奨される読み込みユーティリティです。

  • データ ウェアハウスに対する厳密な CONTROL アクセス許可を必要とせずに、低い特権を持つユーザーに読み込みを許可する
  • 追加のデータベース オブジェクトを作成することなく、1 つの T-SQL ステートメントのみを活用する
  • Share Access Signature (SAS) を使用してストレージ アカウント キーを公開せずに、より細かいアクセス許可モデルを活用する
  • ERRORFILE の場所に別のストレージ アカウントを指定する (REJECTED_ROW_LOCATION)
  • ターゲット列ごとに既定値をカスタマイズし、特定のターゲット列に読み込むソース データ フィールドを指定できます。
  • CSV ファイルのカスタム行ターミネータを指定する
  • CSV ファイルの文字列、フィールド、および行の区切り記号をエスケープする
  • CSV ファイルに SQL Server 日付形式を利用する
  • 保存場所のパスにワイルドカードや複数のファイルを指定できます。

前提条件

このクイックスタートは、専用 SQL プールが既に用意されていることを前提としています。 専用 SQL プールが作成されていない場合は、 作成と接続 - ポータル のクイックスタートを使用します。

必要なアクセス許可を設定する

-- List the permissions for your user
select  princ.name
,       princ.type_desc
,       perm.permission_name
,       perm.state_desc
,       perm.class_desc
,       object_name(perm.major_id)
from    sys.database_principals princ
left join
        sys.database_permissions perm
on      perm.grantee_principal_id = princ.principal_id
where name = '<yourusername>';

--Make sure your user has the permissions to CREATE tables in the [dbo] schema
GRANT CREATE TABLE TO <yourusername>;
GRANT ALTER ON SCHEMA::dbo TO <yourusername>;

--Make sure your user has ADMINISTER DATABASE BULK OPERATIONS permissions
GRANT ADMINISTER DATABASE BULK OPERATIONS TO <yourusername>

--Make sure your user has INSERT permissions on the target table
GRANT INSERT ON <yourtable> TO <yourusername>

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

この例では、ニューヨークのタクシー データセットからデータを読み込みます。 1 年以内に取得されたタクシー乗車を表す Trip というテーブルを読み込みます。 次のコマンドを実行してテーブルを作成します。

CREATE TABLE [dbo].[Trip]
(
    [DateID] int NOT NULL,
    [MedallionID] int NOT NULL,
    [HackneyLicenseID] int NOT NULL,
    [PickupTimeID] int NOT NULL,
    [DropoffTimeID] int NOT NULL,
    [PickupGeographyID] int NULL,
    [DropoffGeographyID] int NULL,
    [PickupLatitude] float NULL,
    [PickupLongitude] float NULL,
    [PickupLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [DropoffLatitude] float NULL,
    [DropoffLongitude] float NULL,
    [DropoffLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [PassengerCount] int NULL,
    [TripDurationSeconds] int NULL,
    [TripDistanceMiles] float NULL,
    [PaymentType] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [FareAmount] money NULL,
    [SurchargeAmount] money NULL,
    [TaxAmount] money NULL,
    [TipAmount] money NULL,
    [TollsAmount] money NULL,
    [TotalAmount] money NULL
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    CLUSTERED COLUMNSTORE INDEX
);

COPY ステートメントを実行する

次の COPY ステートメントを実行して、Azure BLOB ストレージ アカウントから Trip テーブルにデータを読み込みます。

COPY INTO [dbo].[Trip] FROM 'https://nytaxiblob.blob.core.windows.net/2013/Trip2013/'
WITH (
   FIELDTERMINATOR='|',
   ROWTERMINATOR='0x0A'
) OPTION (LABEL = 'COPY: dbo.trip');

負荷を監視する

次のクエリを定期的に実行して、読み込みが進行しているかどうかを確認します。

SELECT  r.[request_id]                           
,       r.[status]                               
,       r.resource_class                         
,       r.command
,       sum(bytes_processed) AS bytes_processed
,       sum(rows_processed) AS rows_processed
FROM    sys.dm_pdw_exec_requests r
              JOIN sys.dm_pdw_dms_workers w
                     ON r.[request_id] = w.request_id
WHERE [label] = 'COPY: dbo.trip' and session_id <> session_id() and type = 'WRITER'
GROUP BY r.[request_id]                           
,       r.[status]                               
,       r.resource_class                         
,       r.command;

次のステップ

  • データ読み込みのベスト プラクティスについては、「データの 読み込みのベスト プラクティス」を参照してください。
  • データ読み込みのリソースを管理する方法については、「ワークロードの 分離」を参照してください。