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

Reply via email to