Azure Data Factory または Synapse Analytics を使用して SAP HANA からデータをコピーする

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

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

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

ヒント

SAP データ統合シナリオの全体的なサポートについては、各 SAP コネクタの詳細な説明、比較、ガイダンスが含まれた、SAP データ統合に関するホワイトペーパーを参照してください。

サポートされる機能

この SAP HANA コネクタでは、次の機能がサポートされます。

サポートされる機能 IR
Copy アクティビティ (ソース/シンク) 1
Lookup アクティビティ 1

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

コピー アクティビティによってソースまたはシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアの表をご覧ください。

具体的には、この SAP HANA コネクタは以下をサポートします。

  • SAP HANA データベースの任意のバージョンからのデータのコピー。
  • HANA 情報モデル (分析ビューや計算ビューなど) および行/列のテーブルからのデータのコピー。
  • 基本または Windows 認証を使用したデータのコピー。
  • SAP HANA ソースからの並列コピー。 詳細については、「SAP HANA からの並列コピー」セクションを参照してください。

ヒント

データを SAP HANA データ ストアコピーするには、汎用 ODBC コネクタを使用します。 詳細については、「SAP HANA シンク」セクションを参照してください。 SAP HANA コネクタと ODBC コネクタ用のリンクされたサービスは種類が異なるため、再利用することはできないことに注意してください。

前提条件

この SAP HANA コネクタを使用するには、次の手順が必要です。

  • セルフホステッド統合ランタイムをセットアップする。 詳細については、セルフホステッド統合ランタイムに関する記事をご覧ください。
  • SAP HANA ODBC ドライバーを統合ランタイム コンピューターにインストールします。 SAP HANA ODBC ドライバーは SAP ソフトウェアのダウンロード センターからダウンロードできます。 "SAP HANA CLIENT for Windows" というキーワードで検索してください。

作業の開始

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

UI を使用して SAP HANA のリンク サービスを作成する

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

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

  2. SAP を検索し、SAP HANA コネクタを選択します。

    Screenshot of the SAP HANA connector.

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

    Screenshot of linked service configuration for SAP HANA.

コネクタの構成の詳細

次のセクションでは、SAP HANA コネクタに固有の Data Factory エンティティの定義に使用されるプロパティについて詳しく説明します。

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

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

プロパティ Description 必須
type type プロパティは、次のように設定する必要があります:SapHana はい
connectionString 基本認証または Windows 認証のいずれかを使用して SAP HANA に接続するために必要な情報を指定します。 以下のサンプルを参照してください。
接続文字列には、サーバー/ポートが必要です (既定のポートは 30015)。基本認証を使用する場合は、ユーザー名とパスワードが必要です。 詳細設定については、SAP HANA ODBC の接続プロパティに関する記事を参照してください。
パスワードを Azure Key Vault に格納し、接続文字列からパスワード構成を引き出すこともできます。 詳細については、「Azure Key Vault への資格情報の格納」の記事を参照してください。
はい
userName Windows 認証を使用する場合は、ユーザー名を指定します。 例: user@domain.com いいえ
password ユーザー アカウントのパスワードを指定します。 このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。 いいえ
connectVia データ ストアに接続するために使用される統合ランタイム。 「前提条件」に記されているように、セルフホステッド統合ランタイムが必要です。 はい

例: 基本認証を使用する

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "connectionString": "SERVERNODE=<server>:<port (optional)>;UID=<userName>;PWD=<Password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例: Windows 認証を使用する

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "connectionString": "SERVERNODE=<server>:<port (optional)>;",
            "userName": "<username>", 
            "password": { 
                "type": "SecureString", 
                "value": "<password>" 
            } 
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

以下のペイロードで SAP HANA のリンクされたサービスを使用していた場合、現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。

例:

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "server": "<server>:<port (optional)>",
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

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

SAP HANA からのデータ コピーについては、次のプロパティがサポートされています。

