全部產品
Search
文件中心

E-MapReduce:啟用Trino文法進行資料湖分析

更新時間:Mar 13, 2025

StarRocks 3.x版本在進行資料湖分析時,支援相容Trino文法。本文介紹如何在StarRocks中利用Trino文法進行資料湖分析,特別是針對從Trino遷移至StarRocks的使用者,旨在實現無縫切換且無需更改原有SQL語句。

前提條件

啟用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