2015-04-02 76 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