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

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

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

この記事では、Azure Data Factory および Azure Synapse Analytics パイプラインで Copy アクティビティを使用して、SAP テーブルからデータをコピーする方法について説明します。 詳細については、コピー アクティビティの概要に関するページを参照してください。

ヒント

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

サポートされる機能

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

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

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

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

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

  • 次の場所の SAP テーブルからのデータのコピー:

    • SAP ERP Central Component (SAP ECC) バージョン 7.01 以降 (2015 年以後にリリースされた最近の SAP サポート パッケージ スタック)。
    • SAP Business Warehouse (SAP BW) バージョン 7.01 以降 (2015 年よりも後にリリースされた最新の SAP サポート パッケージ スタック)。
    • SAP S/4HANA。
    • SAP Business Suite バージョン 7.01 以降のその他の製品 (2015 年よりも後にリリースされた最近の SAP サポート パッケージ スタック)。
  • SAP 透過テーブル、プールされたテーブル、クラスター化されたテーブル、およびビューの両方からのデータのコピー。

  • 基本認証、または Secure Network Communications (SNC) が構成されている場合は、SNC を使用したデータのコピー。

  • SAP アプリケーション サーバーまたは SAP メッセージ サーバーへの接続。

  • 既定の RFC またはカスタム RFC によるデータの取得。

バージョン 7.01 以降は、SAP ECC のバージョンではなく SAP NetWeaver のバージョンを指します。 たとえば、一般に SAP ECC 6.0 EHP 7 の NetWeaver バージョンは 7.4 以降です。 お使いの環境が不明な場合に、SAP システムからバージョンを確認する手順を次に示します。

  1. SAP GUI を使用して SAP システムに接続します。
  2. [システム] ->[状態] に移動します。
  3. SAP_BASIS のリリースを調べ、701 以上であることを確認します。
    Check SAP_BASIS

前提条件

この SAP テーブル コネクタを使用するには、次の手順を実行する必要があります。

  • セルフホステッド統合ランタイム (バージョン 3.17 以降) をセットアップします。 詳細については、「セルフホステッド統合ランタイムを作成して共有する」を参照してください。

  • Microsoft .NET 3.0 用の 64 ビット SAP コネクタを SAP の Web サイトからダウンロードし、それをセルフホステッド統合ランタイムのコンピューターにインストールします。 インストール時に、 [Optional setup steps](省略可能なセットアップ手順) ウィンドウで、 [Install Assemblies to GAC](アセンブリを GAC にインストールする) オプションを必ず選択します。

    Install SAP Connector for .NET

  • SAP テーブル コネクタで使用される SAP ユーザーには、次のアクセス許可が必要です。

    • Remote Function Call (RFC) の宛先を使用するための認可。
    • S_SDSAUTH 認可オブジェクトの "実行" アクティビティに対するアクセス許可。 大半の認可オブジェクトについては、SAP Note 460089 を参照できます。 RFC_FUNCTION_SEARCH など、基礎となる NCo コネクタでは特定の RFC が要求されます。

はじめに

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

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

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

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

  2. SAP を検索し、SAP テーブル コネクタを選択します。

    Screenshot of the SAP table connector.

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

    Screenshot of configuration for an SAP table linked service.

コネクタの構成の詳細

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

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

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

プロパティ Description 必須
type type プロパティは SapTable に設定する必要があります。 はい
server SAP インスタンスがあるサーバーの名前。
SAP アプリケーション サーバーへの接続に使用されます。
いいえ
systemNumber SAP システムのシステム番号。
SAP アプリケーション サーバーへの接続に使用されます。
許可されている値:2 桁の 10 進数の文字列として表されます。
いいえ
messageServer SAP メッセージ サーバーのホスト名。
SAP メッセージ サーバーへの接続に使用されます。
いいえ
messageServerService メッセージ サーバーのサービス名またはポート番号。
SAP メッセージ サーバーへの接続に使用されます。
いいえ
systemId テーブルが配置されている SAP システムの ID。
SAP メッセージ サーバーへの接続に使用されます。
いいえ
logonGroup SAP システムのログオン グループ。
SAP メッセージ サーバーへの接続に使用されます。
いいえ
clientId SAP システム内のクライアントの ID。
許可されている値:3 桁の 10 進数の文字列として表されます。
はい
language SAP システムで使用する言語。
既定値は EN です。
いいえ
userName SAP サーバーにアクセスできるユーザーの名前。 はい
password ユーザーのパスワードです。 このフィールドを SecureString 型でマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します はい
sncMode テーブルが配置されている SAP サーバーにアクセスするための SNC アクティブ化インジケーター。
SNC を使用して SAP サーバーに接続する場合に使用されます。
使用できる値は、0 (オフ、既定値) または 1 (オン) です。
いいえ
sncMyName テーブルが配置されている SAP サーバーにアクセスするためのイニシエーターの SNC 名。
sncMode がオンのときに適用されます。
いいえ
sncPartnerName テーブルが配置されている SAP サーバーにアクセスするための通信パートナーの SNC 名。
sncMode がオンのときに適用されます。
いいえ
sncLibraryPath テーブルが配置されている SAP サーバーにアクセスするための外部セキュリティ製品のライブラリ。
sncMode がオンのときに適用されます。
いいえ
sncQop 適用する SNC の保護品質レベル。
sncMode がオンのときに適用されます。
使用できる値は、1 (認証)、2 (整合性)、3 (プライバシー)、8 (既定)、9 (最大) です。
いいえ
connectVia データ ストアに接続するために使用される統合ランタイム。 「前提条件」で前述されているように、セルフホステッド統合ランタイムが必要です。 はい

