SQL Parser

支持的管道类型:

  •  Data Collector

SQL Parser解析在字符串字段中的SQL查询。解析查询时,处理器根据SQL查询中定义的字段生成字段,并在记录头属性中指定CRUD操作、表和模式信息。

将Oracle CDC Client源配置为跳过解析时,使用处理器解析写入字段的SQL查询。这样可以避免重做日志在处理之前切换的可能性。有关更多信息,请参见使用多条管道。

配置SQL解析器时,您将定义包含要解析的SQL语句的字段,以及将要添加来自SQL查询的字段的目标字段。如果记录中不存在来自SQL查询的字段,则会创建它们。如果它们已经存在,则将其覆盖。

您可以指定处理器连接到数据库以解析未知的字段类型。

如果数据库区分大小写,则可以将处理器配置为解释区分大小写的模式、表和列名。

处理器还在记录头属性中包含CDC和CRUD信息,因此启用CRUD的目标端可以轻松处理记录。

使用多条管道

当数据库包含非常宽的表时,由于Oracle CDC Client现在需要处理大量信息,因此它需要更多时间来读取变更数据和解析SQL查询。请注意,读取变更数据受I/O约束,而解析SQL查询则受CPU约束。

重做日志可以非常频繁地切换。如果读取变更数据和解析SQL查询所花费的时间比重做日志切换所花费的时间长,则数据将丢失。

一种解决方案是使用SQL Parser处理器和多个管道。第一个管道包含源端和中间端点,例如本地文件系统或Kafka。通过清除“Parse SQL Query属性,将源端配置为不解析SQL查询。第二个管道将记录从中间端点传递到SQL Parser,以解析SQL查询并更新字段。

使用多个管道的原因是默认情况下管道是同步的。如果Oracle CDC Client源和SQL Parser处理器在同一管道中,则该源仅在管道完成对前一批的处理之后才读取数据。这会导致与在管道完成数据处理之前可能切换重做日志的相同的问题。

使用中间端点会使管道异步。意思是,一个管道可以独立于另一个管道以处理批次。使用这种方法,源端可以读取重做日志,而无需等待SQL解析器完成,因此不会丢失任何数据。

您要创建两个管道,并使用SQL Parser而不是Oracle CDC Client处理SQL查询。第一个管道包含Oracle CDC Client和一个中间端点,例如Kafka。例如:

第二个管道从中间端点读取记录,并将记录传递到SQL Parser处理器。处理器解析位于/sql字段中的SQL查询,然后JDBC处理器将数据写入最终目标端。

解析模式

对于INSERT操作,您指定将新字段添加为子字段的位置。使用“Resolve Schema from DB”来解析所有字段类型。如果未选择此选项,则所有字段都将以字符串形式返回,形式与它们在SQL语句中的形式相同。

注意:当读取表的第一条记录时,才发生字段类型解析,然后仅在读取表中先前未遇到的字段时才发生。

选择此选项时,必须为数据库安装JDBC驱动程序并配置JDBC连接属性。有关安装其他驱动程序的更多信息,请参见安装外部库。

注意: StreamSets已将Oracle 11g和Oracle 11.2.0 JDBC驱动程序对SQL Parser处理器进行了测试。

当数据库包含区分大小写的模式,表和列名称时,请使用区分大小写的名称。如果未选择此选项,则SQL Parser处理器将使用所有大写字母提交名称。

不支持的数据类型

您可以配置处理器如何处理包含不受支持的数据类型的记录。处理器可以执行以下操作:

  • 将记录传递给管道,而不包含不支持的数据类型。
  • 将记录传递给错误,而不包含不支持的数据类型。
  • 丢弃记录。

SQL Parser不支持Oracle CDC Client同样不支持的Oracle数据类型。有关不支持的数据类型的完整列表,请参见《Oracle CDC客户端不支持的数据类型》。

生成的记录

SQL Parser解析字段中的SQL查询并根据查询创建字段。处理器还在sdc.operation.type记录头属性中包含CRUD操作类型。这使启用CRUD的目标能够确定在处理记录时要使用的操作类型。

在配置SQL Parser时,您可以指定包含SQL查询的字段。例如,如果SQL Parser处理位于/sql字段中的以下SQL查询语句:

INSERT INTO mc("Part", "Cost") VALUES('levers', 250)

它将以下字段写入记录:

Part Cost
levers 250

如果Part和Cost字段已经存在,则处理器将覆盖这些字段。如果它们不存在,则处理器创建它们。

SQL Parser支持以下操作:

  • INSERT
  • UPDATE
  • DELETE

CRUD操作头属性

与Oracle CDC Client一样,SQL Parser在以下两个记录头属性中指定操作类型:

