コピーブック パーサーのリファレンス

Mainframe Connector では、2 つのバージョンのコピーブック パーサーがサポートされています。

  • ネイティブ コピーブック パーサー: ネイティブ コピーブック パーサーは、ANTLR4 ベースのパーサーを実装し、COBOL コピーブックをサポートします。これは、パーサーの推奨バージョンです。
  • レガシー コピーブック パーサー: レガシー コピーブック パーサーは、非常に限定されたコピーブック形式をサポートする古いバージョンのパーサーです。

コピーブックに基づいて、使用するパーサーを定義できます。使用するパーサーの定義の詳細については、コピーブック パーサーの定義をご覧ください。

ネイティブ コピーブック パーサー

ネイティブ コピーブック パーサーはパーサーの最新バージョンで、デフォルトで使用されます。ネイティブのコピーブック パーサーは ANTLR4 ベースのパーサーを実装し、COBOL コピーブックをサポートします。

このセクションでは、ネイティブ コピーブック パーサーでサポートされているデータ型によって実行される前処理タスクと、その使用上の制限事項を示します。

前処理

コピーブックを解析する前に、ネイティブ コピーブック パーサーはデータを前処理して、次のタスクを実行します。

  • コメント行を削除します。
  • 行の継続を解決します。
  • 行番号の領域と列 73 の領域を空白にします。
  • EJECTSPACETITLE などのプリプロセッサ固有のステートメントを保持します。これらのフィールドは解析されますが、無視されます。COPY REPLACING で使用できるプリプロセッサ パラメータを含むコピーブックは、ネイティブ コピーブック パーサーではサポートされていません。これらのコピーブックでは、識別子がコロン(:)で囲まれています。

サポートされるデータ型と制限事項

ネイティブ コピーブック パーサーでサポートされているデータ型と使用上の制限事項は次のとおりです。

  • レベル 66(ALIAS)または 77(STANDALONE)はサポートされていません。
  • PICTURE フィールドのみを使用します。次の PICTURE フィールドがサポートされています。
    • Pic A、Pic、B、Pic G(DBCS)、Pic N(national または DBCS)、Pic U(UTF8)、Pic X、ゾーン付き 10 進数(最大精度 38、最大スケール 38)
  • IBM 16 進浮動小数点(HFP)がサポートされています。
  • REDEFINES はサポートされていません。
  • 次の COMP フィールドのみを使用します。ALIGN と OCCURS はサポートされていません。
    • COMP
    • COMP4
    • BINARY
    • COMP3
    • PACKED-DECIMAL
  • DATE と TIMESTAMP がサポートされています。
  • ダブルバイト文字セット(DBCS) フィールドの Pic G と Pic N がサポートされており、現在非推奨になった Pic T の代わりに使用する必要があります。USAGE DISPLAY-1 を指定せずに Pic N フィールドを DBCS として使用するには、NSYMBOL 環境変数を DBCS に設定する必要があります。デフォルトでは、NSYMBOLNATIONAL に設定され、USAGE NATIONALUSAGE 句がない Pic N フィールドに設定されます。NSYMBOLNATIONAL または DBCS にのみ設定できます。
  • 可変長の文字列がサポートされています。
  • SIGN 句がサポートされています。
  • すべてのフィールドを両端揃えにし、インデント レベルを 1 つ使用する必要があります。
  • コメントがサポートされています。

日付フィールドとタイムスタンプ フィールドのサポート

Mainframe Connector は、BigQuery との間で日付とタイムスタンプのデータの移動をサポートしています。これを行うには、SUFFIX という単語で始まる環境変数を次の形式で定義する必要があります。

SUFFIX_SUFFIX_STRING="--bqtype TYPE --format FORMAT --timezone TIMEZONE"

