類型¶
Presto 中的 Type
介面用於實作 SQL 語言中的類型。Presto 隨附許多內建類型,例如 VarcharType
和 BigintType
。ParametricType
介面用於為類型提供類型參數,以允許像 VARCHAR(10)
或 DECIMAL(22, 5)
這樣的類型。Plugin
可以透過從 getTypes()
回傳新的 Type
物件,並透過從 getParametricTypes()
回傳新的 ParametricType
物件來提供新的 Type
物件。
以下是 Type
介面的高階概述,如需更多詳細資訊,請參閱 Type
的 JavaDocs。
原生容器類型
所有類型都定義了
getJavaType()
方法,通常稱為「原生容器類型」。這是用於在執行期間保存值並將它們儲存在Block
中的 Java 類型。例如,這是用於實作產生或使用此Type
的函數的 Java 程式碼中的類型。原生編碼
原生容器類型形式的值的解釋由其
Type
定義。對於某些類型(例如BigintType
),它與原生容器類型的 Java 解釋(64 位元二補數)相符。但是,對於其他類型(例如TimestampWithTimeZoneType
,它也使用long
作為其原生容器類型),儲存在long
中的值是一個 8 位元組的二進位值,結合時區和自 Unix Epoch 以來的毫秒數。特別是,這表示如果不了解原生編碼,就不能比較兩個原生值並期望有意義的結果。類型簽章
類型的簽章定義其身分,並編碼有關類型的一些一般資訊,例如其類型參數(如果是參數類型)及其文字參數。文字參數用於像
VARCHAR(10)
這樣的類型。