Kenneth Knowles created BEAM-4700:
-------------------------------------

             Summary: JDBC driver cannot support TIMESTAMP data type
                 Key: BEAM-4700
                 URL: https://issues.apache.org/jira/browse/BEAM-4700
             Project: Beam
          Issue Type: New Feature
          Components: dsl-sql
            Reporter: Kenneth Knowles
            Assignee: Kenneth Knowles


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)

Reply via email to