[ 
https://issues.apache.org/jira/browse/BEAM-8897?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mark Gates updated BEAM-8897:
-----------------------------
    Description: 
The actual use case is such that I am connecting to Oracle via JDBC making the 
query: "select 1 from dual". If I try this on real data with a Number type 
column the same issue occurs.

The number type results in an exception. Example:


{code:java}
PCollection<Row> row = p.apply(
        JdbcIO.readRows()
            
.withDataSourceProviderFn(JdbcIO.PoolableDataSourceProvider.of(configuration))
            .withQuery("select 1 as t1 from dual")
            .withFetchSize(10000)
            .withOutputParallelization(true));


    row.apply(ParDo.of(new DoFn<Row, Row>() {
      @ProcessElement
      public void processElement(@Element Row row, OutputReceiver<Row> out, 
ProcessContext pc) {
        System.out.println(row.getSchema().toString() + " : " + row.toString());
        out.output(row);
      }
    }));

    p.run().waitUntilFinish();
{code}


Exception:
Exception in thread "main" 
org.apache.beam.sdk.Pipeline$PipelineExecutionException: 
java.lang.IllegalArgumentException
        at 
org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:348)
        at 
org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:318)
        at 
org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:213)
        at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:67)
        at org.apache.beam.sdk.Pipeline.run(Pipeline.java:315)
        at org.apache.beam.sdk.Pipeline.run(Pipeline.java:301)
        at SimpleJdbc.main(SimpleJdbc.java:45)
Caused by: java.lang.IllegalArgumentException
        at 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkArgument(Preconditions.java:127)
        at 
org.apache.beam.sdk.io.jdbc.LogicalTypes$FixedPrecisionNumeric.toInputType(LogicalTypes.java:237)
        at 
org.apache.beam.sdk.io.jdbc.LogicalTypes$FixedPrecisionNumeric.toInputType(LogicalTypes.java:221)
        at 
org.apache.beam.sdk.io.jdbc.SchemaUtil.lambda$createLogicalTypeExtractor$ca0ab2ec$1(SchemaUtil.java:272)
        at 
org.apache.beam.sdk.io.jdbc.SchemaUtil$BeamRowMapper.mapRow(SchemaUtil.java:337)
        at 
org.apache.beam.sdk.io.jdbc.SchemaUtil$BeamRowMapper.mapRow(SchemaUtil.java:315)
        at 
org.apache.beam.sdk.io.jdbc.JdbcIO$ReadFn.processElement(JdbcIO.java:854)

  was:

The actual use case is such that I am connecting to Oracle via JDBC making the 
query: "select 1 from dual".

The number type results in an exception. Example:


{code:java}
PCollection<Row> row = p.apply(
        JdbcIO.readRows()
            
.withDataSourceProviderFn(JdbcIO.PoolableDataSourceProvider.of(configuration))
            .withQuery("select 1 as t1 from dual")
            .withFetchSize(10000)
            .withOutputParallelization(true));


    row.apply(ParDo.of(new DoFn<Row, Row>() {
      @ProcessElement
      public void processElement(@Element Row row, OutputReceiver<Row> out, 
ProcessContext pc) {
        System.out.println(row.getSchema().toString() + " : " + row.toString());
        out.output(row);
      }
    }));

    p.run().waitUntilFinish();
{code}


Exception:
Exception in thread "main" 
org.apache.beam.sdk.Pipeline$PipelineExecutionException: 
java.lang.IllegalArgumentException
        at 
org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:348)
        at 
org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:318)
        at 
org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:213)
        at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:67)
        at org.apache.beam.sdk.Pipeline.run(Pipeline.java:315)
        at org.apache.beam.sdk.Pipeline.run(Pipeline.java:301)
        at SimpleJdbc.main(SimpleJdbc.java:45)
Caused by: java.lang.IllegalArgumentException
        at 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkArgument(Preconditions.java:127)
        at 
org.apache.beam.sdk.io.jdbc.LogicalTypes$FixedPrecisionNumeric.toInputType(LogicalTypes.java:237)
        at 
org.apache.beam.sdk.io.jdbc.LogicalTypes$FixedPrecisionNumeric.toInputType(LogicalTypes.java:221)
        at 
org.apache.beam.sdk.io.jdbc.SchemaUtil.lambda$createLogicalTypeExtractor$ca0ab2ec$1(SchemaUtil.java:272)
        at 
org.apache.beam.sdk.io.jdbc.SchemaUtil$BeamRowMapper.mapRow(SchemaUtil.java:337)
        at 
org.apache.beam.sdk.io.jdbc.SchemaUtil$BeamRowMapper.mapRow(SchemaUtil.java:315)
        at 
org.apache.beam.sdk.io.jdbc.JdbcIO$ReadFn.processElement(JdbcIO.java:854)


> JdbcIO issue when type is Numeric
> ---------------------------------
>
>                 Key: BEAM-8897
>                 URL: https://issues.apache.org/jira/browse/BEAM-8897
>             Project: Beam
>          Issue Type: Bug
>          Components: io-java-jdbc
>    Affects Versions: 2.16.0
>         Environment: Java 8
>            Reporter: Mark Gates
>            Priority: Major
>
> The actual use case is such that I am connecting to Oracle via JDBC making 
> the query: "select 1 from dual". If I try this on real data with a Number 
> type column the same issue occurs.
> The number type results in an exception. Example:
> {code:java}
> PCollection<Row> row = p.apply(
>         JdbcIO.readRows()
>             
> .withDataSourceProviderFn(JdbcIO.PoolableDataSourceProvider.of(configuration))
>             .withQuery("select 1 as t1 from dual")
>             .withFetchSize(10000)
>             .withOutputParallelization(true));
>     row.apply(ParDo.of(new DoFn<Row, Row>() {
>       @ProcessElement
>       public void processElement(@Element Row row, OutputReceiver<Row> out, 
> ProcessContext pc) {
>         System.out.println(row.getSchema().toString() + " : " + 
> row.toString());
>         out.output(row);
>       }
>     }));
>     p.run().waitUntilFinish();
> {code}
> Exception:
> Exception in thread "main" 
> org.apache.beam.sdk.Pipeline$PipelineExecutionException: 
> java.lang.IllegalArgumentException
>       at 
> org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:348)
>       at 
> org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:318)
>       at 
> org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:213)
>       at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:67)
>       at org.apache.beam.sdk.Pipeline.run(Pipeline.java:315)
>       at org.apache.beam.sdk.Pipeline.run(Pipeline.java:301)
>       at SimpleJdbc.main(SimpleJdbc.java:45)
> Caused by: java.lang.IllegalArgumentException
>       at 
> org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkArgument(Preconditions.java:127)
>       at 
> org.apache.beam.sdk.io.jdbc.LogicalTypes$FixedPrecisionNumeric.toInputType(LogicalTypes.java:237)
>       at 
> org.apache.beam.sdk.io.jdbc.LogicalTypes$FixedPrecisionNumeric.toInputType(LogicalTypes.java:221)
>       at 
> org.apache.beam.sdk.io.jdbc.SchemaUtil.lambda$createLogicalTypeExtractor$ca0ab2ec$1(SchemaUtil.java:272)
>       at 
> org.apache.beam.sdk.io.jdbc.SchemaUtil$BeamRowMapper.mapRow(SchemaUtil.java:337)
>       at 
> org.apache.beam.sdk.io.jdbc.SchemaUtil$BeamRowMapper.mapRow(SchemaUtil.java:315)
>       at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$ReadFn.processElement(JdbcIO.java:854)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to