全部產品
Search
文件中心

Hologres:資料湖加速查詢

更新時間:Aug 03, 2024

基於阿里雲資料湖構建(Data Lake Formation,DLF)和Object Storage Service(Object Storage Service,OSS)推出的Hologres資料湖加速服務,提供了靈活的資料訪問和分析能力以及高效的資料處理能力,顯著加快了對OSS資料湖的查詢和分析過程。

背景資訊

企業數字化轉型不斷深入,資料量急劇增長,傳統資料分析在成本、規模、資料多樣性等方面面臨很大挑戰。Hologres聯合DLF、OSS推出湖倉一體架構的資料湖加速服務,助力企業實現海量資料的低成本儲存、統一的中繼資料管理和高效的資料分析和洞察。

Hologres通過與DLF、OSS無縫整合,以外部表格的方式,無需移動資料(外表只做欄位對應,不真正儲存資料),就能直接加速讀寫儲存於OSS上的Hudi、Delta、Paimon、ORC、Parquet、CSV、SequenceFile等格式類型的資料,降低開發營運成本,打破資料孤島,實現業務洞察。Hologres支援獨享執行個體(資源獨佔)和共用叢集 Serverless (按使用付費)兩種模式,詳見購買Hologres

即時資料湖涉及的阿里雲服務介紹如下:

服務

介紹

相關連結

阿里雲資料湖構建(Data Lake Formation,DLF)

是一款全託管的快速協助使用者構建雲上資料湖及Lakehouse的服務,產品提供了雲上資料湖統一的中繼資料管理、統一的許可權與安全管理、便捷的資料入湖能力以及一鍵式資料探索能力。

DLF產品簡介

阿里雲Object Storage Service(Object Storage Service,OSS)

DLF將OSS作為雲上資料湖的統一儲存,OSS是一款海量、安全、低成本、高可靠的雲端儲存體服務,適合存放任意類型的檔案,可提供12個9的資料持久性,已成為湖資料存放區的事實標準。

什麼是Object Storage Service

OSS-HDFS服務(又名JindoFS)是雲原生資料湖儲存,相比原生OSS儲存,OSS-HDFS與Hadoop生態計算引擎無縫整合,在典型的基於Hive和Spark的離線ETL情境擁有更好的表現,在完全相容HDFS檔案系統介面的同時,提供充分的POSIX能力支援,可以更好地滿足巨量資料和AI等領域的資料湖計算情境。

什麼是OSS-HDFS服務

注意事項

Hologres共用叢集不儲存資料,僅支援外表查詢OSS資料湖。

準備工作

本文以上海地區為例開通OSS、DLF和Hologres服務。

  1. 開通OSS服務並準備測試資料。

    1. 開啟OSS開通頁面,按照介面指引完成開通操作。

      說明

      開通OSS服務後,預設的計費方式是隨用隨付,如果想降低OSS使用費用,建議您購買資源套件

    2. 登入OSS管理主控台,建立儲存空間(Bucket)。具體操作,請參見控制台快速入門

    3. 上傳tpch_10g_orc_3.zip測試資料至Bucket目錄。image.png

      說明
      • 測試資料檔案上傳後,若存在.DS_Store等檔案需手動刪除。

      • 考慮到下載速度,這裡僅包含本文需要的nation_orc、supplier_orc、partsupp_orc資料表。

  2. 開通DLF服務並匯入OSS測試資料。

    1. 訪問開通DLF頁面。

    2. 登入資料湖管理主控台,在中繼資料管理頁面,單擊建立資料庫。具體操作,請參見建立中繼資料庫

      本文以建立mydatabase資料庫為例。

    3. 中繼資料抽取頁面,建立中繼資料抽取任務,將OSS測試資料匯入。具體操作,請參見中繼資料抽取

      抽取完成後,您可以在中繼資料管理頁面的資料表頁簽查看。

      image.png

  3. 開通Hologres服務併購買Hologres執行個體。具體操作,請參見購買Hologres

    說明

    若您是新使用者可以通過阿里雲免費試用頁面,申請免費試用Hologres。

步驟一:配置環境

  1. 在Hologres執行個體中開啟資料湖加速功能。

    訪問Hologres執行個體列表,單擊目標執行個體操作列中的資料湖加速並確認,開啟資料湖加速功能後,Hologres執行個體將重啟。

  2. 登入Hologres執行個體,建立資料庫。具體操作,請參見串連HoloWeb並執行查詢

  3. (可選)建立Extension。本文以dlf_fdw為例。

    說明

    Hologres V2.1版本已預設建立,您無需進行此操作。您可以訪問Hologres執行個體列表,在執行個體詳情頁面確認您的執行個體版本。

    CREATE EXTENSION IF NOT EXISTS dlf_fdw;
    說明

    使用Superuser在SQL編輯器-HoloWeb中執行上述語句建立Extension,該操作針對整個DB生效,一個DB只需執行一次。關於Hologres帳號授權詳情,請參見授權服務帳號

  4. 執行以下語句,建立dlf_server外部伺服器並配置Endpoint資訊,確保Hologres、DLF和OSS之間的正常訪問。關於更多的建立方式和相關參數介紹詳情,請參見建立外部伺服器

    --建立外部伺服器,以上海reigon為例
    CREATE SERVER IF NOT EXISTS dlf_server FOREIGN data wrapper dlf_fdw options (
        dlf_region 'cn-shanghai',
        dlf_endpoint 'dlf-share.cn-shanghai.aliyuncs.com',
        oss_endpoint 'oss-cn-shanghai-internal.aliyuncs.com'); 

步驟二:通過Hologres外部表格查詢OSS資料湖

