为flink作业创建可分页的jdbc源代码

irlmq6kh  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(437)

为了处理数据库中的数据,我使用flink。我已经用jdbc创建了输入。

val inputFormat = JDBCInputFormat.buildJDBCInputFormat()
             .setDrivername(driver)
             .setDBUrl(url)
             .setUsername(username)
             .setPassword(password)
             .setQuery("select id, name from users")
             .finish()

env.createInput(inputFormat)

问题是这个输入从表中获取所有数据。因为这个表包含大量的信息,所以我需要一些类似于可分页jdbc源代码的东西。有没有其他的设置我可以用?

kxeu7u2r

kxeu7u2r1#

通过将查询指定为参数化查询并提供要与参数绑定的值,可以将查询拆分为多个独立执行的部分查询。
以下内容摘自 JDBCInputFormat .


* <p>In order to query the JDBC source in parallel, you need to provide a

 * parameterized query template (i.e. a valid {@link PreparedStatement}) and
 * a {@link ParameterValuesProvider} which provides binding values for the
 * query parameters. E.g.:
 *
 * <pre><code>
 *
 * Serializable[][] queryParameters = new String[2][1];
 * queryParameters[0] = new String[]{"Kumar"};
 * queryParameters[1] = new String[]{"Tan Ah Teck"};
 *
 * JDBCInputFormat jdbcInputFormat = JDBCInputFormat.buildJDBCInputFormat()
 *              .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
 *              .setDBUrl("jdbc:derby:memory:ebookshop")
 *              .setQuery("select * from books WHERE author = ?")
 *              .setRowTypeInfo(rowTypeInfo)
 *              .setParametersProvider(new GenericParameterValuesProvider(queryParameters))
 *              .finish();
 * </code></pre>

请注意:
查询的表应该在参数化属性上有一个适当的索引。否则,您将在桌面上进行几次完整扫描,这是没有帮助的。
参数应该只覆盖一次表的所有(必需)数据。否则,可能会丢失某些行或查询某些行两次。

相关问题