我想了解以下數據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