lirui-apache 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_r353525292
##########
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:
For #1, maybe it's better to add a shim method for the conversion, rather
than assume class names in `HiveReflectionUtils`.
----------------------------------------------------------------
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