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 オブジェクト

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

ソフトウェア バージョン
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 Connector を設定します。
  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 Table ノードがパイプラインに表示されます。
  4. ソースを構成するには、SAP Table ノードに移動して、[プロパティ] をクリックします。
  5. 次のプロパティを入力します。完全版リストについては、プロパティをご覧ください。

    1. SAP Table ノードのラベルを入力します(例: 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 のデータ型を対応する Cloud Data Fusion のデータ型にマッピングする SAP のメタデータに基づいてスキーマを生成するには、[スキーマを取得] をクリックします。詳細については、データ型のマッピングをご覧ください。

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

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

            SELECT * FROM Roster WHERE SchoolID > 52;
            

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

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

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

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

      再利用可能な接続

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

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

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

      1. [接続を追加 > 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 ライブラリの 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-byte integer int
INT2(数値) s 2-byte integer int
INT4(数値) i 4-byte integer int
INT8(数値) 8 8-byte integer 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 文字列 文字列
SSTRINGGEOM_EWKB(文字) 文字列 文字列 文字列
STRING(文字) 文字列 文字列 CLOB バイト
NUMCACCP(文字) n 数値テキスト 文字列
RAWLRAW(バイト) x バイナリデータ バイト
RAWSTRING(バイト) xstring バイト文字列 BLOB バイト
DATS(日付/時刻) d Date 日付
TIMS(日付/時刻) t Time 時間
TIMS(日付/時刻) utcl (Utclong), TimeStamp timestamp

ユースケース

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

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

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

制限事項

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

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

次のステップ