类型

Presto 中的 Type 接口用于在 SQL 语言中实现类型。Presto 附带了许多内置类型,例如 VarcharTypeBigintTypeParametricType 接口用于为类型提供类型参数,以允许使用 VARCHAR(10)DECIMAL(22, 5) 等类型。 Plugin 可以通过从 getTypes() 返回新的 Type 对象,并从 getParametricTypes() 返回新的 ParametricType 对象,来提供新的 Type 对象。

以下是 Type 接口的高级概述,有关更多详细信息,请参阅 Type 的 JavaDocs。

  • 本地容器类型

    所有类型都定义了 getJavaType() 方法,通常称为“本地容器类型”。这是用于在执行期间保存值并在 Block 中存储值的 Java 类型。例如,这是在 Java 代码中用于实现产生或使用此 Type 的函数的类型。

  • 本地编码

    Type 定义了本地容器类型形式的值的解释。对于某些类型,例如 BigintType,它与 Java 对本地容器类型(64 位 2 的补码)的解释相匹配。但是,对于其他类型,例如 TimestampWithTimeZoneType,它也使用 long 作为其本地容器类型,存储在 long 中的值是 8 字节二进制值,它结合了时区和自 Unix 纪元以来的毫秒数。特别地,这意味着您不能比较两个本地值并期望得到有意义的结果,除非您知道本地编码。

  • 类型签名

    类型的签名定义了它的身份,并且还编码了有关类型的某些一般信息,例如它的类型参数(如果它是参数化的)以及它的文字参数。文字参数用于 VARCHAR(10) 等类型。