類型

Presto 中的 Type 介面用於實作 SQL 語言中的類型。Presto 隨附許多內建類型,例如 VarcharTypeBigintTypeParametricType 介面用於為類型提供類型參數,以允許像 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) 這樣的類型。