
# Trino on iceberg最佳实践
#### 概述
Iceberg是一种开放的数据湖表格式。您可以借助Iceberg快速地在HDFS或者华为云OBS上构建自己的数据湖存储服务，并借助开源大数据生态的Spark、Flink、Hive和Trino等计算引擎来实现数据湖的分析。其中，Trino是针对OLAP设计的用于高效的分布式查询大量数据的分析引擎。主要具备下列优点：
- 屏蔽底层数据源，提供统一查询接口。
- 基于内存计算，可以跨不同数据源完成联邦查询。
- 使用Trino进行数据治理，可以通过Trino进行异构数据的提取、整合与分析，打破数据孤岛、提高数据治理能力。
 
#### 前提条件
- 完成Trino部署，了解更多请参考[Trino最新版本的官方文档](https://trino.io/docs/current/)，如需查看指定版本的官方文档，请访问https://trino.io/docs/*VersionID* / ，将*VersionID*替换为版本号，比如https://trino.io/docs/460/ 即访问Trino 460的官方文档。

- 完成Hadoop部署并对接OBS，详情参考[Hadoop对接OBS](https://support.huaweicloud.com/bestpractice-obs/obs_05_1507.html)。
 
#### 配置OBS对接
1. 复制hadoop-huaweicloud-3.1.1-hw-xxx.jar到${TRINO_HOME}/plugin/iceberg/hdfs目录。
2. 部署Hive MetaStore，推荐使用远程模式。
3. 配置catalog。 
   执行以下命令，进入配置文件编辑页面：
   ```
   vim $TRINO_HOME/etc/catalog/iceberg.properties
   ```
   在配置文件中写入以下配置项：
   ```
   connector.name=iceberg
   hive.metastore.uri=thrift://jtc-vm:9083
   fs.hadoop.enabled=true
   hive.config.resources=${HADOOP_HOME}/etc/hadoop/core-site.xml
   ```
   其中uri参数为HMS服务的URI，您需要结合自身的业务和环境进行配置。
   修改完成后，按"Esc"，输入**:wq**保存并退出文件编辑。
   
   
4. 使用Trino Client CLI连接Trino Server进行验证，连接时使用参数--catalog指定Catalog名称。 
   ```
   trino Trino_URI  --catalog Catalog_Name
   ```
   其中*Trino_URI* 请参考${TRINO_HOME}/etc/config.properties。*Catalog_Name*为上一步配置的connector.name。例如：
   ```
   trino http://jtc-vm:8080 --catalog iceberg
   ```
   
   
5. 创建SCHEMA并指定LOCATION，请执行以下命令： 
   ```
   CREATE SCHEMA schema_name AUTHORIZATION user_name WITH (LOCATION = file_path);
   ```
   - schema_name：SCHEMA名称，此处以schema_example为例。
   
   - user_name：用户名。此处以root为例。
   
   - file_path：OBS桶中目录的路径，例如桶名为jtc-pfs001，目录名为warehouse/trino-iceberg：
     ```
     CREATE SCHEMA schema_example AUTHORIZATION root WITH (LOCATION = 'obs://jtc-pfs001/warehouse/trino-iceberg');
     ```
     
   
   
   
   
6. 创建TABLE，指定上一步的SCHEMA。 
   ```
   CREATE TABLE IF NOT EXISTS schema_example.orders(
       order_key bigint, 
       order_status varchar, 
       total_price double, 
       order_date date);
   ```
   
   
 
