在Hive中,varchar执行比字符串更好吗?

自0.12版Hive支持VARCHAR数据类型。

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


在配置单元默认情况下,字符串映射到VARCHAR(32762),所以这意味着

  • 如果值超过32762那么该值被截断
  • 如果数据不需要存储的最大VARCHAR长度(例如,如果列不超过100个字符),那么它将分配不必要的资源来处理该列
  • STRING数据类型的默认行为是将类型映射到VARCHAR(32762)的SQL数据类型,默认行为可能导致性能问题

    这个解释是基于使用Hive的IBM BIG SQL隐含的

    IBM BIGINSIGHTS文档参考


    varchar数据类型也作为字符串保存在内部。 我看到的唯一区别是String是无界的,最大值为32,767字节,Varchar的最大值为65,535字节。 我不认为我们会有任何性能增益,因为这两种情况的内部实现都是String。 我对配置单元的内部信息了解不多,但是我可以看到配置单元完成的用于截断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;
    }
    

    如果有人做过性能分析/基准测试,请分享。

    链接地址: http://www.djcxy.com/p/22611.html

    上一篇: Does varchar perform better than string in Hive?

    下一篇: empty vector in a vector recursive type