形式の詳細については、次のリストをご覧ください。

  • SUFFIX_SUFFIX_STRING: 日付とタイムスタンプのデータの定義に使用できる環境変数。SUFFIX_STRING 名は、コピーブックでフィールド名の接尾辞として使用する場合に、日付またはタイムスタンプとして解釈される必要がある接尾辞 -SUFFIX_STRING または _SUFFIX_STRING に対応します。SUFFIX_STRING にハイフンやアンダースコアが含まれていないことを確認します。
  • --bqtype: BigQuery フィールドの TYPE を定義します。サポートされている BigQuery の型は DATETIMESTAMP です。
  • --format: 日付またはタイムスタンプの形式を定義するパラメータ。最大で 5 つの異なる形式をカンマで区切って指定できます。 複数の形式が特定の入力と一致する可能性がある場合、最初に一致した形式が BigQuery への読み込みに使用されます。エクスポートに複数の形式が指定されている場合は、最初の形式のみが使用されます。有効な形式の詳細については、サポートされている日付とタイムスタンプの形式をご覧ください。
  • --timezone: TIMESTAMP 型のオプションのパラメータ。 デフォルトでは、タイムゾーンは UTC です。サポートされているタイムゾーン形式の詳細については、サポートされているタイムゾーン形式をご覧ください。
  • --omitsuffix(省略可): このパラメータを指定すると、BigQuery に表示されるフィールド名から -SUFFIX_STRING または _SUFFIX_STRING が削除されます。

SUFFIX_SUFFIX_STRING のエイリアスを追加するには、環境変数 SUFFIX_SUFFIX_ALIAS=$SUFFIX_SUFFIX_STRING を設定します。

例:

  • 環境変数を SUFFIX_DT8="--bqtype DATE --format yyyyMMdd" として定義すると、-DT8 または _DT8 の接尾辞付きのフィールドは、BigQuery で DATE 型のフィールドになり、そのパターンは yyyyMMdd になります。
  • 環境変数を SUFFIX_DT10="--bqtype DATE --format MM-dd-yyyy" として定義すると、-DT10 または _DT10 の接尾辞付きのフィールドは、BigQuery で DATE 型のフィールドになり、そのパターンは MM-dd-yyyy になります。
  • 環境変数を SUFFIX_DT="--bqtype DATE --format 'MM-dd-yyyy,MM/dd/yyyy'" として定義すると、-DT または _DT の接尾辞付きのフィールドは、BigQuery で DATE 型のフィールドになり、そのパターンは MM-dd-yyyy または MM/dd/yyyy になります。
  • 2 つの環境変数を SUFFIX_TIMESTAMP="--bqtype TIMESTAMP --format 'yyyy-MM-dd HH:mm:ss.SSSSSS' --timezone America/Los_Angeles"SUFFIX_TS=$SUFFIX_TIMESTAMP として定義すると、-TIMESTAMP_TIMESTAMP-TS_TS の接尾辞付きのフィールドは、BigQuery で TIMESTAMP 型フィールドになり、そのパターンはタイムゾーン America/Los_Angelesyyyy-MM-dd HH:mm:ss.SSSSSS になります。

DBCS フィールドのサポート

DBCS フィールドを使用する場合は、次のことを確認します。

  • PIC G または Pic N DBCS フィールドを使用する場合は、gsutil cp コマンドまたは bq export コマンドを使用するときに、encoding オプションまたは ENCODING 環境変数で、次の有効なマルチバイト文字セット(MBCS)エンコードのいずれかを指定する必要があります。
    • x-IBM930
    • x-IBM933
    • x-IBM935
    • x-IBM937
    • x-IBM939
    • x-IBM942
    • x-IBM942C
    • x-IBM943
    • x-IBM943C
    • x-IBM949
    • x-IBM949C
    • x-IBM950
    • x-IBM964
    • x-IBM970
    • x-IBM1364
  • コピーブック フィールドに DBCS バイトのみが含まれ、これらのバイトがシフトアウト(0x0E)とシフトイン(0x0F)で囲まれていない場合は、これらのバイトが DBCS バイトとしてデコードされるように、フィールド名に接尾辞 _DBCS を追加する必要があります。

