Azure Data Factory または Synapse Analytics を使用した Azure Table Storage との間でのデータのコピー

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

この記事では、Azure Data Factory および Azure Synapse Analytics パイプラインで Copy アクティビティを使用して、Azure Table Storage との間でデータをコピーする方法について説明します。 この記事は、コピー アクティビティの概要を示しているコピー アクティビティの概要に関する記事に基づいています。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

サポートされる機能

この Azure Table ストレージ コネクタは、次の機能でサポートされます。

サポートされる機能 IR マネージド プライベート エンドポイント
Copy アクティビティ (ソース/シンク) ① ② ✓ ストレージ アカウント V1 を除く
Lookup アクティビティ ① ② ✓ ストレージ アカウント V1 を除く

① Azure 統合ランタイム ② セルフホステッド統合ランタイム

Table Storage には、サポートされているソース データ ストアからデータをコピーすることができます。 サポートされているシンク データ ストアに対して、Table Storage からデータをコピーすることもできます。 コピー アクティビティによってソースまたはシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関する記事の表をご覧ください。

具体的には、この Azure Table コネクタは、アカウント キーとサービスの Shared Access Signature 認証を使用して、データのコピーをサポートします。

はじめに

パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用します。

UI を使用して Azure Table Storage のリンク サービスを作成する

次の手順を使用して、Azure portal UI で Azure Table Storage のリンク サービスを作成します。

  1. Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンク サービス] を選択して、[新規] をクリックします。

  2. Azure Table を検索し、Azure Table Storage コネクタを選択します。

    Azure Table Storage コネクタのスクリーンショット。

  3. サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。

    Azure Table Storage のリンク サービスの構成を示すスクリーンショット。

コネクタの構成の詳細

以下のセクションでは、Azure Table Storage に固有のエンティティの定義に使用されるプロパティについて詳しく説明します。

リンクされたサービス プロパティ

この Azure Table Storage コネクタでは、次の認証の種類がサポートされています。 詳細については、対応するセクションをご覧ください。

アカウント キー認証

Azure Storage のリンクされたサービスは、アカウント キーを使用して作成できます。 これにより、サービスは Storage にグローバルにアクセスすることができます。 次のプロパティがサポートされています。

プロパティ 内容 必須
type type プロパティを AzureTableStorage に設定する必要があります。 はい
connectionString connectionString プロパティのために Storage に接続するために必要な情報を指定します。
アカウント キーを Azure Key Vault に格納して、接続文字列から accountKey 構成をプルすることもできます。 詳細については、下記の例と、「Azure Key Vault への資格情報の格納」の記事を参照してください。
はい
connectVia データ ストアに接続するために使用される統合ランタイム。 Azure 統合ランタイムまたは自己ホスト型統合ランタイムを使用できます (データ ストアがプライベート ネットワークにある場合)。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 いいえ

注意

"AzureStorage" タイプのリンクされたサービスを使用していた場合は、まだそのままサポートされていますが、今後は新しい "AzureTableStorage" のリンクされたサービス タイプを使用することをお勧めします。

例:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例: アカウント キーを Azure Key Vault に格納する

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;",
            "accountKey": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Shared Access Signature 認証

Shared Access Signature を使用して、Storage のリンクされたサービスを作成することもできます。 これによって、サービスは、ストレージ内のすべてまたは特定のリソースへのアクセスが制限付きまたは期限付きになります。

Shared Access Signature を使用すると、ストレージ アカウント内のリソースへの委任アクセスが可能になります。 ストレージ アカウントのオブジェクトへの制限付きアクセス許可を、期間とアクセス許可セットを指定してクライアントに付与できます。 アカウントのアクセス キーを共有する必要はありません。 Shared Access Signature とは、ストレージ リソースへの認証アクセスに必要なすべての情報をクエリ パラメーター内に含む URI です。 クライアントは、Shared Access Signature 内で適切なコンストラクターまたはメソッドに渡すだけで、Shared Access Signature でストレージ リソースにアクセスできます。 Shared Access Signature について詳しくは、Shared Access Signature のモデルの概要に関するページをご覧ください。

注意

サービスの Shared Access Signatureアカウントの Shared Access Signature の両方がサポートされるようになりました。 Shared Access Signature の詳細については、「Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する」を参照してください。

ヒント

