跳转至

Trino

Iceberg format

Iceberg format 是原生的 Iceberg 表,使用 Trino 原生为 Iceberg 提供的 Connector 即可。 相关文档见 Iceberg Connector

Mixed format

安装

  • 在 Trino 的安装包下创建 {trino_home}/plugin/arctic 目录,并把 arctic-trino 的包 trino-arctic-xx-SNAPSHOT.tar.gz 里的内容 解压到 {trino_home}/plugin/arctic 目录下。
  • 在{ trino_home}/etc/catalog 目录下配置 Arctic 的 Catalog 配置文件,例如
connector.name=arctic
arctic.url=thrift://{ip}:{port}/{catalogName}

支持的语句

查询整表

采用 Merge-On-Read 的方式读取 Mixed Format,能读取到表的最新数据,例如

SELECT * FROM "{TABLE_NAME}"

查询 BaseStore

在有主键表中支持直接查询 BaseStore ,BaseStore 存储表的存量数据,通常由批计算或者 optimizing 产生,查询到的是表的静态数据, 查询效率非常的高,但是时效性不好。语法如下:

SELECT * FROM "{TABLE_NAME}#BASE"

查询 ChangeStore

在有主键表中支持直接查询 ChangeStore,ChangeStore 存储表的流和变更数据,通常由流计算实时写入,可以通过 ChangeStore 查询到表的变更记录,能查询到多久之前的变更记录由 ChangeStore 的数据过期时间决定。

SELECT * FROM "{TABLE_NAME}#CHANGE"

查出来结果会多三列数据分别是:

  • _transaction_id: 数据写入时 AMS 分配的 transaction id。批模式下为每条 SQL 执行时分配,流模式下为每次 checkpoint 分配。
  • _file_offset:大小可以表示同一批 _transaction_id 中数据写入的先后顺序。
  • _change_action:表示数据的类型有 INSERT,DELETE 两种

Trino 和 Arctic 的类型对照

Arctic type Trino type
BOOLEAN BOOLEAN
INT INTEGER
LONG BIGINT
FLOAT REAL
DOUBLE DOUBLE
DECIMAL(p,s) DECIMAL(p,s)
DATE DATE
TIME TIME(6)
TIMESTAMP TIMESTAMP(6)
TIMESTAMPTZ TIMESTAMP(6) WITH TIME ZONE
STRING VARCHAR
UUID UUID
BINARY VARBINARY
STRUCT(...) ROW(...)
LIST(e) ARRAY(e)
MAP(k,v) MAP(k,v)

Trino 使用代理用户访问 Hadoop 集群

默认情况下,Trino 查询 Arctic 时,使用 创建catalog 中配置的 Hadoop 用户去访问 Hadoop 集群。 若想使用 Trino 查询中的用户去访问 Hadoop 集群,可开启 Hadoop 代理功能, 在 {trino_home}/etc/catalog 目录下 Arctic 的 Catalog 配置文件中增加 arctic.hdfs.impersonation.enabled=true 参数,如下

connector.name=arctic
arctic.url=thrift://{ip}:{port}/{catalogName}
arctic.hdfs.impersonation.enabled=true
arctic.hdfs.impersonation.enabled 默认为 false

注意

使用 Hadoop 代理功能,需提前在 Hadoop 集群对 创建catalog 中配置的 Hadoop 用户开启 proxy 功能,并保证能够代理该 Trino 查询用户,参考 Hadoop Proxy User