类型¶
Presto 中的 Type 接口用于在 SQL 语言中实现类型。Presto 附带了许多内置类型,例如 VarcharType 和 BigintType。 ParametricType 接口用于为类型提供类型参数,以允许使用 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)等类型。