SAP Table Batch Source

このページでは、SAP アプリケーション データから一括抽出を構成する方法について説明します。

SAP テーブル バッチソース プラグイン(SAP テーブル プラグイン)によって、SAP の標準およびカスタムのテーブルまたはビューからデータを読み取ることができます。それは、Cloud Data Fusion を使用して、SAP アプリケーションから BigQuery やその他のサポートされているターゲット システムへのデータの一括取り込みを可能にします。プラグインには次の主な特徴があります。

  • SAP ECC、SAP S4/HANA、または SAP BW をソースシステムとして使用する
  • データソース内の新しいデータとデルタデータを追跡、抽出するために SAP CDC(変更データ キャプチャ)を使用しない
  • 一括抽出モードを使用する
  • データソースとして SAP テーブルと ABAP CDS ビューをサポートする
  • アプリケーション レイヤを通じて SAP データにアクセスする

以下からデータを読み取ることができます。

  • 透過的テーブル
  • テーブルをクラスタリングする
  • プールテーブル
  • ABAP CDS ビュー
  • SAP BW ADSO オブジェクト

サポートされているソフトウェア バージョン

ソフトウェア Versions
SAP S4/HANA SAP S4/HANA 1909 以降
SAP ECC SAP ERP6 NW 7.31 SP16 以降。
SAP JCo SAP JCo バージョン 3.0.20 以降
Cloud Data Fusion 6.3 以降

Google Cloud での SAP の詳細については、Google Cloud での SAP の概要をご覧ください。

始める前に

SAP テーブル プラグインで使用される次のシステムとサービスを設定します。

  1. SAP ERP システムを構成します。このプロセスでは次の処理が行われます。
    • SAP トランスポート ファイルをインストールします。
    • 必要な SAP の承認とロールを設定します。
    • SAP Java コネクタを設定します。
  2. Cloud Data Fusion にプラグインをデプロイします。

    • 重要: Cloud Data Fusion のバージョンと互換性のあるプラグインのバージョンを選択してください。
    • Cloud Data Fusion インスタンスまたはプラグインのバージョンをアップグレードする場合は、パイプラインの機能スコープとパフォーマンスに対する変更の影響を評価します。
  3. Cloud Data Fusion と SAP 間の RFC 接続を確立します。

    • Cloud Data Fusion インスタンスと SAP サーバー間の通信が有効になっていることを確認します。
    • プライベート インスタンスの場合は、VPC ネットワーク ピアリングを設定します。
    • SAP システムと Cloud Data Fusion インスタンスの両方が、同じプロジェクト内にある必要があります。