Hologres外部表格儲存與OSS資料湖資料的映射關係,資料在OSS資料湖中儲存,不佔用Hologres儲存空間,查詢效能一般在秒級至分鐘級。

  1. 建立Hologres外部表格,並將OSS資料湖資料對應至Hologres外部表格。

    IMPORT FOREIGN SCHEMA mydatabase LIMIT TO ----本文以mydatabase為例,建立時需替換為您在DLF中繼資料管理中的自訂的資料庫名稱
    (
      nation_orc,
      supplier_orc,
      partsupp_orc
    )
    FROM SERVER dlf_server INTO public options (if_table_exist 'update');
  2. 資料查詢。

    建立外部表格成功後,可以直接查詢外部表格讀取OSS中的資料。樣本語句如下。

    --TPCH Q11查詢語句
    select
            ps_partkey,
            sum(ps_supplycost * ps_availqty) as value
    from
            partsupp_orc,
            supplier_orc,
            nation_orc
    where
            ps_suppkey = s_suppkey
            and s_nationkey = n_nationkey
            and RTRIM(n_name) = 'EGYPT'
    group by
            ps_partkey having
                    sum(ps_supplycost * ps_availqty) > (
                            select
                                    sum(ps_supplycost * ps_availqty) * 0.000001
                            from
                                    partsupp_orc,
                                    supplier_orc,
                                    nation_orc
                            where
                                    ps_suppkey = s_suppkey
                                    and s_nationkey = n_nationkey
                                    and RTRIM(n_name) = 'EGYPT'
                    )
    order by
            value desc;

步驟三:(可選)通過Hologres內部表查詢OSS資料湖

Hologres內部表查詢是將OSS資料湖資料匯入至Hologres中,資料將在Hologres中儲存,可獲得更好的查詢效能和更高的資料處理能力。關於儲存費用詳情介紹,請參見計費概述

  1. 在Hologres中建立與外部表格相同表結構的內部表,樣本如下。

    -- 建立nation表
    DROP TABLE IF EXISTS NATION;
    
    BEGIN;
    CREATE TABLE NATION (
        N_NATIONKEY int NOT NULL PRIMARY KEY,
        N_NAME text NOT NULL,
        N_REGIONKEY int NOT NULL,
        N_COMMENT text NOT NULL
    );
    CALL set_table_property ('NATION', 'distribution_key', 'N_NATIONKEY');
    CALL set_table_property ('NATION', 'bitmap_columns', '');
    CALL set_table_property ('NATION', 'dictionary_encoding_columns', '');
    COMMIT;
    
    -- 建立supplier表
    DROP TABLE IF EXISTS SUPPLIER;
    
    BEGIN;
    CREATE TABLE SUPPLIER (
        S_SUPPKEY int NOT NULL PRIMARY KEY,
        S_NAME text NOT NULL,
        S_ADDRESS text NOT NULL,
        S_NATIONKEY int NOT NULL,
        S_PHONE text NOT NULL,
        S_ACCTBAL DECIMAL(15, 2) NOT NULL,
        S_COMMENT text NOT NULL
    );
    CALL set_table_property ('SUPPLIER', 'distribution_key', 'S_SUPPKEY');
    CALL set_table_property ('SUPPLIER', 'bitmap_columns', 'S_NATIONKEY');
    CALL set_table_property ('SUPPLIER', 'dictionary_encoding_columns', '');
    COMMIT;
    
    -- 建立partsupp表
    DROP TABLE IF EXISTS PARTSUPP;
    
    BEGIN;
    CREATE TABLE PARTSUPP (
        PS_PARTKEY int NOT NULL,
        PS_SUPPKEY int NOT NULL,
        PS_AVAILQTY int NOT NULL,
        PS_SUPPLYCOST DECIMAL(15, 2) NOT NULL,
        PS_COMMENT text NOT NULL,
        PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY)
    );
    CALL set_table_property ('PARTSUPP', 'distribution_key', 'PS_PARTKEY');
    CALL set_table_property ('PARTSUPP', 'bitmap_columns', 'ps_availqty');
    CALL set_table_property ('PARTSUPP', 'dictionary_encoding_columns', '');
    COMMIT;
  2. 同步Hologres外部表格資料至Hologres內部表。

    ---將Hologres外表資料匯入內表
    INSERT INTO nation SELECT * FROM nation_orc;
    INSERT INTO supplier SELECT * FROM supplier_orc;
    INSERT INTO partsupp SELECT * FROM partsupp_orc;
  3. 查詢Hologres內部表資料。

    --TPCH Q11查詢語句
    select
            ps_partkey,
            sum(ps_supplycost * ps_availqty) as value
    from
            partsupp,
            supplier,
            nation
    where
            ps_suppkey = s_suppkey
            and s_nationkey = n_nationkey
            and RTRIM(n_name) = 'EGYPT'
    group by
            ps_partkey having
                    sum(ps_supplycost * ps_availqty) > (
                            select
                                    sum(ps_supplycost * ps_availqty) * 0.000001
                            from
                                    partsupp,
                                    supplier,
                                    nation
                            where
                                    ps_suppkey = s_suppkey
                                    and s_nationkey = n_nationkey
                                    and RTRIM(n_name) = 'EGYPT'
                    )
    order by
            value desc;

常見問題

建立Hologres外表時,出現ERROR: babysitter not ready,req:name:"HiveAccess"

  • 問題原因:未開啟資料湖加速。

  • 解決方案:訪問Hologres執行個體列表,單擊目標執行個體操作列中的資料湖加速並確認,開啟資料湖加速功能。

相關文檔

以上為樣本教程,關於資料湖功能的完整介紹,請參見OSS資料湖加速