例 1: SAP アプリケーション サーバーに接続する

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "server": "<server name>",
            "systemNumber": "<system number>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例 2:SAP メッセージ サーバーに接続する

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "messageServer": "<message server name>",
            "messageServerService": "<service name or port>",
            "systemId": "<system ID>",
            "logonGroup": "<logon group>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            }
        },
        "connectVia": {
            "referenceName": "<name of integration runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例 3: SNC を使用して接続する

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "server": "<server name>",
            "systemNumber": "<system number>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            },
            "sncMode": 1,
            "sncMyName": "<SNC myname>",
            "sncPartnerName": "<SNC partner name>",
            "sncLibraryPath": "<SNC library path>",
            "sncQop": "8"
        },
        "connectVia": {
            "referenceName": "<name of integration runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

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

SAP BW オープン ハブのリンクされたサービスとの間でデータをコピーするために、次のプロパティがサポートされています。

プロパティ Description 必須
type type プロパティは SapTableResource に設定する必要があります。 はい
tableName データのコピー元である SAP テーブルの名前。 はい

{
    "name": "SAPTableDataset",
    "properties": {
        "type": "SapTableResource",
        "typeProperties": {
            "tableName": "<SAP table name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<SAP table linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

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

アクティビティを定義するためのセクションとプロパティの完全な一覧については、パイプラインに関するページをご覧ください。 次のセクションでは、SAP テーブル ソースでサポートされるプロパティの一覧を示します。

ソースとしての SAP テーブル

SAP テーブルからデータをコピーするために、次のプロパティがサポートされています。

プロパティ Description 必須
type type プロパティは SapTableSource に設定する必要があります。 はい
rowCount 取得する行の数。 いいえ
rfcTableFields SAP テーブルからコピーするフィールド (列)。 たとえば、「 column0, column1 」のように入力します。 いいえ
rfcTableOptions SAP テーブルの行をフィルターにかけるためのオプション。 たとえば、「 COLUMN0 EQ 'SOMEVALUE' 」のように入力します。 この記事で後に提供する SAP クエリ演算子の表も参照してください。 いいえ
customRfcReadTableFunctionModule SAP テーブルからデータを読み取るために使用できるカスタム RFC 関数モジュール。
カスタム RFC 関数モジュールを使用して、SAP システムからデータを取得し、サービスに返す方法を定義できます。 カスタム関数モジュールには、/SAPDS/RFC_READ_TABLE2 と同様のインターフェイスが実装されている必要があります (インポート、エクスポート、テーブル)。これは、サービスで使用される既定のインターフェイスです。
いいえ
partitionOption SAP テーブルから読み取るパーティション メカニズム。 サポートされているオプションは次のとおりです。
  • None
  • PartitionOnInt (通常の整数値、または 0000012345 のように左側をゼロでパディングした整数値)
  • PartitionOnCalendarYear ("YYYY" の形式の 4 桁の数字)
  • PartitionOnCalendarMonth ("YYYYMM" の形式の 6 桁の数字)
  • PartitionOnCalendarDate ("YYYYMMDD" の形式の 8 桁の数字)
  • PartitionOntime ("HHMMSS" の形式の 6 桁の数字、235959 など)
いいえ
partitionColumnName データを分割するために使用される列の名前。 いいえ
partitionUpperBound partitionColumnName で指定され、パーティション分割を続行するために使用される列の最大値。 いいえ
partitionLowerBound partitionColumnName で指定され、パーティション分割を続行するために使用される列の最小値。 (注: パーティション オプションが PartitionOnInt の場合、partitionLowerBound を "0" にすることはできません) いいえ
maxPartitionsNumber データを分割するパーティションの最大数。 既定値は 1 です。 いいえ
sapDataColumnDelimiter 出力データを分けるために SAP RFC に渡される、区切り記号として使用される 1 文字。 いいえ

ヒント

SAP テーブルに大量のデータ (数十億行など) がある場合は、partitionOptionpartitionSetting を使ってデータをより小さいパーティションに分割します。 この場合、データはパーティションごとに読み取られ、各データ パーティションは、単一の RCF 呼び出しによって SAP サーバーから取得されます。

例として partitionOptionpartitionOnInt として取ると、各パーティション内の行数はこの式を使って計算されます: (partitionUpperBoundpartitionLowerBound の間の合計行数)/maxPartitionsNumber

コピーを高速化するためにデータ パーティションを並行して読み込むために、並列度はコピー アクティビティの parallelCopies 設定によって制御されます。 たとえば、parallelCopies を 4 に設定した場合、指定したパーティション オプションと設定に基づいて 4 つのクエリが同時に生成され、実行されます。各クエリでは、SAP テーブルからデータの一部を取得します。 maxPartitionsNumberparallelCopies プロパティの値の倍数にすることを強くお勧めします。 ファイルベースのデータ ストアにデータをコピーする場合は、複数のファイルとしてフォルダーに書き込む (フォルダー名のみを指定する) こともお勧めします。この場合、1 つのファイルに書き込むよりもパフォーマンスが優れています。

ヒント

サービス内のこの SAP テーブル コネクタでは、BASXML が既定で有効になっています。

rfcTableOptions では、次の一般的な SAP クエリ演算子を使用して行をフィルター処理できます。

演算子 説明
EQ 等しい
NE 等しくない
LT より小さい
LE 以下
GT より大きい
GE 以上
IN TABCLASS IN ('TRANSP', 'INTTAB') と同様
LIKE LIKE 'Emma%' と同様

"activities":[
    {
        "name": "CopyFromSAPTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SAP table input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SapTableSource",
                "partitionOption": "PartitionOnInt",
                "partitionSettings": {
                     "partitionColumnName": "<partition column name>",
                     "partitionUpperBound": "2000",
                     "partitionLowerBound": "1",
                     "maxPartitionsNumber": 500
                 }
            },
            "sink": {
                "type": "<sink type>"
            },
            "parallelCopies": 4
        }
    }
]

SAP テーブルを結合する

現在、SAP テーブル コネクタでは、既定の関数モジュールを備えた単一のテーブルのみがサポートされます。 複数のテーブルの結合されたデータを取得するには、次の手順に従って、SAP テーブル コネクタの customRfcReadTableFunctionModule プロパティを利用してください。

  • クエリを OPTIONS として処理し、独自のロジックを適用してデータを取得できるようにする、カスタム関数モジュールを記述します
  • [Custom function module](カスタム関数モジュール) で、自分のカスタム関数モジュールの名前を入力します。
  • [RFC table options]\(RFC テーブル オプション) で、自分の関数モジュールに取り込まれるテーブル結合ステートメントを OPTIONS として指定します。たとえば、"<TABLE1> INNER JOIN <TABLE2> ON COLUMN0"。

次に例を示します。

Sap Table Join

ヒント

また、SAP テーブル コネクタでサポートされている VIEW で、結合されたデータを集計することも検討できます。 また、関連テーブルを抽出して Azure (Azure Storage、Azure SQL Database など) にオンボードしてみてから、Data Flow を使用して、さらに結合またはフィルター処理に進むことができます。

カスタム関数モジュールを作成する

SAP テーブルについては、現在、customRfcReadTableFunctionModule プロパティをコピー ソースでサポートしています。これにより、独自のロジックを活用して、データを処理することができます。

ここでは、"カスタム関数モジュール" の使用を開始するためのいくつかの要件について簡単に説明します。

  • 定義は次のとおりです。

    Definition

  • 次のいずれかのテーブルにデータをエクスポートします。

    Export table 1

    Export table 2

SAP テーブル コネクタでカスタム関数モジュールがどのように使用されるのかを以下に示します。

  1. SAP NCO を経由する SAP サーバーとの接続を構築します。

  2. パラメーターを次のように設定して、"カスタム関数モジュール" を呼び出します。

    • QUERY_TABLE: SAP テーブル データセットで設定したテーブル名。
    • Delimiter: SAP テーブル ソースで設定した区切り記号。
    • ROWCOUNT/Option/Fields: テーブル ソースで設定した行数/集計オプション/フィールド。
  3. 次の方法で結果を取得してデータを解析します。

    1. Fields テーブル内の値を解析して、スキーマを取得します。

      Parse values in Fields

    2. 出力テーブルの値を取得して、これらの値が含まれているテーブルを確認します。

      Get values in output table

    3. OUT_TABLE 内の値を取得し、データを解析してから、シンクに書き込みます。

SAP テーブルのデータ型マッピング

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

SAP ABAP の型 サービスの中間データ型
C (String) String
I (Integer) Int32
F (Float) Double
D (Date) String
T (Time) String
P (BCD Packed、Currency、Decimal、Qty) Decimal
N (Numeric) String
X (Binary および Raw) String

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

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

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