[
https://issues.apache.org/jira/browse/BEAM-5979?focusedWorklogId=163572&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-163572
]
ASF GitHub Bot logged work on BEAM-5979:
----------------------------------------
Author: ASF GitHub Bot
Created on: 07/Nov/18 18:31
Start Date: 07/Nov/18 18:31
Worklog Time Spent: 10m
Work Description: akedin closed pull request #6967: [BEAM-5979] Fix DATE
and TIME in INSERTION
URL: https://github.com/apache/beam/pull/6967
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
index 0b6a1aee6ee..325208278ab 100644
---
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
+++
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
@@ -106,7 +106,8 @@ public static Object autoCastField(Schema.Field field,
Object rawObj) {
return rawObj;
}
} else if (type.isDateType()) {
- return DateTime.parse(rawObj.toString());
+ // Internal representation of DateType in Calcite is convertible to
Joda's Datetime.
+ return new DateTime(rawObj);
} else if (type.isNumericType()
&& ((rawObj instanceof String)
|| (rawObj instanceof BigDecimal && type != TypeName.DECIMAL))) {
diff --git
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/test/TestTableProvider.java
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/test/TestTableProvider.java
index fffe52ac3f1..ea06fc5b010 100644
---
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/test/TestTableProvider.java
+++
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/test/TestTableProvider.java
@@ -103,7 +103,8 @@ public void addRows(String tableName, Row... rows) {
return tables().get(tableName).rows;
}
- private static class TableWithRows implements Serializable {
+ /** TableWitRows. */
+ public static class TableWithRows implements Serializable {
private Table table;
private List<Row> rows;
private long tableProviderInstanceId;
@@ -113,6 +114,10 @@ public TableWithRows(long tableProviderInstanceId, Table
table) {
this.table = table;
this.rows = new CopyOnWriteArrayList<>();
}
+
+ public List<Row> getRows() {
+ return rows;
+ }
}
private static class InMemoryTable implements BeamSqlTable {
diff --git
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlCliTest.java
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlCliTest.java
index c7ece0de280..703e9a08bff 100644
---
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlCliTest.java
+++
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlCliTest.java
@@ -30,10 +30,14 @@
import java.util.stream.Stream;
import org.apache.beam.sdk.extensions.sql.impl.ParseException;
import org.apache.beam.sdk.extensions.sql.meta.Table;
+import org.apache.beam.sdk.extensions.sql.meta.provider.test.TestTableProvider;
import org.apache.beam.sdk.extensions.sql.meta.provider.text.TextTableProvider;
import org.apache.beam.sdk.extensions.sql.meta.store.InMemoryMetaStore;
import org.apache.beam.sdk.schemas.Schema;
import org.apache.beam.sdk.schemas.Schema.Field;
+import org.apache.beam.sdk.values.Row;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.junit.Test;
/** UnitTest for {@link BeamSqlCli}. */
@@ -235,4 +239,41 @@ public void testExplainQuery() throws Exception {
"BeamCalcRel(expr#0..2=[{inputs}], proj#0..2=[{exprs}])\n"
+ " BeamIOSourceRel(table=[[beam, person]])\n"));
}
+
+ @Test
+ public void test_time_types() throws Exception {
+ InMemoryMetaStore metaStore = new InMemoryMetaStore();
+ TestTableProvider testTableProvider = new TestTableProvider();
+ metaStore.registerProvider(testTableProvider);
+
+ BeamSqlCli cli = new BeamSqlCli().metaStore(metaStore);
+ cli.execute(
+ "CREATE EXTERNAL TABLE test_table (\n"
+ + "f_date DATE, \n"
+ + "f_time TIME, \n"
+ + "f_ts TIMESTAMP"
+ + ") \n"
+ + "TYPE 'test'");
+
+ cli.execute(
+ "INSERT INTO test_table VALUES ("
+ + "DATE '2018-11-01', "
+ + "TIME '15:23:59', "
+ + "TIMESTAMP '2018-07-01 21:26:07.123' )");
+
+ Table table = metaStore.getTables().get("test_table");
+ assertNotNull(table);
+ TestTableProvider.TableWithRows tableWithRows =
testTableProvider.tables().get(table.getName());
+ assertEquals(1, tableWithRows.getRows().size());
+ Row row = tableWithRows.getRows().get(0);
+ assertEquals(3, row.getFieldCount());
+
+ // test DATE field
+ assertEquals("2018-11-01",
row.getDateTime("f_date").toString("yyyy-MM-dd"));
+ // test TIME field
+ assertEquals("15:23:59.000",
row.getDateTime("f_time").toString("HH:mm:ss.SSS"));
+ // test TIMESTAMP field
+ assertEquals(
+ new DateTime(2018, 7, 1, 21, 26, 7, 123, DateTimeZone.UTC),
row.getDateTime("f_ts"));
+ }
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 163572)
Time Spent: 2h (was: 1h 50m)
> Support DATE and TIME in DML
> ----------------------------
>
> Key: BEAM-5979
> URL: https://issues.apache.org/jira/browse/BEAM-5979
> Project: Beam
> Issue Type: Bug
> Components: dsl-sql
> Reporter: Rui Wang
> Assignee: Rui Wang
> Priority: Major
> Fix For: Not applicable
>
> Time Spent: 2h
> Remaining Estimate: 0h
>
> Right now, BeamSQL uses Schema's DATETIME field to save all time related
> data. However, BeamSQL doesn't implement correctly how TIME and DATE should
> be converted to Joda's datetime.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)