DatabaseParameterProvider Parameter Provider
描述
从数据库表中获取参数
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| 数据库类型 | Generic |
| 用于生成特定于服务或供应商的语句的数据库类型。通用类型支持大多数情况,但选择特定类型可以启用优化处理或额外功能。 |
| Database Dialect Service | | 控制器服务 API:DatabaseDialectServicecn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 数据库方言服务,用于生成特定于特定服务或供应商的语句。 |
| 数据库连接池服务 | | 控制器服务 API:DBCPServicecn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 用于获取数据库连接的Controller Service。 |
| 参数分组策略 | grouping-by-column |
| 用于对参数进行分组的策略。 |
| 表名 | | 包含参数的数据库表的名称。 | |
| 表名 | | 包含参数的数据库表名称的逗号分隔列表。 | |
| 参数名称列 | | 包含参数名称的列的名称。 | |
| 参数值列 | | 包含参数值的列的名称。 | |
| 参数组名称列 | | 包含参数应映射到的参数组名称的列的名称。 | |
| SQL WHERE 子句 | | 可选的 SQL 查询 'WHERE' 子句,用于过滤所有结果。不应包含 'WHERE' 关键字。 |
状态管理
该组件不存储状态。
受限 (Restricted)
该组件不受限。
详细说明
DatabaseParameterProvider
从数据库提供参数
DatabaseParameterProvider 的核心是把数据库行映射为参数,由 Parameter Name Column 和 Parameter Value Column 指定。还需要确定参数组(Parameter Group)的名称,可以通过 Parameter Grouping Strategy 以不同方式指定。
在讨论具体配置之前,请注意:在某些数据库中,'PARAMETER'、'PARAMETERS'、'GROUP' 甚至 'VALUE' 都是保留字。如果所选的列名在你使用的数据库中是保留字,请按照数据库文档对其进行加引号处理。
另外还应注意,表名和列名要使用你的数据库所偏好大小写形式。例如,Postgres 偏好小写的表名和列名, 而 Oracle 偏好首字母大写的形式。选择合适的大小写可以避免在配置 DatabaseParameterProvider 时 出现意外问题。
默认配置采用完全的基于列的方式,参数组名也由同一张表中的列指定。使用这种配置的表示例如下:
PARAMETER_CONTEXTS
| PARAMETER_NAME | PARAMETER_VALUE | PARAMETER_GROUP |
|---|---|---|
| param.foo | value-foo | group_1 |
| param.bar | value-bar | group_1 |
| param.one | value-one | group_2 |
| param.two | value-two | group_2 |
表 1:Grouping Strategy = Column 时的数据库表示例
要使用该表中的数据,请设置以下属性:
- Parameter Grouping Strategy - Column
- Table Name - PARAMETER_CONTEXTS
- Parameter Name Column - PARAMETER_NAME
- Parameter Value Column - PARAMETER_VALUE
- Parameter Group Name Column - PARAMETER_GROUP
获取完成后,本示例中的参数如下:
参数组 group_1:
- param.foo - value-foo
- param.bar - value-bar
参数组 group_2:
- param.one - value-one
- param.two - value-two
分组策略(Grouping Strategy)
默认的分组策略是按列(Column),它允许在 Parameter Group Column 中显式指定参数组名。注意, 如果该列的值为 NULL,会抛出异常。
另一种分组策略是按表(Table),它把每张表映射为一个参数组,并将参数组名设为表名。使用这种 分组策略时不会用到 Parameter Group Column。使用此策略的配置示例如下:
- Parameter Grouping Strategy - Table
- Table Names - KAFKA, S3
- Parameter Name Column - PARAMETER_NAME
- Parameter Value Column - PARAMETER_VALUE
可以配合该策略使用的表示例:
KAFKA
| PARAMETER_NAME | PARAMETER_VALUE |
|---|---|
| brokers | http://localhost:9092 |
| topic | my-topic |
| password | my-password |
表 2:Grouping Strategy = Table 时的 'KAFKA' 数据库表示例
S3
| PARAMETER_NAME | PARAMETER_VALUE |
|---|---|
| bucket | my-bucket |
| secret.access.key | my-key |
表 3:Grouping Strategy = Table 时的 'S3' 数据库表示例
获取完成后,本示例中的参数如下:
参数组 KAFKA:
- brokers - http://localhost:9092
- topic - my-topic
- password - my-password
参数组 S3:
- bucket - my-bucket
- secret.access.key - my-key
过滤行
如果只需要把表中的部分行作为参数引入,可以使用 'SQL WHERE clause' 属性。示例如下:
- Parameter Grouping Strategy - Table
- Table Names - KAFKA, S3
- Parameter Name Column - PARAMETER_NAME
- Parameter Value Column - PARAMETER_VALUE
- SQL WHERE clause - OTHER_COLUMN = 'my-parameters'
这里假设 KAFKA 和 S3 两张表中都有另一个列 'OTHER_COLUMN'。那么只有 'OTHER_COLUMN' 值为 'my-parameters' 的行才会从这些表中被获取。