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

Anonymous updated BEAM-12479:
-----------------------------
    Status: Triage Needed  (was: Resolved)

> UnsupportedOperationException when reading from BigQuery tables and 
> converting TableRows to Beam Rows
> -----------------------------------------------------------------------------------------------------
>
>                 Key: BEAM-12479
>                 URL: https://issues.apache.org/jira/browse/BEAM-12479
>             Project: Beam
>          Issue Type: Bug
>          Components: io-java-gcp
>    Affects Versions: 2.29.0
>         Environment: Beam Java SDK
>            Reporter: Pascal GILLET
>            Priority: P2
>              Labels: pull-request-available
>             Fix For: 2.33.0
>
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> {{UnsupportedOperationExceptions}} are thrown in
> {{org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils#toBeamValue(FieldType, 
> Object)}}
> when reading from BigQuery tables with 
> {{org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO#readTableRowsWithSchema()}} 
> and converting the returned {{TableRows}} to Beam {{Rows}}
> Example:
> {code:java}
> PCollection<Row> rows =
>  pipeline
>  .apply(
>  "Read from BigQuery table",
>  BigQueryIO.readTableRowsWithSchema().from(String.format("%s:%s.%s", project, 
> dataset, table)))
>  .apply(Convert.toRows());{code}
>  
> {{UnsupportedOperationException}} messages that I have encountered are of the 
> type:
> {{Converting BigQuery type "java.lang.Boolean" to "BOOLEAN" is not supported}}
> {{Converting BigQuery type "java.lang.Double" to "DOUBLE" is not supported}}
> ...While the conversion of these Java types should be straightforward.
> Indeed, the method {{BigQueryUtils#toBeamValue(FieldType, Object)}} expects 
> only {{String}} objects or {{Collections}} of {{Strings}}.
> I had to upgrade {{com.google.cloud:google-cloud-bigquery}} from 1.108.0 to 
> 1.132.0 in my project. So my guess is this latest version is now able to map 
> BiqQuery (SQL) types to Java types instead of raw Strings, in particular BOOL 
> to Boolean, INT64 to Long and FLOAT64 to Double.
> In my understanding though, from BigQuery to Beam, there would be no need to 
> manage Java Byte, Short, Integer and Float since BigQuery types are "limited" 
> to standard SQL types INT64, and FLOAT64 that encompass them all (on the 
> other hand, BQ NUMERIC type is mapped to Java BigDecimal).
> I propose a pull request to also support {{Number}} and {{Boolean}} objects 
> in method {{BigQueryUtils#toBeamValue(FieldType, Object)}}. It is only added 
> behavior and the updated method is still compatible with the current 
> functioning.
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to