如何在Apache Beam中调用Oracle存储的proc?

时间:2019-01-25 11:50:06

标签: java apache-beam

我只是想学习Apache Beam,并从oracle数据库返回数据。我已经设法建立基本连接并返回一些数据,但是我需要在运行sql查询以返回我的数据之前调用存储的proc(存储的proc设置了查询上下文,以将返回的数据限制为特定的分区)

我尝试添加第二个.withQuery语句,但这不起作用。该代码不会返回错误,但是会返回所有分区中的数据

Pipeline p = Pipeline.create(options);

PCollection<List<String>> rows p.apply(JdbcIO.<List<Strng>>read()
    .withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
        "oracle.jdbc.driver.OracleDriver","jdbc:oracle:thin:@server")
        .withUsername("uname")
        .withPassword("pword")
        )
    .withQuery("call procname(partitionid)")
    .withQuery("Select * from table")
    .withCoder(ListCoder.of(StringUtf8Coder.of()))
    .withRowMapper(new JdbcIO.RowMapper<List<String>>(){
        public List<String> mapRow(ResultSet resultSet) throws Exception {
            List<String> addRow = new ArrayList<String>();
            for(int i=1; i<= resultSet.getMetaData().getColumnCount();i++)
            {
                addRow.add(i-1, String.valueOf(resultSet.getObject(i)));
            }
        return addRow;
    }
 }

0 个答案:

没有答案