在Hive中,varchar执行比字符串更好吗?
自0.12版Hive支持VARCHAR
数据类型。
在典型的分析Hive查询中, VARCHAR
会比STRING
提供更好的性能吗?
在配置单元默认情况下,字符串映射到VARCHAR(32762),所以这意味着
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