Gideon Korir created NIFI-5888:
----------------------------------
Summary: QueryRecord processor handling timestamp
Key: NIFI-5888
URL: https://issues.apache.org/jira/browse/NIFI-5888
Project: Apache NiFi
Issue Type: Improvement
Components: Extensions
Affects Versions: 1.8.0
Reporter: Gideon Korir
Add the test below to `org.apache.nifi.processors.standard.TestQueryRecord`
{code:java}
@Test public void testTimestampColumns() throws InitializationException { final
MockRecordParser parser = new MockRecordParser(); parser.addSchemaField("name",
RecordFieldType.STRING); parser.addSchemaField("date_added",
RecordFieldType.TIMESTAMP); parser.addRecord("Tom",
Timestamp.valueOf("2018-12-03 09:12:00")); parser.addRecord("Jerry",
Timestamp.valueOf("2018-12-04 10:26:00")); parser.addRecord("Tom",
Timestamp.valueOf("2017-01-03 11:22:00")); final List<String> colNames = new
ArrayList<>(); colNames.add("name"); colNames.add("day_added"); final
ResultSetValidatingRecordWriter writer = new
ResultSetValidatingRecordWriter(colNames); TestRunner runner = getRunner();
runner.addControllerService("parser", parser);
runner.enableControllerService(parser); runner.addControllerService("writer",
writer); runner.enableControllerService(writer); runner.setProperty(REL_NAME,
"select name, {fn YEAR(date_added)} as day_added from FLOWFILE");
runner.setProperty(QueryRecord.RECORD_READER_FACTORY, "parser");
runner.setProperty(QueryRecord.RECORD_WRITER_FACTORY, "writer");
runner.enqueue(""); runner.run(); runner.assertTransferCount(REL_NAME, 1);
}
{code}
*Expected*: Test will pass
*Actual*: fails with ClassCastException with message "java.sql.Timestamp cannot
be cast to java.lang.Long".
//Also used sql: "select name, CAST(date_added, DATE) as day_added from
FLOWFILE" and failed
I (think) I've traced the issue to the NiFi usage of Apache Calcite; according
to Julian Hyde's comment on [this
issue|https://issues.apache.org/jira/browse/CALCITE-1427].
Disclaimer: My knowledge on Calcite is zero to none so I could be completely
wrong.
Currently, QueryRecord uses FlowFileTable which only implements QueryableTable
and TranslateableTable and therefore can not work with java.sql.Timestamp (at
least based on Hyde's comment on the issue). This will mean almost all
RecordReader services (Avro, Csv) would not work with QueryRecord.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)