QueryDatabaseTable
描述:
生成SQL Select查询语句或使用提供的语句,并执行后获得所有数据行。 查询结果被转换为Avro格式输出。很多参数支持表达式语言,但是该组件不允许有输入连接。所以参数仅支持变量表达式。 如果想要通过输入数据流内容来执行查询,可使用GenerateTableFetch或ExecuteSQL组件。 该组件支持任意大的查询结果。该组件也可设置时间触发或CRON表达式来调度执行。该组件应该只运行在主节点上。数据流属性'querydbtable.row.count'表示多少数据行被查询出来。
标签:
sql, select, jdbc, query, database, 数据库, 查询
参数:
如下列表中,必填参数则标识为加粗. 其他未加粗参数,则表示为可选参数。表中同时提到参数默认值设置, 并且 参数还支持 表达式语言.
名字 | 默认值 | 允许值列表 | 描述 |
---|---|---|---|
数据库连接池 | 控制器服务API: DBCPService 实现: DBCPConnectionPoolLookup DBCPConnectionPool | 数据库连接池提供数据库连接 | |
数据库类型 | 通用 | - 通用 - Oracle - Oracle 12+ - MS SQL 2012+ - MS SQL 2008 - MySQL | 被用来生成特殊代码的数据库类型。很多情况下,'通用'类型已经足够了,但是一些数据库(比如Oracle)需要自定义SQL子句 |
表名 | 数据库表名。当自定义查询语句时,该参数被用做查询的别名,并作为一个属性在数据流中输出 支持表达式语言 (仅支持变量) | ||
返回字段 | 查询语句中的字段列表且由英文逗号分隔。 如果是特殊的字段名(比如需要转义),则每个字段都应该采用相同的处理。如果该参数没有设置字段列表,表的所有字段将返回。注意:提供表的一系列字段名有助于后续对数据的增量操作。 支持表达式语言 (仅支持变量) | ||
额外的WHERE子句 | 当构造SQL查询时,可附加自定义的WHERE子句 支持表达式语言 (仅支持变量) | ||
自定义查询 | 使用自定义的SQL查询来获取结果,该查询将被包装成子查询,而不是从其他属性中构建SQL查询,并且该查询不能包含ORDER BY。 支持表达式语言 (仅支持变量) | ||
最大值字段 | 由英文逗号分隔的字段列表。组件用于追踪组件运行时所返回每列字段的最大值。使用多个字段,通过控制字段的先后顺序,并且期望每个列的值增加得比前一列的值慢得多。因此,使用多个列意味着列的层次结构,通常用于对表进行分区。该组件可用于仅读取后续读取添加或更新的数据。需要注意的是一些JDBC类型,比如bit或boolean不建议作为最大值参数,并可能导致错误的处理。 如果不提供任何字段,表中的所有行,将予以考虑,这可能会影响性能。注意:通过提供表的最大值字段对于增量读取数据非常有用。 支持表达式语言 (仅支持变量) | ||
执行等待时间 | 0 seconds | 允许执行SQL语句的最大等待时间,0表示无限制,且小于1秒被视为等同0秒。 支持表达式语言 (仅支持变量) | |
读取大小 | 0 | 每次从数据库获取结果集的数据行数。这取决于数据库驱动是否支持,结果也可能是不准确的。如果设置为0,表示忽略该设置 支持表达式语言 (仅支持变量) | |
每个数据流的最大行数 | 0 | 针对每个输出数据流所要包含的结果最大行数。可通过该参数指定将非常大的结果集拆分成多个数据流输出。如果设置为0,则所有结果都将输出到单个数据流中。 支持表达式语言 (仅支持变量) | |
分批数量 | 0 | 在提交处理会话之前,输出数据流队列的大小。当设置为0时,当所有结果都被处理且输出数据流准备传输数据给下游连线时,提交处理会话。对于大量的结果,可能导致大量数据流被传输。 如果参数被设置,当指定数量的数据流准备好传输后,则会话将被提交并被释放到下游连线。注意:当该参数被设置时,'maxvalue.*' 和 'fragment.count' 属性不会传输到数据流中。 支持表达式语言 (仅支持变量) | |
最大切片数 | 0 | 最大切片数. 如果设置为0,则返回所有的切片。当组件处理大数据表时这能很好的防止OutOfMemoryError问题。注意:设置该参数可导致数据丢失,且输入结果还是无序的,还可能切片的边界导致数据不包含到结果集中。 支持表达式语言 (仅支持变量) | |
规范化表/列名 | 否 | - 是 - 否 | 是否改变一些不兼容avro格式的特殊字符,为了适应Avro格式,比如冒号、句号会被改成下划线。 |
使用Avro数据类型 | 否 | - 是 - 否 | 是否使用Avro逻辑的数据类型,比如 时间,数字,日期等格式,如果否,那么将以字符串代替原有的数据类型。如果是,逻辑数据类型将基于如下规则:'DECIMAL/NUMBER' 对应 'decimal','DATE' 对应 'date-millis','TIME' 对应 'time-millis', 'TIMESTAMP' 对应 'timestamp-millis'。 |
小数精度 | 10 | 当类型是'DECIMAL/NUMBER' 对应 'decimal'的默认小数精度 支持表达式语言 (仅支持变量) | |
小数四舍五入位数 | 0 | 当类型是'DECIMAL/NUMBER' 对应 'decimal'的四舍五入的小数位数 支持表达式语言 (仅支持变量) |
动态参数:
名字 | 值 | 描述 |
---|---|---|
initial.maxvalue.<max_value_column> | Initial maximum value for the specified column | 为<最大值字段>指定初始化最大值。属性将被添加为格式: initial.maxvalue.{max_value_column} . 此值仅在第一次访问表时使用。支持表达式语言 (仅支持变量) |
连线:
名字 | 描述 |
---|---|
success | 成功地从SQL查询语句结果集中创建数据流输出到此连线 |
读取属性:
未提供。
写入属性:
名字 | 描述 |
---|---|
tablename | 用于查询的表名 |
querydbtable.row.count | 查询结果行数 |
fragment.identifier | 如果设置<每个数据流的最大行数>,所有从相同结果集产生的数据流具有相同的'fragment.identifier'属性值。可用于关联查询结果。 |
fragment.count | 如果设置<每个数据流的最大行数>,从单个结果集中派生出来的数据流数。 可结合'fragment.identifier'属性来获知多少个数据流属于相同的结果集。如果设置<批量输出大小>,则该属性将不会被设置。 |
fragment.index | 如果设置<每个数据流的最大行数>,用于标识数据流在来自于相同结果集的输出数据流列表中的先后顺序。 可结合'fragment.identifier'属性来获知数据流属于相同的结果集且处于序列中的什么位置。 |
maxvalue.* | 每个属性包含了来自于<最大值字段>对应的字段值。 属性前缀为字段名。 如果设置<批量输出大小>,则该属性将不会被设置。 |
状态管理:
范围 | 描述 |
---|---|
CLUSTER | 针对指定表执行查询后,指定字段的最大值将被用于将来的查询执行。基于此,组件可读取的记录是大于最大值的设置。这可用于增量读取,新增加的数据行。为了清除最大值,可通过状态管理中清除组件的状态。 |
限制:
该组件没有限制
输入流要求:
组件禁止提供输入流。
系统资源考量:
未提供。