varchar在Hive中的性能是否优于string?

时间:2014-09-11 15:13:15

标签: hadoop hive

由于version 0.12 Hive支持VARCHAR数据类型。

在典型的分析性Hive查询中,VARCHAR是否会提供比STRING更好的性能?

2 个答案:

答案 0 :(得分:3)

默认情况下,在hive中,String被映射到VARCHAR(32762),这意味着

  • 如果值超过32762,则该值将被截断
  • 如果数据不需要最大VARCHAR长度进行存储(例如,如果列永远不会超过100个字符),那么它会为处理该列分配不必要的资源

STRING数据类型的默认行为是将类型映射到VARCHAR的SQL数据类型(32762),默认行为可能导致性能问题

此解释基于使用Hive隐含的IBM BIG SQL

IBM BIGINSIGHTS doc reference

答案 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;
}

如果有人进行了性能分析/基准测试,请分享。