Flink:如何在数据库中保存行列表

时间:2019-03-19 09:35:45

标签: apache-flink flink-streaming

现在,我正在从文件中读取行,并使用以下代码保存在数据库中:

String strQuery = "INSERT INTO public.alarm (id, name, marks) VALUES (?, ?, ?)";
JDBCOutputFormat jdbcOutput = JDBCOutputFormat.buildJDBCOutputFormat()
 .setDrivername("org.postgresql.Driver")
 .setDBUrl("jdbc:postgresql://localhost:5432/postgres?user=michel&password=polnareff")
 .setQuery(strQuery)
 .setSqlTypes(new int[] { Types.INTEGER, Types.VARCHAR, Types.INTEGER}) //set the types
 .finish();
DataStream<Row> rows = FilterStream
            .map((tuple)-> {
               Row row = new Row(3);                 
               row.setField(0, tuple.f0);            
               row.setField(1, tuple.f1);             
               row.setField(2, tuple.f2);   
               return row;
            });
rows.writeUsingOutputFormat(jdbcOutput);
env.execute();
}
}

上面的方法工作正常,它从文件中逐行选择一行并将其保存在数据库中。

例如:

如果文件包含:

1, mark, 20

然后数据库条目将如下所示:

id   name   marks
------------------
1    mark   20

现在需求是每一行,我必须创建2个不同的行,它应该如下所示:

例如:

如果文件包含:

1, mark, 20

然后数据库条目应如下所示:

id   name   marks
------------------
1    mark-1   20
1    mark-2   20

现在我应该返回List而不是row,并且数据流变量应该看起来像DataStream<List<Row>> rows

要实现此目的,我应该在JDBCOutputFormat变量中进行哪些更改?

0 个答案:

没有答案