プロパティ Description 必須
type データセットの type プロパティは、次のように設定する必要があります:SapHanaTable はい
schema SAP HANA データベース内のスキーマの名前。 いいえ (アクティビティ ソースの "query" が指定されている場合)
table SAP HANA データベース内のテーブルの名前。 いいえ (アクティビティ ソースの "query" が指定されている場合)

例:

{
    "name": "SAPHANADataset",
    "properties": {
        "type": "SapHanaTable",
        "typeProperties": {
            "schema": "<schema name>",
            "table": "<table name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<SAP HANA linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

RelationalTable 型のデータセットを使用していた場合、現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。

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

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

ソースとしての SAP HANA

ヒント

データのパーティション分割を使用して SAP HANA からデータを効率的に取り込むには、「SAP HANA からの並列コピー」セクションを参照してください。

SAP HANA からデータをコピーするために、コピー アクティビティの source セクションでは次のプロパティがサポートされています。

プロパティ Description 必須
type コピー アクティビティのソースの type プロパティは、次のように設定する必要があります:SapHanaSource はい
query SAP HANA インスタンスからデータを読み取る SQL クエリを指定します。 はい
partitionOptions SAP HANA からのデータの取り込みに使用されるデータ パーティション分割オプションを指定します。 詳細については、「SAP HANA からの並列コピー」セクションを参照してください。
指定できる値は、None (既定値)、PhysicalPartitionsOfTableSapHanaDynamicRange です。 詳細については、「SAP HANA からの並列コピー」セクションを参照してください。 PhysicalPartitionsOfTable は、クエリではなく、テーブルからデータをコピーする場合にのみ使用できます。
パーティション オプションが有効になっている (つまり、None ではない) 場合、SAP HANA から同時にデータを読み込む並列処理の次数は、コピー アクティビティの parallelCopies の設定によって制御されます。
False
partitionSettings データ パーティション分割の設定のグループを指定します。
パーティション オプションが SapHanaDynamicRange である場合に適用されます。
False
partitionColumnName 並列コピーのパーティションによって使用されるソース列の名前を指定します。 指定されない場合は、テーブルのインデックスまたは主キーが自動検出され、パーティション列として使用されます。
パーティション オプションが SapHanaDynamicRange である場合に適用されます。 クエリを使用してソース データを取得する場合は、WHERE 句で ?AdfHanaDynamicRangePartitionCondition をフックします。 「SAP HANA からの並列コピー」セクションにある例を参照してください。
はい (SapHanaDynamicRange パーティションを使用する場合)。 
packetSize データを複数のブロックに分割するためのネットワーク パケット サイズ (KB 単位) を指定します。 大量のデータをコピーする場合、パケット サイズを大きくすると、ほとんどの場合、SAP HANA からの読み取り速度が向上する可能性があります。 パケット サイズを調整する場合は、パフォーマンス テストを行うことをお勧めします。 いいえ。
既定値は 2,048 (2 MB)です。

例:

"activities":[
    {
        "name": "CopyFromSAPHANA",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SAP HANA input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SapHanaSource",
                "query": "<SQL query for SAP HANA>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

RelationalSource 型のコピー ソースを使用していた場合、現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。

SAP HANA からの並列コピー

SAP HANA コネクタは、SAP HANA からデータを並列でコピーするために、組み込みのデータ パーティション分割を提供します。 データ パーティション分割オプションは、コピー アクティビティの [ソース] テーブルにあります。

Screenshot of partition options

パーティション分割されたコピーを有効にすると、サービスによって SAP HANA ソースに対する並列クエリが実行され、パーティションごとにデータが取得されます。 並列度は、コピー アクティビティの parallelCopies 設定によって制御されます。 たとえば、parallelCopies を 4 に設定した場合、指定したパーティション オプションと設定に基づいて 4 つのクエリが同時に生成され、実行されます。各クエリでは、SAP HANA からデータの一部を取得します。

特に、SAP HANA から大量のデータを取り込む場合は、データのパーティション分割を使用した並列コピーを有効にすることをお勧めします。 さまざまなシナリオの推奨構成を以下に示します。 ファイルベースのデータ ストアにデータをコピーする場合は、複数のファイルとしてフォルダーに書き込む (フォルダー名のみを指定する) ことをお勧めします。この場合、1 つのファイルに書き込むよりもパフォーマンスが優れています。

シナリオ 推奨設定
大きなテーブル全体を読み込む。 パーティション オプション: テーブルの物理パーティション。

実行時に、サービスによって、指定された SAP HANA テーブルの物理パーティションの種類が自動的に検出され、対応するパーティション戦略が選択されます。
- 範囲パーティション分割:テーブルに対して定義されているパーティション列とパーティション範囲を取得し、そのデータを範囲別にコピーします。
- ハッシュ パーティション分割: ハッシュ パーティション キーをパーティション列として使用して、サービスによって計算された範囲に基づいてデータをパーティション分割してコピーします。
- ラウンドロビン パーティション分割またはパーティションなし: 主キーをパーティション列として使用して、サービスによって計算された範囲に基づいてデータをパーティション分割してコピーします。
カスタム クエリを使用して大量のデータを読み込む。 パーティション オプション: 動的範囲パーティション。
クエリ: SELECT * FROM <TABLENAME> WHERE ?AdfHanaDynamicRangePartitionCondition AND <your_additional_where_clause>
パーティション列: 動的な範囲パーティションを適用するために、使用する列を指定します。

実行時に、サービスではまず、指定されたパーティション列の値の範囲を計算します。これにより、個別のパーティション列の値の数と並列コピー設定に従って、複数のバケットに行が均等に分散されます。次に、?AdfHanaDynamicRangePartitionCondition が、パーティションごとのパーティション列値の範囲のフィルター処理に置き換えられて、SAP HANA に送信されます。

複数の列をパーティション列として使用する場合は、SELECT * FROM (SELECT *, CONCAT(<KeyColumn1>, <KeyColumn2>) AS PARTITIONCOLUMN FROM <TABLENAME>) WHERE ?AdfHanaDynamicRangePartitionCondition のように、各列の値をクエリ内で 1 つの列として連結して、パーティション列として指定できます。

例: テーブルの物理パーティションを使用してクエリを実行する

"source": {
    "type": "SapHanaSource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

例: 動的範囲パーティションを使用してクエリを実行する

"source": {
    "type": "SapHanaSource",
    "query": "SELECT * FROM <TABLENAME> WHERE ?AdfHanaDynamicRangePartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "SapHanaDynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<Partition_column_name>"
    }
}

SAP HANA のデータ型マッピング

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

SAP HANA のデータ型 中間サービス データ型
ALPHANUM String
bigint Int64
BINARY Byte[]
BINTEXT String
BLOB Byte[]
BOOL Byte
CLOB String
DATE DateTime
DECIMAL Decimal
DOUBLE Double
FLOAT Double
INTEGER Int32
NCLOB String
NVARCHAR String
real Single
SECONDDATE DateTime
SHORTTEXT String
SMALLDECIMAL Decimal
SMALLINT Int16
STGEOMETRYTYPE Byte[]
STPOINTTYPE Byte[]
[TEXT] String
TIME TimeSpan
TINYINT Byte
VARCHAR String
timestamp DateTime
VARBINARY Byte[]

SAP HANA シンク

現時点では、SAP HANA コネクタはシンクとしてサポートされていませんが、SAP HANA ドライバーで汎用 ODBC コネクタを使用して SAP HANA にデータを書き込むことができます。

前提条件に従って、セルフホステッド Integration Runtime を設定し、まず SAP HANA ODBC ドライバーをインストールします。 次の例に示すように、SAP HANA データストアに接続するための ODBC のリンクされたサービスを作成し、データセットを作成し、それに応じた ODBC 型でアクティビティ シンクをコピーします。 詳細については ODBC コネクタに関する記事をご覧ください。

{
    "name": "SAPHANAViaODBCLinkedService",
    "properties": {
        "type": "Odbc",
        "typeProperties": {
            "connectionString": "Driver={HDBODBC};servernode=<HANA server>.clouddatahub-int.net:30015",
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

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

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