sdc.operation.type
SQL Parser会评估与其处理的每个条目关联的Oplog操作类型,并在适当时将操作类型写入sdc.operation.type记录头属性。
oracle.cdc.operation
SQL Parser还将Oplog CRUD操作类型写入oracle.cdc.operation记录标头属性。
启用CRUD的目标端在检查sdc.operation.type属性后,会为该操作类型的属性检查此属性。

有关更多信息,请参见Oracle CDC Client CRUD操作头属性。

CDC头属性

如果以下CDC头属性已存在,则SQL Parser处理器将保留它们;如果不存在,则会创建它们:

  • TABLE_NAME
  • sql.table
  • TABLE_SCHEM

SQL Parser将覆盖以下头属性:

  • jdbc.<columnName>.precision
  • jdbc.<columnName>.scale

这些是表的列名称,而不是字段名称。例如,如果列名称为 part,则头为jdbc.part.precision和jdbc.part.scale。

配置SQL Parser处理器

配置SQL Parser以解析SQL查询。
  1. 在“Properties”面板的“General选项卡上,配置以下属性:
    一般属性 描述
    Name 阶段名。
    Description 可选说明。
    Required Fields 必须包含用于将记录传递到阶段的记录的数据的字段。

    提示:您可能包括阶段使用的字段。

    根据为管道配置的错误处理,处理不包括所有必填字段的记录。

    Preconditions 必须评估为TRUE的条件才能使记录进入处理阶段。单击 添加以创建其他前提条件。

    根据为该阶段配置的错误处理,处理不满足所有前提条件的记录。

    On Record Error 该阶段的错误记录处理:

    • Discard-放弃记录。
    • To Error-将记录发送到管道以进行错误处理。
    • Stop Pipeline-停止管道。对集群管道无效。
  2. 在“Parse选项卡上,配置以下属性:
    SQL Parse属性 描述
    SQL Field 包含SQL查询的字段的名称。
    Target Field 将放置SQL查询生成字段的字段。

    您可以指定一个现有字段或一个新字段。如果该字段存在,则将由于SQL查询而产生的任何新字段添加为子字段并覆盖现有字段。如果该字段不存在,则SQL Parser将创建该字段。

    Resolve Schema from DB 查询数据库以解析模式并将字段解析为正确的数据类型。

    如果未选择此选项,则所有字段都将以字符串形式返回,形式与它们在SQL语句中的形式相同。

    选择此选项时,必须为数据库安装JDBC驱动程序并配置JDBC连接属性。有关安装其他驱动程序的更多信息,请参见安装外部库。

    Unsupported Field Type 确定处理器在记录中遇到不受支持的数据类型时的行为:

    • Send Record to Pipeline-处理器将忽略不支持的数据类型,并将仅具有支持的数据类型的记录传递到管道。
    • Send Record to Error-处理器根据为该阶段配置的错误记录处理来处理记录。错误记录仅包含支持的数据类型。
    • Discard Record-处理器丢弃记录。

    SQL Parser不支持Oracle CDC Client同样不支持的Oracle数据类型。有关不支持的数据类型的列表,请参见不支持的数据类型。

    Add Unsupported Fields to Records

    在记录中包括具有不受支持的数据类型的字段。包括字段名称和不支持的字段的未解析的字符串值。

    Case Sensitive Names 启用使用区分大小写的模式、表和列名称。未启用时,处理器会将所有名称更改为大写。
    Date Format 传入SQL中日期字段的格式。
    Timestamp With Local Timezone Format 带有本地时区的时间戳类型的字段的格式。
    Zoned DateTime Format

    日期,日期时间或时间数据的格式(如果使用分区的日期时间格式)。

    例如,您可以将yyyy-MM-dd’T’HH:mm:ssX [VV]用于具有UTC偏移量和时区的日期时间值。如果datetime值不包含UTC偏移量,则阶段将使用指定时间标记的最小偏移量。

    DB Time Zone 数据库的时区。指定数据库何时在不同于Data Collector的时区中运行。
  3. 在“JDBC”选项卡上,配置以下属性。仅当选择“Resolve Schema from DB”时,才配置此选项卡。
    JDBC属性 描述
    JDBC Connection String 用于连接数据库的连接字符串。

    某些数据库(例如PostgreSQL)需要连接字符串中的模式。使用数据库所需的连接字符串格式。

    Use Credentials 在“Credentials”选项卡上启用输入凭据。在JDBC连接字符串中不包括凭据时使用。
    dditional JDBC Configuration Properties 要使用的其他JDBC配置属性。要添加属性,请单击“添加”并定义JDBC属性名称和值。

    使用JDBC期望的属性名称和值。

  4. 要与JDBC连接字符串分开输入JDBC凭据,请在“Credentials选项卡上配置以下属性:
    凭据属性 描述
    Username JDBC连接的用户名。
    Password JDBC帐户的密码。

    提示: 要保护敏感信息(例如用户名和密码),可以使用运行时资源或凭据存储。