2015-04-02 78 views
0

我想了解以下数据tyoes之间的差异在帕拉帕拉数据类型

  1. 字符串
  2. 字符
  3. 的Varchar

上阅读这将是作为模式需要3种不同的类型。我想知道在我们知道列长度上限的情况下,是否有任何性能优势在字符串上使用Char/Varchars?

回答

3

STRING存储可变长度数据,并且(基本上 - 禁止一些实际的限制,当然)无界。

VARCHAR(x)存储具有x个字符上限的可变长度数据,因此数据将被截断为定义的长度。例如,如果您有VARCHAR(10),您的输入数据的大小可以在[0,10]中。

CHAR(x)是一个x字符固定大小的数据类型。如果数据比x短,则填充数据。如果数据比x长,数据将被截断。

VARCHARCHAR都是在Impala 2.0.0(CDH 5.2.0)中引入的,主要用于与其他数据库系统的兼容性。但是,除了某些特殊用例(使用特定的遗留系统),因为两者都有一些功能限制,所以不建议使用VARCHARCHAR

虽然应该有STRINGVARCHAR之间相似的性能,CHAR有一些不同的特点:主要是它不codegen'ed因此通常性能将受到影响。然而,小的CHAR s(其中x < 128)在执行期间与元组一起存储,而不是作为可变长度数据存储在辅助存储器中。

以上提供了这些类型之间的一些差异,但建议尽可能使用STRING

有关更多详细信息,请参阅STRING,VARCHARCHAR文档。

+0

马特感谢您的回应。如果我明白这一点,即使**我们知道上限以使S​​chema Evolution变得容易,使用String vs VARCHAR(x)**更有意义。这些类型是在Impala中为兼容性原因定义的还是在其他1中有意义的任何特定情况下定义的。我真的很喜欢看到一个文档,解释何时使用每种数据类型以及为什么。 – user1971133 2015-04-02 21:09:20

+0

是的,STRING应该更容易用于架构演变的原因。 VARCHAR主要用于与使用VARCHAR类型的其他或旧版数据库系统的代码兼容。 – Matt 2015-04-02 21:13:20