xuefuz commented on a change in pull request #10401: [FLINK-15020][hive]
Support timestamp type in hive
URL: https://github.com/apache/flink/pull/10401#discussion_r353373441
##########
File path:
flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/catalog/hive/util/HiveReflectionUtils.java
##########
@@ -82,12 +86,34 @@ public static Object convertToHiveDate(HiveShim hiveShim,
String s) throws Flink
}
}
- public static Object convertToHiveTimestamp(HiveShim hiveShim, String
s) throws FlinkHiveUDFException {
+ // converts a Flink timestamp instance to what's expected by Hive
+ public static Object toHiveTimestamp(HiveShim hiveShim, Object
flinkTimestamp) {
+ Preconditions.checkArgument(flinkTimestamp instanceof Timestamp
|| flinkTimestamp instanceof LocalDateTime,
+ String.format("Only support converting %s or %s
to Hive timestamp, but got %s",
+ Timestamp.class.getName(),
LocalDateTime.class.getName(), flinkTimestamp.getClass().getName()));
+ Class hiveTimestampClz = hiveShim.getTimestampDataTypeClass();
+ if (hiveTimestampClz.equals(Timestamp.class)) {
+ return flinkTimestamp instanceof Timestamp ?
flinkTimestamp : Timestamp.valueOf((LocalDateTime) flinkTimestamp);
+ } else {
+ try {
+ return invokeMethod(hiveTimestampClz, null,
"valueOf", new Class[]{String.class}, new Object[]{flinkTimestamp.toString()});
+ } catch (NoSuchMethodException |
InvocationTargetException | IllegalAccessException e) {
+ throw new FlinkHiveException("Failed to convert
to Hive timestamp", e);
+ }
Review comment:
1. An assertion on class name might help.
2. Conversion to/from string might be slow. We probably can set milli and
nano seconds directly.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services