You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by GitBox <gi...@apache.org> on 2019/12/03 19:21:22 UTC

[GitHub] [flink] xuefuz commented on a change in pull request #10401: [FLINK-15020][hive] Support timestamp type in hive

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:
users@infra.apache.org


With regards,
Apache Git Services