账簿解析器参考文档

大型主机连接器支持两个版本的文案簿解析器:

  • 原生文案解析器:原生文案解析器 实现了基于 ANTLR4 的解析器,支持 COBOL 文案,并且是 解析器的推荐版本。
  • 旧版副本簿解析器:旧版副本簿解析器是解析器的旧版本,仅支持极少数副本簿格式。

您可以根据自己的文案指定要使用的解析器。有关 请参阅 定义文案手册解析器

原生文案解析器

原生副本簿解析器是解析器的最新版本,默认情况下使用此解析器。原生副本簿解析器实现了基于 ANTLR4 的解析器,并支持 COBOL 副本簿。

本部分列出了原生副本簿解析器支持的数据类型执行的预处理任务,以及其使用限制。

预处理

在解析副本簿之前,原生副本簿解析器会预处理数据并执行以下任务:

  • 移除注释行。
  • 解决了行接续问题。
  • 清空行号区域和第 73 列区域。
  • 保留特定于预处理器的语句,如 EJECTSPACETITLE。系统会解析这些字段,但会忽略它们。原生副本簿解析器不支持包含可供 COPY REPLACING 使用的预处理器参数的副本簿。在这些文案中 用英文冒号 (:) 括起来。

支持的数据类型和限制

以下是 Copybook 解析器及其使用限制:

  • 不支持级别 66 (ALIAS) 或 77 (STANDALONE)。
  • 只能使用 PICTURE 字段。支持以下 PICTURE 字段:
    • Pic A、Pic B、Pic G(DBCS)、Pic N(国家/地区或 DBCS)、Pic U(UTF8)、Pic X 和带时区的十进制(最大精度 38,最大小数位数 38)
  • 支持 IBM 十六进制浮点数 (HFP)。
  • 不支持 REDEFINE。
  • 请仅使用以下 COMP 字段。不支持 ALIGN 和 OCCURS。
    • COMP
    • COMP4
    • BINARY
    • COMP3
    • PACKED-DECIMAL
  • 支持 DATE 和 TIMESTAMP
  • 支持 Null 指示器
  • 双字节字符集 (DBCS) 字段图片 G 和图片 N 是 支持,因此应使用 Pic T,而不是现已弃用的 Pic T。如需将 Pic N 字段用作 DBCS 而无需指定 USAGE DISPLAY-1,您必须将 NSYMBOL 环境变量设置为 DBCS。默认情况下,NSYMBOL 设置为 NATIONAL,用于将 USAGE NATIONAL 设置为图片 N 字段 它没有 USAGE 子句。请注意,NSYMBOL 只能设置为 NATIONALDBCS
  • 支持长度可变的字符串
  • 支持 SIGN 子句
  • 您必须对所有字段进行对齐,并使用单一缩进级别。
  • 支持评论。

支持日期和时间戳字段

Mainframe Connector 支持将日期和时间戳数据移入和移出 BigQuery。为此,您必须定义以 单词 SUFFIX,采用以下格式:

SUFFIX_SUFFIX_STRING="command --format FORMAT --timezone TIMEZONE"

以下列表更详细地介绍了该格式:

  • SUFFIX_SUFFIX_STRING:您可以使用此环境变量来定义日期和时间戳数据。SUFFIX_STRING 与后缀 -SUFFIX_STRING_SUFFIX_STRING,应解读为日期或 时间戳(在复制簿中用作字段名称的后缀时)。确保 SUFFIX_STRING 不包含连字符或下划线。
  • command:定义应用于解析字段的解码器。支持的命令包括 date-convertertimestamp-converter
  • --format:用于定义日期或 时间戳。您最多可以指定五种不同的格式(用英文逗号分隔)。如果有多个格式与给定输入匹配,系统会使用第一个匹配的格式将数据加载到 BigQuery。如果为导出指定了多个格式,则系统仅会使用第一个格式。如需详细了解 格式,请参阅支持的日期和时间戳格式
  • --timezone:类型为 TIMESTAMP 的可选参数。默认情况下,时区为世界协调时间 (UTC)。如需详细了解支持的时区格式,请参阅支持的时区格式
  • --omitsuffix(可选):如果指定此参数,系统会从 BigQuery 中显示的字段名称中移除 -SUFFIX_STRING_SUFFIX_STRING

要为 SUFFIX_SUFFIX_STRING 添加别名,您可以将 环境变量 SUFFIX_SUFFIX_ALIAS=$SUFFIX_SUFFIX_STRING

示例:

  • 如果您将环境变量定义为 SUFFIX_DT8="date-converter --format yyyyMMdd",则后缀为 -DT8_DT8 的字段将是 BigQuery 中的 DATE 类型字段,其模式为 yyyyMMdd
  • 如果您将环境变量定义为 SUFFIX_DT10="date-converter --format MM-dd-yyyy",则后缀为 -DT10_DT10 的字段将是 BigQuery 中的 DATE 类型字段,其模式为 MM-dd-yyyy
  • 如果您将环境变量定义为 SUFFIX_DT="date-converter --format 'MM-dd-yyyy,MM/dd/yyyy'"、 带有后缀-DT_DT的字段将是 DATE 类型字段,其模式将是 MM-dd-yyyyMM/dd/yyyy
  • 如果您将两个环境变量定义为 SUFFIX_TIMESTAMP="timestamp-converter --format yyyy-MM-dd SUFFIX_TIMESTAMP=timestamp-converter --format 'yyyy-MM-dd HH.mm.ss.SSSSSS' --timezone America/New_York"SUFFIX_TS=$SUFFIX_TIMESTAMP,则具有以下后缀之一的字段(-TIMESTAMP_TIMESTAMP-TS_TS)将在 BigQuery 中成为 TIMESTAMP 类型字段,其模式为 yyyy-MM-dd HH:mm:ss.SSSSSS,时区为 America/New_York

