2017-02-04 61 views
0

我的表大多是双重类型的列和一些字符串列。我使用行格式serde 从文本文件创建表。 我首先使用named_struct函数组合这些列,并将其传递给我的udf。像这样的东西。Hive Udf,Struct类型丢失类型信息。有没有办法恢复类型信息

select id, my_udf(named_struct("key1", col1, "key2", col2, "key3",col3, "key4", col4), other_udf_param1, other_udf_param2); 

因此,col1,col2和col3是double类型,而col4是String类型。

但他们都被转换为字符串。

这是我评估函数的一个片段。

List<? extends StructField> fields = this.dataOI.getAllStructFieldRefs(); 

    for (int i = 0; i < fields.size(); i++) { 
     System.out.println(fields.get(i).toString()); 
     String canName = this.featuresOI.getStructFieldData(arguments[2].get(), fields.get(i)).getClass().getCanonicalName(); 
     System.out.println(canName + " can name"); 
     System.out.println(this.dataOI.getStructFieldData(arguments[2].get(), fields.get(i))); 
       } 

这将返回所有这些字符串。

有没有一种方法可以保留列类型?

回答

0

是的,列类型保存在Object Inspector字段中。对于映射,对于named_struct,在配置单元cli上可以有相同的行为,但输入全部转换为字符串。