我试图理解 Impala 中以下数据类型之间的区别
作为读取模式,需要 3 种不同类型。我想知道在我们知道列长度上限的情况下使用 Char/Varchar 是否比字符串有任何性能优势?
STRING存储可变长度数据并且(本质上——当然,除了一些实际限制)是无限的。
VARCHAR(x)存储上限为 x 个字符的可变长度数据,因此数据将被截断为定义的长度。例如,如果有VARCHAR(10),则输入数据的大小可以为 [0,10]。
CHAR(x)是 x 字符固定大小数据类型。如果数据短于 x,则对其进行填充。如果数据长于 x,则数据将被截断。
和VARCHAR都是CHAR在 Impala 2.0.0 (CDH 5.2.0) 中引入的,主要用于与其他数据库系统的兼容性。但是,除了某些特殊用例(具有特定的遗留系统)之外,不建议同时使用VARCHAR和,因为两者都有一些功能限制。CHAR
STRING虽然和 之间应该有类似的性能VARCHAR,但CHAR具有一些不同的特征:值得注意的是它不是代码生成的,因此通常性能会受到影响。然而,小CHARs (其中x < 128)在执行期间与元组一起存储,而不是像可变长度数据那样存储在辅助存储器中。
上面提供了这些类型之间的一些差异,但建议尽可能使用STRING。
有关更多详细信息,请参阅STRING、VARCHAR和CHAR文档。