たとえば、コピーブック フィールド 03 FLD01 PIC N USAGE DISPLAY-1 に対応するデータに、0x0E0x0F で囲まれていない、エンコード x-IBM930 のバイト 0x430xC5 が含まれている場合、DBCS データを正しくデコードするために、コピーブック フィールドを 03 FLD01-DBCS PIC N USAGE DISPLAY-1 に名前変更する必要があります。

可変長の文字列のサポート

ネイティブ コピーブック パーサーは、次の struct フィールドをサポートしています。

  • 10 var
  • 15 var-LEN PIC 9(4) USAGE COMP
  • 15 var-TEXT PIC X(n)

struct フィールドの最初のフィールドは、2 番目のフィールド(文字列フィールド)の長さです。次の図に示すように、レコード長に基づいて、レコードの末尾にパディングが必要になる場合があります。

可変長文字列に追加されたパディング。
図 1。可変長の文字列に追加されたパディング。

Mainframe Connector は、BigQuery にデータを保存する前に、変数名から接尾辞を削除します。この例では、変数名は var になります。

struct フィールドを使用するには、環境変数 BQSH_FEATURE_VARIABLE_LENGTH_ENABLEDyes または true に設定します。

struct フィールドを使用する場合は、次のことを確認してください。

  • struct の最初のパラメータの接尾辞は -LEN です。別の接尾辞を使用する場合は、環境変数 BQSH_FEATURE_VARIABLE_LENGTH_LEN_SUFFIX を、使用する接尾辞に設定する必要があります。
  • struct の 2 番目のパラメータの接尾辞は -TEXT です。別の接尾辞を使用する場合は、環境変数 BQSH_FEATURE_VARIABLE_LENGTH_LEN_SUFFIX を、使用する接尾辞に設定する必要があります。

サポートされていないフィールドと構文

以降のセクションでは、サポートされていないフィールドと構文について説明します。

COBOL 構文

COBOL 構文はサポートされていません。これらの構文をコピーブックで使用すると、Mainframe Connector でエラーが表示されます。

  • dataAlignedClause
  • dataBlankWhenZeroClause
  • dataCommonOwnLocalClause
  • dataIntegerStringClause
  • dataJustifiedClause
  • dataOccursClause
  • dataReceivedByClause
  • dataRecordAreaClause
  • dataRenamesClause
  • dataSignClause
  • dataSynchronizedClause
  • dataThreadLocalClause
  • dataTypeClause
  • dataTypeDefClause
  • dataUsingClause

データ型

COMP-1 や COMP-2 などの COBOL データ型がサポートされています。

レガシー コピーブック パーサー

レガシー コピーブック パーサーは、非 COBOL 機能をサポートする古いバージョンのパーサーです。DSL ベースのコピーブックを使用している場合は、ネイティブ コピーブック パーサーによりエラーが発生する可能性があるため、レガシー パーサーの方が適している可能性があります。

コピーブック DD を使用するには、次の制限があります。

  • レベル 66(ALIAS)または 77(STANDALONE)はサポートされていません。
  • REDEFINES はサポートされていません。
  • コメント行はサポートされていません。
  • 名前が DATE または DT で終わる長さ 10 のフィールドは日付です。これらのフィールドではデコードが異なります。
  • 次の COMP フィールドのみを使用します。ALIGN と OCCURS はサポートされていません。
    • COMP
    • COMP4
    • BINARY
    • COMP3
    • PACKED-DECIMAL
  • PICTURE フィールドのみを使用します。フィールド名の直後に、同じ行の PICTURE フィールドを定義します。
  • すべてのフィールドを両端揃えにし、レベルを 1 つ使用する必要があります。コメントはサポートされていません。
  • 1 ~ 6 列目は常に空白にします。