支持 null 指示器

从 5.13.0 版开始,大型机连接器支持 null 指示器。如需使用 null 指示器,您必须定义以 SUFFIX 开头的环境变量,格式如下:

SUFFIX_NULL_INDICATOR_NAME="command --null-value NULL_VALUE --not-null-value NOT_NULL_VALUE"

NULL_INDICATOR_NAME 对应后缀 -NULL_INDICATOR_NAME_NULL_INDICATOR_NAME 在 广告文案。

以下列表介绍了可与这些环境变量搭配使用的参数:

  • command:值必须为 null-indicator
  • –null-value:值 null indicator 表示 为 null。--null-value 的值必须为 字符串或十进制数字。
  • –not-null-value:(可选)指定此值时, null indicator 表示引用的字段不为 null。如果未设置此参数,则接受任何非 –value-null 的值。–not-null-value 的值必须是字符串或 十进制数。
  • –keep:(可选)指定此标志后,null-indicator 字段会保留为优化行列式 (ORC) 文件格式的列。修改者 此字段不会以 ORC 格式保存。

如果 null-indicator 没有引用的字段,Mainframe 连接器会显示一条错误消息,并停止处理文件。

示例:

抄本代码段

10 COL1-NID1            PIC S9(4) USAGE COMP.
10 COL1                 PIC S9(6) USAGE COMP.

10 FIELD       PIC        X(10).
10 FIELD-NID2  PIC        X(1).

10 COL2       PIC        X(10).
10 COL2-NULL  PIC        X(1).

环境变量定义

SUFFIX_NID1="null-indicator --null-value -1 --not-null-value 0"
# Copybook fields with NID1 suffix null indicator configuration.
SUFFIX_NID2="null-indicator --null-value '?'"
# Copybook fields with NID2 suffix null indicator configuration.
SUFFIX_NULL="null-indicator --null-value '?' --keep"
# Copybook fields with NULL suffix null indicator configuration.

支持 DBCS 字段

使用 DBCS 字段时,请确保以下几点:

  • 使用 PIC G 或 Pic N DBCS 字段时,如果使用 gsutil cpbq 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 字节,但这些字节不包含时 周围有 shift-out (0x0E) 和 shift-in (0x0F),就必须添加后缀 _DBCS 添加到字段名称中,以确保将这些字节解码为 DBCS 字节。

例如,如果与复制簿字段 03 FLD01 PIC N USAGE DISPLAY-1 对应的数据包含编码为 x-IBM930 且未被 0x0E0x0F 括起来的字节 0x430xC5,则必须将复制簿字段名称重命名为 03 FLD01-DBCS PIC N USAGE DISPLAY-1,才能正确解码 DBCS 数据。

支持可变长度的字符串

原生副本簿解析器支持以下 struct 字段:

  • 10 var
  • 15 var-LEN PIC 9(4) 使用 COMP
  • 15 var-TEXT 图片 X(n)

struct 字段中的第一个字段是第二个字段(字符串字段)的长度。您可能需要在 记录长度,如下图所示。

向可变长度的字符串添加了内边距。
图 1。向可变长度的字符串添加了内边距。

Mainframe Connector 会先从变量名称中移除后缀,然后再将数据保存到 BigQuery 中。在此示例中,变量名称将为 var

如需使用 struct 字段,请设置环境变量 将 BQSH_FEATURE_VARIABLE_LENGTH_ENABLED 更改为 yestrue

使用 struct 字段时,请确保:

  • struct 中第一个参数的后缀为 -LEN。如果您想使用其他后缀,则必须将 将环境变量 BQSH_FEATURE_VARIABLE_LENGTH_LEN_SUFFIX 更改为 您要使用的后缀。
  • struct 中第二个参数的后缀为 -TEXT。如果您想使用其他后缀,必须将环境变量 BQSH_FEATURE_VARIABLE_LENGTH_LEN_SUFFIX 设置为您要使用的后缀。

不受支持的字段和结构

以下部分介绍的是

COBOL 结构

COBOL 结构,尽管这些结构不受支持。如果您使用这些 构造时,大型主机连接器会显示错误。

  • 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)。
  • 不支持 REDEFINE。
  • 不支持评论行。
  • 长度为 10 且名称以 DATE 或 DT 结尾的字段是日期。这些字段的解码方法有所不同。
  • 仅使用以下 COMP 字段。不支持 ALIGN 和 OCCURS。
    • COMP
    • COMP4
    • BINARY
    • COMP3
    • 打包式数字
  • 请仅使用 PICTURE 字段。在同一行中,直接在字段名称后面定义 PICTURE 字段。
  • 您必须验证所有字段的正当理由,并使用单个级别。不支持评论。
  • 确保第 1 到第 6 列始终包含空白。