Flink JDBCInputFormat并行度

先贴出代码

public static void main(String[] args) {
        //System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true");

        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        int fetchSize = 7;

        NumericBetweenParametersProvider numericBetweenParametersProvider = new NumericBetweenParametersProvider(fetchSize, 11630494, 11630568);

        String sourceDriverName="oracle.jdbc.driver.OracleDriver";
        String sourceDbUrl = "jdbc:oracle:thin:xxxxx:1521:pacs";
        String sourceUserName = "xxxx_test";
        String sourcePassword = "123456";

        RowTypeInfo rowTypeInfo = new RowTypeInfo(
                BasicTypeInfo.BIG_DEC_TYPE_INFO,
                BasicTypeInfo.STRING_TYPE_INFO
        );

        JDBCInputFormat.JDBCInputFormatBuilder inputBuilder = JDBCInputFormat.buildJDBCInputFormat().setDrivername(sourceDriverName)
                .setDBUrl(sourceDbUrl).setUsername(sourceUserName).setPassword(sourcePassword)
                .setQuery("SELECT ID,ITEM_TYPE FROM OMS_PAYMENT_HISTORY WHERE SOURCE_CODE='OFA' AND ID>=? AND ID<= ?")
                .setFetchSize(fetchSize)
                .setRowTypeInfo(rowTypeInfo).setParametersProvider(numericBetweenParametersProvider);

        DataSet<Row> source = env.createInput(inputBuilder.finish()).setParallelism(numericBetweenParametersProvider.getParameterValues().length);

        try {
            source.print();
            //env.execute("aaaa");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

设置并行度的关键是

NumericBetweenParametersProvider numericBetweenParametersProvider = new NumericBetweenParametersProvider(7, 11630494, 11630568);

3个参数的意义是 fetchSize: 也就是查询的步长 id>=0 <=9 则fetchSize就是10;  11630494是你这个sql的最小id 11630568是最大id;

sql中的 AND ID>=? AND ID<= ?  是必须的否则无法做参数的拼接  

需要注意如果最小id与最大id的间隔比较大,同时fetchSize比较小时产生的并行度会很大,要注意

如果不设置setParametersProvider,只设置了并行度,那么最终也只会有一个线程来执行查询

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值