您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

前缀字段和可变长度

SAP IQ 支持从 ASCII 和二进制数据装载,并且支持固定长度格式和可变长度格式。要处理所有这些格式,您可以在 LOAD TABLE 语句中提供 以便通知 SAP IQ 会从源文件中的每个“列”或字段获得何种数据。使用 可以定义下列格式:

  • 具有固定字节长度的 ASCII。 值为表示每条记录中输入字段的固定宽度的整数(单位为字节)。

  • 使用 PREFIX 子句的二进制或非二进制字段包含以下两部分: 部分说明前缀部分始终为二进制值。关联数据部分如果使用: 不含 BINARY 的 PREFIX 子句 - 一种字符格式(ASCII 数据)包含 BINARY 的 PREFIX 子句 - 一种二进制格式,且只能为 varchar 或 varbinary 列指定。执行二进制数据的装载时,关联数据部分的长度取决于是否使用 PREFIX 子句指定 VARYING 选项: 包含 VARYING 的 PREFIX BINARY – 关联数据部分的长度是可变的,且与实际数据长度相同。 不含 VARYING 的 PREFIX BINARY – 关联数据部分的长度是固定的,且长度为 varchar/varbinary 列的声明长度。例如,如果该列是 varchar (10),则关联数据部分的长度为 10 个字节。前缀部分表示字段中数据的实际长度,即使该长度短于文件中的字段 - 在这种情况下,实际数据之后的剩余数据将被忽略,且不会插入到表中的列。 如果计划对二进制模式选项生成的文件的 varchar 或 varbinary 列使用 PREFIX BINARY 进行提取,那么请使用 TEMP_EXTRACT_LENGTH_PREFIX 选项进行提取以指定前缀部分的长度,并使用 TEMP_EXTRACT_VARYING 提取长度为实际数据可变长度(而非 varchar / varbinary 的声明长度)的关联数据部分。如果指定 TEMP_EXTRACT_VARYING,则无需在提取出的文件中进行尾随填充即可提取 varchar 或 varbinary 列。如果使用 PREFIX BINARY,那么在将值插入到列当中时,不会从相应值中去除 varchar 列的尾随空白(以及 varbinary 列的尾随零)。

  • 不含 BINARY 的 PREFIX 子句 - 一种字符格式(ASCII 数据)

  • 包含 BINARY 的 PREFIX 子句 - 一种二进制格式,且只能为 varchar 或 varbinary 列指定。

  • 包含 VARYING 的 PREFIX BINARY – 关联数据部分的长度是可变的,且与实际数据长度相同。

  • 不含 VARYING 的 PREFIX BINARY – 关联数据部分的长度是固定的,且长度为 varchar/varbinary 列的声明长度。例如,如果该列是 varchar (10),则关联数据部分的长度为 10 个字节。前缀部分表示字段中数据的实际长度,即使该长度短于文件中的字段 - 在这种情况下,实际数据之后的剩余数据将被忽略,且不会插入到表中的列。

    TEMP_EXTRACT_LENGTH_PREFIX 选项为数据提取功能生成的导出文件中的 varchar 或 varbinary 列指定特定长度(字节)的前缀字段。此选项允许您使用 LOAD TABLE 语句中的 BINARY PREFIX 为 varchar 或 varbinary 列进行二进制数据装载。

    如果没有指定 TEMP_EXTRACT_LENGTH_PREFIX,或指定的值为 0(缺省值),则数据提取功能不会生成前缀长度字段。

    如果为 TEMP_EXTRACT_LENGTH_PREFIX 指定任意其它有效值,则数据提取功能会为具备实际数据长度的前缀字段使用该指定的长度值(字节),同时将其置于 varchar 或 varbinary 列的实际数据之前,其中还包括列中尾随空格和尾随零的长度。但是如果未设置 TEMP_EXTRACT_VARYING 选项,那么在提取出的文件中,实际列数据的总长度为使用固定长度格式的声明长度。例如,数据提取功能始终为每个 varchar(10) 列生成 10 个字节,因此需要为文件格式设置固定的长度。

    TEMP_EXTRACT_VARYING 允许您仅提取 varchar 或 varbinary 列的实际数据,而无需进行尾随填充。这使得您可以在二进制数据装载过程中在 LOAD TABLE 语句中对 varchar 或 varbinary 列使用 BINARY PREFIX VARYING。您需要结合使用 TEMP_EXTRACT_VARYING 和 TEMP_EXTRACT_LENGTH_PREFIX。

    您只能在二进制模式提取中对 varchar 或 varbinary 列使用 TEMP_EXTRACT_VARYING。

    如果将 TEMP_EXTRACT_VARYING 设置为 ON,那么在提取出的文件中,数据字段将变为可变长度(具有前缀字段)。数据字段在提取出文件中仅占据数据长度,而非 varchar 或 varbinary 列的声明长度,因此无需进行尾随填充。

    结合 TEMP_EXTRACT_LENGTH_PREFIX 使用此选项以表示提取出的文件中的数据长度;二进制模式提取中不存在列分隔符。