| <!DOCTYPE html> |
| <html lang="en" xmlns="http://www.w3.org/1999/html"> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| http://www.apache.org/licenses/LICENSE-2.0 |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <head> |
| <meta charset="utf-8"/> |
| <title>DatabaseParameterProvider</title> |
| <link rel="stylesheet" href="../../../../../css/component-usage.css" type="text/css"/> |
| </head> |
| <body> |
| |
| <h1>Providing Parameters from a Database</h1> |
| |
| <p> |
| The DatabaseParameterProvider at its core maps database rows to Parameters, specified by a |
| Parameter Name Column and Parameter Value Column. The Parameter Group name must also be accounted for, and may |
| be specified in different ways using the Parameter Grouping Strategy. |
| </p> |
| |
| <p> |
| Before discussing the actual configuration, note that in some databases, the words 'PARAMETER', 'PARAMETERS', 'GROUP', |
| and even 'VALUE' are reserved words. If you choose a column name that is a reserved word in the database you are using, |
| make sure to quote it per the database documentation. |
| </p> |
| |
| <p> |
| Also note that you should use the preferred table name and column name case for your database. For example, Postgres |
| prefers lowercase table and column names, while Oracle prefers capitalized ones. Choosing the appropriate case can |
| avoid unexpected issues in configuring your DatabaseParameterProvider. |
| </p> |
| |
| <p> |
| The default configuration uses a fully column-based approach, with the Parameter Group Name |
| also specified by columns in the same table. An example of a table using this configuration would be: |
| </p> |
| <table> |
| <thead> |
| <tr> |
| <th colspan="4" style="text-align: center">PARAMETER_CONTEXTS</th> |
| </tr> |
| <tr> |
| <th>PARAMETER_NAME</th><th>PARAMETER_VALUE</th><th>PARAMETER_GROUP</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>param.foo</td><td>value-foo</td><td>group_1</td> |
| </tr> |
| <tr> |
| <td>param.bar</td><td>value-bar</td><td>group_1</td> |
| </tr> |
| <tr> |
| <td>param.one</td><td>value-one</td><td>group_2</td> |
| </tr> |
| <tr> |
| <td>param.two</td><td>value-two</td><td>group_2</td> |
| </tr> |
| </tbody> |
| <caption>Table 1: Database table example with Grouping Strategy = Column</caption> |
| </table> |
| |
| <p> |
| In order to use the data from this table, set the following Properties: |
| </p> |
| |
| <ul> |
| <li><b>Parameter Grouping Strategy</b> - Column</li> |
| <li><b>Table Name</b> - PARAMETER_CONTEXTS</li> |
| <li><b>Parameter Name Column</b> - PARAMETER_NAME</li> |
| <li><b>Parameter Value Column</b> - PARAMETER_VALUE</li> |
| <li><b>Parameter Group Name Column</b> - PARAMETER_GROUP</li> |
| </ul> |
| |
| <p> |
| Once fetched, the parameters in this example will look like this: |
| </p> |
| |
| <p> |
| Parameter Group <b>group_1</b>: |
| <ul> |
| <li>param.foo - value-foo</li> |
| <li>param.bar - value-bar</li> |
| </ul> |
| </p> |
| |
| <p> |
| Parameter Group <b>group_2</b>: |
| <ul> |
| <li>param.one - value-one</li> |
| <li>param.two - value-two</li> |
| </ul> |
| </p> |
| |
| <h3>Grouping Strategy</h3> |
| |
| <p> |
| The default Grouping Strategy is by Column, which allows you to specify the parameter Group name explicitly in the Parameter Group Column. |
| Note that if the value in this column is NULL, an exception will be thrown. |
| </p> |
| |
| <p> |
| The other Grouping Strategy is by Table, which maps each table to a Parameter Group and sets the Parameter Group Name to the table name. |
| In this Grouping Strategy, the Parameter Group Column is not used. An example configuration using this strategy would be: |
| </p> |
| |
| <ul> |
| <li><b>Parameter Grouping Strategy</b> - Table</li> |
| <li><b>Table Names</b> - KAFKA, S3</li> |
| <li><b>Parameter Name Column</b> - PARAMETER_NAME</li> |
| <li><b>Parameter Value Column</b> - PARAMETER_VALUE</li> |
| </ul> |
| |
| <p> |
| An example of some tables that may be used with this strategy: |
| </p> |
| |
| <table> |
| <thead> |
| <tr> |
| <th colspan="3" style="text-align: center">KAFKA</th> |
| </tr> |
| <tr> |
| <th>PARAMETER_NAME</th><th>PARAMETER_VALUE</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>brokers</td><td>http://localhost:9092</td> |
| </tr> |
| <tr> |
| <td>topic</td><td>my-topic</td> |
| </tr> |
| <tr> |
| <td>password</td><td>my-password</td> |
| </tr> |
| </tbody> |
| <caption>Table 2: 'KAFKA' Database table example with Grouping Strategy = Table</caption> |
| </table> |
| |
| <table> |
| <thead> |
| <tr> |
| <th colspan="3" style="text-align: center">S3</th> |
| </tr> |
| <tr> |
| <th>PARAMETER_NAME</th><th>PARAMETER_VALUE</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>bucket</td><td>my-bucket</td> |
| </tr> |
| <tr> |
| <td>secret.access.key</td><td>my-key</td> |
| </tr> |
| </tbody> |
| <caption>Table 3: 'S3' Database table example with Grouping Strategy = Table</caption> |
| </table> |
| |
| <p> |
| Once fetched, the parameters in this example will look like this: |
| </p> |
| |
| <p> |
| Parameter Group <b>KAFKA</b>: |
| <ul> |
| <li>brokers - http://localhost:9092</li> |
| <li>topic - my-topic</li> |
| <li>password - my-password</li> |
| </ul> |
| </p> |
| |
| <p> |
| Parameter Group <b>S3</b>: |
| <ul> |
| <li>bucket - my-bucket</li> |
| <li>secret.access.key - my-key</li> |
| </ul> |
| </p> |
| |
| <h3>Filtering rows</h3> |
| |
| <p> |
| If you need to include only some rows in a table as parameters, you can use the 'SQL WHERE clause' property. An example of this is as follows: |
| </p> |
| |
| <ul> |
| <li><b>Parameter Grouping Strategy</b> - Table</li> |
| <li><b>Table Names</b> - KAFKA, S3</li> |
| <li><b>Parameter Name Column</b> - PARAMETER_NAME</li> |
| <li><b>Parameter Value Column</b> - PARAMETER_VALUE</li> |
| <li><b>SQL WHERE clause</b> - OTHER_COLUMN = 'my-parameters'</li> |
| </ul> |
| |
| <p> |
| Here we are assuming there is another column, 'OTHER_COLUMN' in both the KAFKA and S3 tables. Only rows whose 'OTHER_COLUMN' value is 'my-parameters' |
| will then be fetched from these tables. |
| </p> |
| |
| </body> |
| </html> |