プラグインを構成する

  1. Cloud Data Fusion ウェブ インターフェースに移動し、[Studio] をクリックします。
  2. [Realtime] ではなく、[Data Pipeline - Batch] が選択されていることを確認します。
  3. Source メニューで [SAP Table] をクリックします。SAP テーブルノードがパイプラインに表示されます。
  4. ソースを構成するには、SAP テーブルノードに移動して、[Properties] をクリックします。
  5. 次のプロパティを入力します。完全版リストについては、プロパティをご覧ください。

    1. SAP テーブルノードのラベル(例: SAP tables)を入力します。
    2. 接続の詳細を入力します。新しい 1 回限りの接続または再利用可能な既存接続を設定できます。

      新しい接続

      SAP に 1 回限りの接続を追加するには、次の手順に従います。

      1. [接続を使用] をオフのままにします。
      2. [接続] セクションで、これらのフィールドに SAP アカウントの次の情報を入力します。

        1. [参照名] フィールドに、リネージのこのソースを識別する接続の名前を入力します。
        2. [SAP クライアント] フィールドに、SAP 内の特定のインスタンスまたは環境のクライアント名を入力します。SAP 管理者がクライアント名を指定できます。
        3. [SAP の言語] フィールドに、SAP ログオン言語を入力します。デフォルトは EN(英語)です。
        4. 次のいずれかの接続タイプを選択します。

          • 直接(SAP アプリケーション サーバー経由)。このデフォルト タイプを選択した場合は、[SAP アプリケーション サーバー ホスト]、[SAP システム番号]、[SAP ルーター] のフィールドに情報を入力します。
          • 負荷分散(SAP メッセージ サーバー経由)。このタイプを選択する場合は、次のフィールドに情報を入力します。SAP Message Server ホストSAP Message Server サービスまたはポート番号,、SAP システム ID(SID)SAP ログオン グループ名
        5. [SAP テーブル / ビュー名] フィールドに、SAP システムのテーブルまたはビューの名前を入力します。

        6. SAP 認証情報を提供します。SAP ログオンのユーザー名パスワードを SAP 管理者に問い合わせます。

        7. [JCo ライブラリ Cloud Storage のパス] フィールドに、アップロードした SAP JCo ライブラリ ファイルを含む Cloud Storage の SAP Java Connector(SAP JCo)のパスを入力します。

        8. SAP からのメタデータに基づいて SAP のデータ型を対応する Cloud Data Fusion のデータ型にマッピングするスキーマを生成するには、[スキーマの取得] をクリックします。詳細については、データ型マッピングをご覧ください。

        9. 省略可: SAP からの取り込み負荷を最適化するには、次のフィールドに情報を入力します。

          1. フィルタ オプションを使用すると、定義済みの一連の値を持つ列などの選択条件に基づいてレコードを抽出できます。WHERE 句で OpenSQL 構文の条件を定義します。たとえば、次のクエリは Roster テーブルから、SchoolID 列の値が SchoolID > 52 であるすべての行を返します。

            SELECT * FROM Roster WHERE SchoolID > 52;
            

            詳細については、サポートされているフィルタをご覧ください。

          2. [取得する行数] フィールドには、正の整数の行数を指定して抽出するデータを制限できます。

          3. [スプリット数] フィールドで、パーティションを作成してデータレコードを並行して抽出できます。これにより、パフォーマンスが向上します。スプリットの数は SAP の作業プロセスに影響する可能性があるため、慎重に選択する必要があります。

          4. [パッケージ サイズ] フィールドに、単一の SAP ネットワーク呼び出しで抽出するレコードの数を指定します。パッケージ サイズはパフォーマンスと使用可能なリソースに影響するため、慎重に選択する必要があります。

      再利用可能な接続

      既存の接続を再利用する手順は次のとおりです。

      1. [接続を使用] をオンにします。
      2. [接続を参照] をクリックします。
      3. 接続名をクリックします。

      接続が存在しない場合に、再利用可能な接続を作成するには、次の手順に従います。

      1. [Add connection] > [SapTable] をクリックします。
      2. 表示された [SpTable 接続を作成] ページで、接続名と説明を入力します。
      3. [SAP クライアント] フィールドに、SAP の特定のインスタンスまたは環境のクライアント名を入力します。SAP 管理者はクライアント名を指定できます。
      4. [SAP の言語] フィールドに、SAP ログオン言語を入力します。デフォルトは EN(英語)です。
      5. 次のいずれかの接続タイプを選択します。

        • 直接(SAP アプリケーション サーバー経由)。このデフォルト タイプを選択した場合は、[SAP アプリケーション サーバー ホスト]、[SAP システム番号]、[SAP ルーター] のフィールドに情報を入力します。
        • 負荷分散(SAP メッセージ サーバー経由)。このタイプを選択する場合は、次のフィールドに情報を入力します。SAP Message Server ホストSAP Message Server サービスまたはポート番号,、SAP システム ID(SID)SAP ログオン グループ名
      6. SAP 認証情報を提供します。SAP ログオンのユーザー名パスワードの値を SAP 管理者に問い合わせます。

      7. [JCo Library Cloud Storage のパス] フィールドに、アップロードした SAP JCo ライブラリ ファイルを含む Cloud Storage の SAP Java Connector(SAP JCo)のパスを入力します。

      8. 省略可: [追加の SAP 接続プロパティ] フィールドに、SAP JCo のデフォルトをオーバーライドする必要がある Key-Value ペアを入力します。

      9. [作成] をクリックします。

プロパティ

プロパティ マクロ対応 必須プロパティ 説明
ラベル × データ パイプラインのノードの名前。
接続を使用 × いいえ 再利用可能な接続を使用します。接続を使用する場合は、認証情報を提供する必要はありません。詳しくは、接続を管理するをご覧ください。
参照名 × [接続を使用] がオンになっていない場合、このフィールドが表示されます。リネージに使用する接続の名前。
名前 いいえ [接続を使用] がオンになっている場合は、このフィールドが表示されます。再利用可能な接続の名前。
SAP クライアント SAP システムのインスタンスまたは環境。
スナップショットを撮る SAP でデータのスナップショットを有効にします。
スナップショットを有効にする場合:
  • アクティブなトランザクション テーブルデータからの抽出
  • データクエリが遅く、抽出呼び出しごとにより多くのメモリを消費するテーブルでの抽出。

