flink jdbc連接器

  flink提供很多訪問其他數據源的連接器,訪問其他第三方數據源變得簡單高效。下面就是flink提供的一些連接器,使用時只需引入需要的包。

  

在使用flink處理數據後,我們經常會將結果寫入數據庫,供其它業務使用。

 

  private static String  driverClass = "com.mysql.jdbc.Driver";
    private static String dbUrl = "jdbc:mysql://192.168.1.100:3306/test";
    private static String userNmae = "root";
    private static String passWord = "123456";

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStreamSource<Person> input = env.fromCollection(Arrays.asList(new Person("123", 25), new Person("456", 24)));
        DataStream<Row>  ds = input.map(new RichMapFunction<Person, Row>() {
            @Override
            public Row map(Person person) throws Exception {
                return Row.of(person.getAge(),person.getName());
            }
        });
        TypeInformation<?>[] fieldTypes = new TypeInformation<?>[] {
                BasicTypeInfo.INT_TYPE_INFO,
                BasicTypeInfo.STRING_TYPE_INFO


        };

        RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes);
        //寫入mysql
        JDBCAppendTableSink sink = JDBCAppendTableSink.builder()
                .setDrivername(driverClass)
                .setDBUrl(dbUrl)
                .setUsername(userNmae)
                .setPassword(passWord)
                .setParameterTypes(fieldTypes)
//                .setQuery("insert into student values(?,?)")
                .setQuery("update student set age = ? where name = ?")
                .build();

        sink.emitDataStream(ds);
          
        //查詢mysql
        JDBCInputFormat jdbcInputFormat = JDBCInputFormat.buildJDBCInputFormat()
              		.setDrivername(driverClass)
             			.setDBUrl(dbUrl)
                        .setUsername(userNmae)
                        .setPassword(passWord)
            			.setQuery("select * from student")
             			.setRowTypeInfo(rowTypeInfo)
             		    .finish();
        DataStreamSource<Row> input1 = env.createInput(jdbcInputFormat);
        input1.print();
        env.execute();
    }

注意傳入參數Row 字段順序 , fieldTypes 類型,一定要與sql語句的參數類型順序保持一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章