由于version 0.12 Hive支持VARCHAR
数据类型。
在典型的分析性Hive查询中,VARCHAR
是否会提供比STRING
更好的性能?
答案 0 :(得分:3)
默认情况下,在hive中,String被映射到VARCHAR(32762),这意味着
STRING数据类型的默认行为是将类型映射到VARCHAR的SQL数据类型(32762),默认行为可能导致性能问题
此解释基于使用Hive隐含的IBM BIG SQL
答案 1 :(得分:0)
varchar数据类型也在内部保存为String。我看到的唯一区别是String是无限的,最大值为32,767字节,Varchar的最大值为65,535字节。我认为我们不会有任何性能提升,因为两种情况的内部实现都是String。我不太了解蜂巢内部,但我可以看到hive为截断varchar值做了额外的处理。下面是代码(org.apache.hadoop.hive.common.type.HiveVarchar): -
public static String enforceMaxLength(String val, int maxLength) {
String value = val;
if (maxLength > 0) {
int valLength = val.codePointCount(0, val.length());
if (valLength > maxLength) {
// Truncate the excess chars to fit the character length.
// Also make sure we take supplementary chars into account.
value = val.substring(0, val.offsetByCodePoints(0, maxLength));
}
}
return value;
}
如果有人进行了性能分析/基准测试,请分享。