スナップショットを無効にする場合: 複数の大量のデータ抽出を並行して実行しています。スナップショットは SAP のバッファ テーブルを使用するため、SAP で out of memory の問題が発生する場合があります。ただし、データ抽出が完了すると、バッファテーブルはクリアされます。
SAP の言語 SAP ユーザー インターフェースとデータの表示と処理に使用される言語。
接続タイプ いいえ SAP 接続タイプ: 直接または負荷分散
SAP アプリケーション サーバーホスト いいえ 直接接続タイプの場合のみ、このホスト名は SAP アプリケーション サーバーからのものになります。これは、SAP クライアント(SAP ウェブ インターフェース、ウェブブラウザ、モバイルアプリ、など)と基盤となるデータベースの間のミドルウェア レイヤとして機能します。
SAP システム番号 いいえ 直接接続タイプの場合のみ、この番号は各 SAP システムに割り当てられた固有識別子です。例: 00
SAP ルーター いいえ 直接接続タイプの場合のみ、これはプロキシ サーバーのルーター文字列です。これは SAP システムと外部クライアントまたはパートナー間の通信に安全なチャネルを提供します。
SAP メッセージ サーバーホスト いいえ 負荷分散接続タイプの場合のみ、これはホストの名前になります。これにより、SAP 内の複数のアプリケーション サーバー間の負荷分散が容易になります。
SAP メッセージ サーバー サービスまたはポート番号 いいえ 負荷分散接続タイプの場合のみ、これは SAP メッセージ サーバーが SAP 内の SAP クライアントとアプリケーション サーバーからの受信接続をリッスンするネットワーク ポートです。
SAP システム ID(SID) いいえ 負荷分散接続タイプの場合のみ、この ID は各 SAP システムに割り当てられます。
SAP ログオン グループ名 いいえ 複数の SAP アプリケーション サーバーの論理グループまたは構成の名前。デフォルトは PUBLIC です。
SAP テーブル/ビュー名 すべての列を抽出できる、大文字と小文字を区別しない有効なテーブルまたはビューの名前。
SAP ログオン ユーザー名 SAP のユーザー名
推奨: ユーザー名が定期的に変更される場合は、マクロを使用します。
SAP ログオン パスワード SAP パスワード。
推奨: 安全なマクロを使用してください。
GCP プロジェクト ID Google Cloud プロジェクト ID。
SAP JCo ライブラリの GCS パス SAP JCo ライブラリ ファイルをアップロードした Cloud Storage へのパス。
スキーマの取得 なし なし プラグインは、SAP からのメタデータに基づいてスキーマを生成し、SAP のデータ型を対応する Cloud Data Fusion のデータ型にマッピングします。データ型マッピングをご覧ください。
追加の SAP 接続プロパティ いいえ 追加の SAP JCo プロパティを設定して、SAP JCo のデフォルトをオーバーライドします。たとえば、jco.destination.pool_capacity = 10 を設定すると、デフォルトの接続プールの容量がオーバーライドされます。
フィルタ いいえ SQL WHERE 句を使用してフィルタリングする Open SQL 構文で指定された条件。条件に基づいてレコードを抽出します。定義された一連の値または値の範囲を持つ列になるものなどです。
詳細については、サポートされているフィルタをご覧ください。
取得する行数 いいえ 抽出されるレコードの数を制限します。
  • 正の整数を入力します。
  • 値が 0 または空の場合、Cloud Data Fusion はテーブルからすべてのレコードを抽出します。
  • (他のフィルタ値に基づいて)選択したレコード数より大きい正の値を入力すると、Cloud Data Fusion は選択したレコードのみを抽出します。