ストレージ アカウントに使用するサービスの Shared Access Signature を生成するには、次の PowerShell コマンドを実行します。 プレースホルダーを置き換えたうえで、必要なアクセス許可を付与してください。 $context = New-AzStorageContext -StorageAccountName <accountName> -StorageAccountKey <accountKey> New-AzStorageContainerSASToken -Name <containerName> -Context $context -Permission rwdl -StartTime <startTime> -ExpiryTime <endTime> -FullUri

Shared Access Signature 認証を使用するために、次のプロパティがサポートされています。

プロパティ 内容 必須
type type プロパティを AzureTableStorage に設定する必要があります。 はい
sasUri テーブルへの共有アクセス署名 URI の SAS URI を指定します。
安全に格納するには、このフィールドを SecureString とマークします。 自動ローテーションを活用してトークン部分を削除するために、SAS トークンを Azure Key Vault に配置することもできます。 詳細については、下記の例と、「Azure Key Vault への資格情報の格納」の記事を参照してください。
はい
connectVia データ ストアに接続するために使用される統合ランタイム。 Azure 統合ランタイムまたは自己ホスト型統合ランタイムを使用できます (データ ストアがプライベート ネットワークにある場合)。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 いいえ

注意

"AzureStorage" タイプのリンクされたサービスを使用していた場合は、まだそのままサポートされていますが、今後は新しい "AzureTableStorage" のリンクされたサービス タイプを使用することをお勧めします。

例:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource e.g. https://<account>.table.core.windows.net/<table>?sv=<storage version>&amp;st=<start time>&amp;se=<expire time>&amp;sr=<resource>&amp;sp=<permissions>&amp;sip=<ip range>&amp;spr=<protocol>&amp;sig=<signature>>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例: アカウント キーを Azure Key Vault に格納する

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource without token e.g. https://<account>.table.core.windows.net/<table>>"
            },
            "sasToken": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Shared Access Signature の URI を作成する際は、次の点に注意してください。

  • リンク サービス (読み取り、書き込み、読み取り/書き込み) がどのように使用されているかに応じて、オブジェクトに対する適切な読み取り/書き込みアクセス許可を設定します。
  • 有効期限を適切に設定します。 Storage オブジェクトへのアクセスがパイプラインのアクティブな期間内に期限切れにならないことを確認します。
  • URI は、必要に応じて、適切なテーブル レベルで作成する必要があります。

システム割り当てマネージド ID 認証

データ ファクトリや Synapse パイプラインは、Azure リソースのシステム割り当てマネージド ID に関連付けできます。これは、他の Azure サービスに対する認証のためのリソースを表します。 このシステム割り当てマネージド ID を Azure Table Storage 認証に使用できます。 Azure リソース用マネージド ID の詳細については、Azure リソース用マネージド ID に関するページを参照してください

システム割り当てマネージド ID 認証を使用するには、次の手順に従います。

  1. ファクトリまたは Synapse ワークスペースと共に生成されたシステム割り当てマネージド ID のオブジェクト ID の値をコピーして、システム割り当てマネージド ID 情報を取得します。

  2. Azure Table Storage でマネージド ID にアクセス許可を付与します。 ロールの詳細については、こちらの記事を参照してください。

    • ソースとしてアクセス制御 (IAM) で、少なくともストレージ テーブル データ閲覧者のロールを付与します。
    • シンクとしてアクセス制御 (IAM) で、少なくともストレージ テーブル データ共同作成者のロールを付与します。

Azure Table Storage リンク サービスでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type type プロパティを AzureTableStorage に設定する必要があります。 はい
serviceEndpoint https://<accountName>.table.core.windows.net/ のパターンで、Azure Table Storage サービス エンドポイントを指定します。 はい
connectVia データ ストアに接続するために使用される統合ランタイム。 Azure Integration Runtime を使用できます。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 いいえ

Note

システム割り当てマネージド ID 認証は、Azure 統合ランタイムでのみサポートされます。

例:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {            
            "serviceEndpoint": "https://<accountName>.table.core.windows.net/"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

ユーザー割り当てマネージド ID 認証

データ ファクトリは、1 つ以上のユーザー割り当てマネージド ID に割り当てることができます。 このユーザー割り当てマネージド ID を Azure Table Storage 認証に使用できます。これにより、Azure Table Storage にアクセスしてそこに (またはそこから) データをコピーできます。 Azure リソース用マネージド ID の詳細については、Azure リソース用マネージド ID に関するページを参照してください

ユーザー割り当てマネージド ID 認証を使用するには、次の手順に従います。

  1. 1 つ以上のユーザー割り当てマネージド ID を作成して、Azure Table Storage でアクセス許可を付与します。 ロールの詳細については、こちらの記事を参照してください。

    • ソースとしてアクセス制御 (IAM) で、少なくともストレージ テーブル データ閲覧者のロールを付与します。
    • シンクとしてアクセス制御 (IAM) で、少なくともストレージ テーブル データ共同作成者のロールを付与します。
  2. 1 つ以上のユーザー割り当てマネージド ID をデータ ファクトリに割り当てて、ユーザー割り当てマネージド ID ごとに資格情報を作成します。

Azure Table Storage リンク サービスでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type type プロパティを AzureTableStorage に設定する必要があります。 はい
serviceEndpoint https://<accountName>.table.core.windows.net/ のパターンで、Azure Table Storage サービス エンドポイントを指定します。 はい
資格情報 ユーザー割り当てマネージド ID を資格情報オブジェクトとして指定します。 はい
connectVia データ ストアに接続するために使用される統合ランタイム。 Azure 統合ランタイムまたは自己ホスト型統合ランタイムを使用できます (データ ストアがプライベート ネットワークにある場合)。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 いいえ

例:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {            
            "serviceEndpoint": "https://<accountName>.table.core.windows.net/",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

データセットのプロパティ

データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。 このセクションでは、Azure Table データセットでサポートされるプロパティの一覧を示します。

Azure Table をコピー先またはコピー元としてデータをコピーするには、データセットの type プロパティを AzureTable に設定します。 次のプロパティがサポートされています。

プロパティ 内容 必須
type データセットの type プロパティは、AzureTable に設定する必要があります。 はい
tableName リンクされたサービスが参照する Table Storage データベース インスタンスのテーブルの名前です。 はい

例:

{
    "name": "AzureTableDataset",
    "properties":
    {
        "type": "AzureTable",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Azure Table storage linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

サービスによるスキーマの推論

Azure Table などのスキーマのないデータ ストアの場合、サービスは次のいずれかの方法でスキーマの推論を行います。

  • Copy アクティビティで列マッピングを指定した場合、サービスはソース側の列の一覧を使用してデータの取得を行います。 この場合、行に列の値が含まれていないと、null 値が指定されます。
  • Copy アクティビティで列マッピングを指定しない場合、サービスは、データの最初の行を使用してスキーマを推論します。 この場合、最初の行に完全なスキーマが含まれていない場合 (たとえば、一部の列に null 値がある場合)、コピー操作の結果で一部の列が欠落します。

コピー アクティビティのプロパティ

アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、Azure Table のソースとシンクでサポートされるプロパティの一覧を示します。

ソースの種類として Azure Table を設定する

Azure Table からデータをコピーする場合は、コピー アクティビティのソースの種類を AzureTableSource を設定します。 コピー アクティビティの source セクションでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type コピー アクティビティのソースの type プロパティを AzureTableSource に設定する必要があります。 はい
azureTableSourceQuery カスタム Table Storage クエリを使用してデータを読み取ります。
ソース クエリは、Azure Table Storage でサポートされている $filter クエリ オプションからの直接マップです。このドキュメントの構文の詳細を確認し、次の azureTableSourceQuery の例に関するセクションで、例を参照してください。
いいえ
azureTableSourceIgnoreTableNotFound テーブルが存在しないという例外を受け入れるかどうかを示します。
使用可能な値: True、および False (既定値)。
いいえ

azureTableSourceQuery の例

Note

Azure Table のクエリ操作は、Azure Table サービスによって適用されるとおり、30 秒でタイムアウトとなります。 クエリの最適化方法については、「クエリに対応した設計」という記事をご覧ください。

datetime 型の列に対してデータをフィルタリングする場合は、この例を参照してください。

"azureTableSourceQuery": "LastModifiedTime gt datetime'2017-10-01T00:00:00' and LastModifiedTime le datetime'2017-10-02T00:00:00'"

文字列型の列に対してデータをフィルタリングする場合、この例を参照してください。

"azureTableSourceQuery": "LastModifiedTime ge '201710010000_0000' and LastModifiedTime le '201710010000_9999'"

パイプラインのパラメーターを使用している場合は、前のサンプルに従って、datetime 値を適切なフォーマットにキャストします。

シンクの種類として Azure Table を設定する

Azure Table にデータをコピーする場合は、コピー アクティビティのシンクの種類を AzureTableSink に設定します。 コピー アクティビティの sink セクションでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type コピー アクティビティのシンクの type プロパティを AzureTableSink に設定する必要があります。 はい
azureTableDefaultPartitionKeyValue シンクで使用できる既定のパーティション キー値です。 いいえ
azureTablePartitionKeyName 値をパーティション キーとして使用する列の名前を指定します。 指定しない場合、AzureTableDefaultPartitionKeyValue がパーティション キーとして使用されます。 いいえ
azureTableRowKeyName 値を行キーとして使用する列の名前を指定します。 指定しない場合、各行に GUID を使用します。 いいえ
azureTableInsertType Azure Table にデータを挿入する方法です。 このプロパティは、一致するパーティションと列キーを持つ出力テーブル内の既存の行で、値を置換するか結合するかを制御します。

使用可能な値: マージ (既定値) および置換

この設定は、テーブル レベルではなく、行レベルで適用されます。 どちらのオプションでも、出力テーブル内の、入力内に存在しない行は削除されません。 結合と置換の設定の機能については、「Insert or Merge Entity (エンティティの挿入または結合)」および「Insert or Replace Entity (エンティティの挿入または置換)」をご覧ください。
いいえ
writeBatchSize writeBatchSize または writeBatchTimeout に達したときに、Azure Table にデータを挿入します。
使用可能な値: 整数 (行数)。
いいえ (既定値は 10,000)
writeBatchTimeout writeBatchSize または writeBatchTimeout に達したときに、Azure Table にデータを挿入します。
使用可能な値: 期間。 たとえば "00:20:00" (20 分) を指定できます。
No (既定値は 90 秒 - ストレージ クライアントの既定のタイムアウト値)
 maxConcurrentConnections アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。   なし

例:

"activities":[
    {
        "name": "CopyToAzureTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure Table output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureTableSink",
                "azureTablePartitionKeyName": "<column name>",
                "azureTableRowKeyName": "<column name>"
            }
        }
    }
]

azureTablePartitionKeyName

azureTablePartitionKeyName として宛先列を使用する前に、 "translator" プロパティを使用して、ソース列を宛先列にマップします。

次の例では、ソース列の DivisionID が宛先列の DivisionID にマップされます。

"translator": {
    "type": "TabularTranslator",
    "columnMappings": "DivisionID: DivisionID, FirstName: FirstName, LastName: LastName"
}

"DivisionID" は、パーティション キーとして指定されます。

"sink": {
    "type": "AzureTableSink",
    "azureTablePartitionKeyName": "DivisionID"
}

Azure Table のデータ型のマッピング

Azure Table をコピー元またはコピー先としてデータをコピーするとき、Azure Table のデータ型からサービス内部で使用される中間データ型へのマッピングは、以下を使用して行われます。 コピー アクティビティでソースのスキーマとデータ型がシンクにマッピングされるしくみについては、スキーマとデータ型のマッピングに関する記事を参照してください。

Azure テーブル間でデータの移動時に、次の Azure Table により定義されたマッピングが Azure Table の OData 型と .NET 型との間の移動に利用されます。

Azure Table のデータ型 中間サービス データ型 詳細
Edm.Binary byte[] バイトの配列 (最大 64 KB)。
Edm.Boolean [bool] ブール値です。
Edm.DateTime DateTime 世界協定時刻 (UTC) を表す 64 ビット値。 サポートされている DateTime 範囲は西暦 (C.E.) 1601 年 1 月 1 日 UTC 深夜 12:00 からです。 この範囲は 9999 年 12 月 31 日に終了します。
Edm.Double double 64 ビットの浮動小数点値。
Edm.Guid Guid グローバルで一意となる 128 ビットの識別子。
Edm.Int32 Int32 32 ビットの整数。
Edm.Int64 Int64 64 ビットの整数。
Edm.String String UTF-16 エンコードの値。 文字列値は最大 64 KB になります。

Lookup アクティビティのプロパティ

プロパティの詳細については、Lookup アクティビティに関するページを参照してください。

コピー アクティビティによってソース、シンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。