我想了解以下数据tyoes之间的差异在帕拉帕拉数据类型
- 字符串
- 字符
- 的Varchar
上阅读这将是作为模式需要3种不同的类型。我想知道在我们知道列长度上限的情况下,是否有任何性能优势在字符串上使用Char/Varchars?
我想了解以下数据tyoes之间的差异在帕拉帕拉数据类型
上阅读这将是作为模式需要3种不同的类型。我想知道在我们知道列长度上限的情况下,是否有任何性能优势在字符串上使用Char/Varchars?
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
有一些不同的特点:主要是它不codegen'ed因此通常性能将受到影响。然而,小的CHAR
s(其中x < 128
)在执行期间与元组一起存储,而不是作为可变长度数据存储在辅助存储器中。
以上提供了这些类型之间的一些差异,但建议尽可能使用STRING
。
马特感谢您的回应。如果我明白这一点,即使**我们知道上限以使Schema Evolution变得容易,使用String vs VARCHAR(x)**更有意义。这些类型是在Impala中为兼容性原因定义的还是在其他1中有意义的任何特定情况下定义的。我真的很喜欢看到一个文档,解释何时使用每种数据类型以及为什么。 – user1971133 2015-04-02 21:09:20
是的,STRING应该更容易用于架构演变的原因。 VARCHAR主要用于与使用VARCHAR类型的其他或旧版数据库系统的代码兼容。 – Matt 2015-04-02 21:13:20