生成するスプリット数 いいえ パーティションを作成してレコードを並行して抽出します。
ランタイム エンジンは、指定された数のパーティション(および SAP 接続)を作成しながら、レコードを抽出します。
この値を増やす場合は、SAP との同時接続が増加するため、注意してください
推奨: パイプラインごとに SAP 接続と、同時に実行されるパイプラインの合計数を計画します。
値が 0 または空の場合、Cloud Data Fusion は使用可能なエグゼキュータの数、抽出するレコード、パッケージ サイズに基づいて適切な値を選択します。
パッケージ サイズ いいえ 単一の SAP ネットワーク呼び出しで抽出するレコードの数。これは、すべてのネットワーク抽出呼び出し中に SAP がメモリにバッファするレコードの数です。
このプロパティを設定する場合は注意が必要です。データを抽出する複数のデータ パイプラインによってメモリ使用量がピークに達し、Out of memory エラーによる障害が発生する可能性があります。
  • 正の整数を入力します。
  • 0 か空白の場合、プラグインでは標準値の 70,000 または適切に計算された値が使用されます。
  • Out of memory エラーでデータ パイプラインが失敗した場合は、パッケージ サイズを縮小するか、SAP の処理プロセスで使用できるメモリを増分してください。

サポートされているフィルタ:

次のフィルタ条件がサポートされています。

比較演算子を含むフィルタ

比較演算子を使用して、値の比較に基づいて複雑なフィルタリングを実行します。

構文
    SELECT * FROM table_name WHERE column_name > value; \
    SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;
    
AUDAT GT '20230914'

LIKE 演算子を含むフィルタ

パターン マッチングには LIKE 演算子を使用します。任意の文字と一致するには、% 記号をワイルドカードとして使用します。

構文
    SELECT * FROM table_name WHERE column_name LIKE 'pattern%';
    
ERNAM LIKE 'KIRAN%'

IN 演算子を含むフィルタ

IN 演算子を使用して、照合する値のリストを指定します。

構文
    SELECT * FROM table_name WHERE column_name \
      IN ('value1', 'value2', 'value3');
    
ERNAM IN ( 'LEE' , 'KIRAN' )

論理演算子を含むフィルタ

論理演算子を使用して、照合する値のリストを指定します。

構文
    SELECT * FROM table_name WHERE condition1 AND condition2; \
      SELECT * FROM table_name WHERE condition1 OR condition2; \
      SELECT * FROM table_name WHERE NOT condition;
    
  • ( AUDAT EQ '20220615' ) AND ( ERNAM LIKE 'LEE%' )
  • ( AUDAT EQ '20220615' ) OR ( AUDAT EQ '20220617' )

期間を含むフィルタ

期間を使用して、日時の列が特定の日付範囲内にある行を取得します。

構文
    SELECT * FROM table_name \
      WHERE datetime_column >= 'start_date' AND datetime_column <= 'end_date';
    
AUDAT GE '20230910' AND AUDAT LE '20230914'

日付比較を含むフィルタ

日付比較を使用して、日時を使用する行を取得します。

構文
    SELECT * FROM table_name WHERE datetime_column > 'target_date';
    
AUDAT GE '20230910' AND AUDAT LE '20230914'

日付と時刻を組み合わせるフィルタ

日時列に日付と時刻の両方が含まれている場合は、それに応じてフィルタリングできます。

構文
    SELECT * FROM table_name \
      WHERE datetime_column >= 'target_datetime' \
      AND datetime_column <= 'target_datetime';
    
TIMESTAMP GE '20210602144800' AND TIMESTAMP LE '20210624080836'

(タイムスタンプ形式: YYYYMMDDHHMMSS)

複数の条件を論理演算子で結合したフィルタ

ANDOR などの論理演算子を使用して、複数の条件を満たす行を取得できます。

構文
    SELECT * FROM table_name \
      WHERE (column1 = 'value1' AND column2 > value2) \
      OR (column3 = 'value3' AND column4 < value4);
    
    ( ERNAM EQ 'LEE' AND AUDAT GT '20220722' ) \
      OR ( BSTNK EQ 'PO54321065' AND BSTDK LT '20220714' )
    

ネストされた条件の組み合わせをフィルタする

ネストされた方法で条件を組み合わせると、複雑なフィルタを作成できます。

構文
    SELECT * FROM table_name \
      WHERE (column1 = 'value1' OR (column2 = 'value2' AND column3 > value3)) \
      AND column4 = 'value4';
    
    ( ERDAT EQ '20220722' OR ( ERNAM EQ 'LEE' AND VDATU GT '20210623' ) ) \
      AND FMBDAT EQ '20220722'
    

