You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by "Andrew Pilloud (JIRA)" <ji...@apache.org> on 2018/07/17 17:15:00 UTC

[jira] [Resolved] (BEAM-4700) JDBC driver cannot support TIMESTAMP data type

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

Andrew Pilloud resolved BEAM-4700.
----------------------------------
       Resolution: Fixed
    Fix Version/s: 2.6.0

> JDBC driver cannot support TIMESTAMP data type
> ----------------------------------------------
>
>                 Key: BEAM-4700
>                 URL: https://issues.apache.org/jira/browse/BEAM-4700
>             Project: Beam
>          Issue Type: Bug
>          Components: dsl-sql
>            Reporter: Kenneth Knowles
>            Assignee: Andrew Pilloud
>            Priority: Major
>             Fix For: 2.6.0
>
>          Time Spent: 2h 50m
>  Remaining Estimate: 0h
>
> Avatica allows column representation to be customized, so a timestamp can be stored as a variety of types. Joda ReadableInstant is none of these types: https://github.com/apache/calcite-avatica/blob/acb675de97b9b0743c09368820a770e2ceda05f8/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java#L162
> By default, it seems to be configured to store {{TIMESTAMP}} columns as {{long}} values. If you run the SQL shell and select a {{TIMESTAMP}} column, you get:
> {code}
> ava.lang.ClassCastException: org.joda.time.Instant cannot be cast to java.lang.Number
>         at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:726)
>         at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getString(AbstractCursor.java:1026)
>         at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaResultSet.getString(AvaticaResultSet.java:225)
>         at sqlline.Rows$Row.<init>(Rows.java:183)
> {code}
> So, essentially, Beam SQL Shell does not support timestamps.
> We may be able to:
>  - override how the accessor for our existing storage is created
>  - configure what the column representation is (this doesn't really help, since none of the choices are ours)
>  - convert timestamps to longs in BeamEnumerableConverter; not sure how many conversions will be required here



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)