大型主机连接器支持两个版本的文案簿解析器:
您可以根据自己的文案指定要使用的解析器。有关 请参阅 定义文案手册解析器。
原生文案解析器
原生副本簿解析器是解析器的最新版本,默认情况下使用此解析器。原生副本簿解析器实现了基于 ANTLR4 的解析器,并支持 COBOL 副本簿。
本部分列出了原生副本簿解析器支持的数据类型执行的预处理任务,以及其使用限制。
预处理
在解析副本簿之前,原生副本簿解析器会预处理数据并执行以下任务:
- 移除注释行。
- 解决了行接续问题。
- 清空行号区域和第 73 列区域。
- 保留特定于预处理器的语句,如
EJECT
、SPACE
和TITLE
。系统会解析这些字段,但会忽略它们。原生副本簿解析器不支持包含可供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
只能设置为NATIONAL
或DBCS
。 - 支持长度可变的字符串。
- 支持 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-converter
和timestamp-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-yyyy
或MM/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 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 字节,但这些字节不包含时
周围有 shift-out (0x0E) 和 shift-in (0x0F),就必须添加后缀
_DBCS
添加到字段名称中,以确保将这些字节解码为 DBCS 字节。
例如,如果与复制簿字段 03 FLD01 PIC N USAGE DISPLAY-1
对应的数据包含编码为 x-IBM930 且未被 0x0E
和 0x0F
括起来的字节 0x43
和 0xC5
,则必须将复制簿字段名称重命名为 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
字段中的第一个字段是第二个字段(字符串字段)的长度。您可能需要在
记录长度,如下图所示。
Mainframe Connector 会先从变量名称中移除后缀,然后再将数据保存到 BigQuery 中。在此示例中,变量名称将为 var
。
如需使用 struct
字段,请设置环境变量
将 BQSH_FEATURE_VARIABLE_LENGTH_ENABLED
更改为 yes
或
true
。
使用 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 列始终包含空白。