サブクエリを使用するフィルタ

サブクエリを使用すると、別のクエリの結果に基づいてフィルタリングできます。

構文
    SELECT * FROM table_name \
      WHERE column1 IN (SELECT related_column FROM other_table WHERE condition);
    
VBELN IN ( SELECT VBELN FROM VBAK WHERE ERNAM = 'LEE' )

日付と値の条件を組み合わせたフィルタ

複雑なフィルタで、日付ベースの条件と値ベースの条件を組み合わせることができます。

構文
    SELECT * FROM table_name \
      WHERE (column1 = 'value1' OR column2 = 'value2') \
      AND datetime_column > 'target_datetime';
    
    ( ERDAT EQ '20220722' OR ERNAM EQ 'LEE' ) AND VDATU GT '20210623'
    

日付の書式設定を含むフィルタ

SAP では、日付と時刻のフィールドは常に、データベース レベルで - または : なしで保存されます。

構文
    SELECT * FROM table_name \
      WHERE datetime_column >= 'YYYY-MM-DD HH:MM:SS' \
      AND datetime_column <= 'YYYY-M
    

サポート対象外: 関数と比較演算子を含むフィルタ

SAP では、QUERY の WHERE 句で関数はサポートされていません。

サポート対象外: 間隔を含むフィルタ

SAP では、NOW() 関数はサポートされていません。

構文
    SELECT * FROM table_name \
      WHERE datetime_column >= NOW() - INTERVAL X DAY;
    

サポート対象外: 日付コンポーネントを抽出するフィルタ

SAP では、オフセット フィルタリングはサポートされていません。

    WHERE YEAR+0(4) = 2023
    

データ型マッピング

次の表は、SAP のデータ型と対応する Cloud Data Fusion のタイプの一覧です。

SAP のデータ型 ABAP のタイプ SAP description Cloud Data Fusion のデータ型
INT1(数値) b 1 バイトの整数 整数
INT2(数値) s 2 バイトの整数 整数
INT4(数値) i 4 バイトの整数 整数
INT8(数値) 8 8 バイトの整数 long
DEC(数値) p BCD 形式でパックされた番号(DEC) decimal
DF16_DECDF16_RAW(数値) a 10 進浮動小数点数 8 バイト IEEE 754r double
DF34_DECDF34_RAW(数値) e 10 進浮動小数点数 16 バイト IEEE 754r double
FLTP(数値) f バイナリ形式の浮動小数点数 double
CHARLCHR(文字) c 文字列 string
SSTRINGGEOM_EWKB(文字) string 文字列 string
STRING(文字) string 文字列 CLOB バイト
NUMCACCP(文字) n 数値テキスト string
RAWLRAW(バイト) x バイナリデータ バイト
RAWSTRING(バイト) xstring バイト文字列 BLOB バイト
DATS(日付/時刻) d Date date
TIMS(日付/時刻) t 時間 時間帯
TIMS(日付/時刻) utcl (Utclong), TimeStamp タイムスタンプ

ユースケース

次の 2 つの抽出コンテキストがサポートされています。

  • SAP データベースのテーブルとビュー
  • SAP ABAP CDS

各コンテキストで、SAP テーブル プラグインは標準とカスタムのデータベースのテーブルとビューをサポートします。

制限事項

SAP テーブル プラグインには次の制限があります。

  • テーブルの結合はサポートされていません。
  • パラメータ付きの CDS ビューはサポートされていません。
  • キーフィールドなしはサポートされていません。
  • スナップショット機能が有効になっている場合、30,000 を超えるパッケージ サイズの使用によって、パイプラインが失敗する場合があります。このパッケージのサイズは、SAP テーブルの列の数によって異なる可能性があります。テーブルに最適なパッケージ サイズは、行サイズ(文字数)× 5 の式を使用して計算できます。
  • Connection Manager では、最大 1,000 個の SAP テーブル名を参照できます。
  • シンク内のエラーなど、パイプライン エラーが発生すると、SAP Table プラグインは、クリーンアップを目的としたカスタム RFM を呼び出して、抽出に関連するアクティブな SAP 側のプロセスをクリーンアップしようとします(/GOOG/RFC_READ_TABLE_CLEANUP)。

次のステップ