启用Trino语法进行数据湖分析

StarRocks 3.x版本在进行数据湖分析时,支持兼容Trino语法。本文介绍如何在StarRocks中利用Trino语法进行数据湖分析,特别是针对从Trino迁移至StarRocks的用户,旨在实现无缝切换且无需更改原有SQL语句。

前提条件

  • 已创建数据湖分析版StarRocks实例,详情请参见快速使用数据湖分析版实例

  • 已创建包含Hive服务的集群,详情请参见创建集群

    重要

    请确保EMR集群和Serverless StarRocks实例使用相同的VPC。

启用Trino语法及函数

  • 临时生效方式:在您的客户端命令行中执行 SET sql_dialect = 'trino';命令,即刻为本次会话切换至Trino的语法规则及函数集。此设置局限于当前会话,不影响其他用户或后续会话。

  • 全局生效方式:若希望所有新建立的会话都默认使用Trino语法,您需要执行管理员权限命令SET GLOBAL sql_dialect = 'trino';

    重要

    此操作影响范围更广,请谨慎操作。

使用示例

StarRocks的日期函数dayofyear在Trino中对应函数为day_of_yeardoy。如果您更习惯使用Trino的函数写法,就可以通过设置sql_dialect解决此问题。本文就以该日期函数为例,向您介绍如何在StarRocks中使用Trino语法及函数。

  1. 创建测试表。

    1. 通过SSH方式连接集群的节点,详情请参见登录集群

    2. 连接Hive,详情请参见Hive连接方式

    3. 执行以下命令,创建一个包含日期类型数据的表。

      create database test_db;
      create table test_db.test_trino(d date);
      insert into test_db.test_trino values ('2024-01-01');
  2. 连接StarRocks实例。

    1. 实例列表页面,单击操作列的连接实例

    2. 新建连接页签,配置以下信息。

      参数

      示例

      描述

      地域

      华东1(杭州)

      选择已创建的StarRocks实例所在的物理位置。

      实例

      StarRocks_Serverlesss

      选择已创建的StarRocks实例的名称。

      连接名称

      Connection_Serverlesss

      实例名称,自定义输入。

      长度限制为1~64字符,仅可使用中文、字母、数字、短划线(-)和下划线(_)。

      用户名

      根据实际情况输入

      默认初始用户名为admin,您可以选择使用该用户名进行连接,或者根据需要创建其他用户,创建用户详情请参见管理用户及数据授权

      密码

      根据实际情况输入

      StarRocks实例中已创建的用户名对应的密码。

    3. 单击测试连通性

    4. 验证通过后,单击确定

      进入SQL Editor页面,即可执行相关的SQL。更多使用信息,请参见通过EMR StarRocks Manager连接StarRocks实例

  3. 创建External Hive Catalog。

    1. 在SQL Editor的查询列表页面,单击image.png图标。

    2. 输入以下命令,单击运行,创建Hive数据源。

      本文示例创建的是Hive数据源,您也可以创建Paimon、Iceberg、Hudi或Delta Lake等任意一种数据湖格式的External Catalog,详情请参见数据湖分析

      CREATE EXTERNAL CATALOG hive_dlf
      PROPERTIES 
      (
          "type" = "hive",
          "hive.metastore.type" = "DLF"
      );
  4. 执行查询。

    • 启用Trino sql_dialect前

      use hive_dlf.test_db;
      select doy(d) from test_trino;

      返回信息报错,提示(1064, 'Getting analyzing error from line 1, column 7 to line 1, column 12. Detail message: No matching function with signature: doy(date).')

    • 启用Trino sql_dialect后

      use hive_dlf.test_db;
      
      -- 开启Trino sql_dialect。
      set sql_dialect = 'trino';
      -- 重新执行查询操作。
      select doy(d) from test_trino;

      返回信息如下所示。image