全部產品
Search
文件中心

E-MapReduce:Unified Catalog

更新時間:Oct 09, 2024

Unified Catalog是一種External Catalog,自3.2版本起支援。通過Unified Catalog,您可以將多個資料湖資料來源作為一個融合的資料來源,直接操作其中各種類型的表資料。

背景資訊

通過Unified Catalog,您可以把Apache Paimon、Apache Hive™、Apache Iceberg、Apache Hudi、Apache Kudu和Delta Lake資料來源作為一個融合的資料來源,不需要執行匯入就可以直接操作其中的表資料,包括:

  • 無需手動建表,通過Unified Catalog直接查詢Paimon、Hive、Iceberg、Hudi、Kudu和Delta Lake資料來源裡的資料。

  • 通過INSERT INTO或非同步物化視圖(2.5版本及以上)將Hive、Iceberg、Hudi、Delta Lake和Kudu資料來源裡的資料進行加工建模,並匯入至StarRocks。

  • 在StarRocks側建立或刪除Hive、Iceberg庫表。

為保證正常訪問融合資料來源內的資料,StarRocks叢集必須能夠訪問融合資料來源的儲存系統和中繼資料服務。目前 StarRocks 支援以下儲存系統和中繼資料服務:

  • Distributed File System(HDFS)或阿里雲Object Storage Service。

  • 中繼資料服務。當前支援的中繼資料服務包括:資料湖構建(DLF)、Hive Metastore(以下簡稱HMS)。

使用限制

一個Unified Catalog當前只支援對接一個中繼資料服務。因此,您需要確保通過Unified Catalog訪問的所有資料來源都使用同一個中繼資料服務。

  • 當中繼資料類型是hive時,Unified Catalog支援訪問Apache Paimon、Apache Hive、Apache Iceberg、Apache Hudi、Apache Kudu和Delta Lake資料來源的資料。您還需確保Serverless StarRocks叢集能夠正常訪問您所使用的Hive叢集。

  • 當中繼資料類型是dlf時,Unified Catalog支援訪問Apache Paimon、Apache Hive、Apache Iceberg、Apache Hudi和Delta Lake資料來源的資料。

說明
  • 當Unified Catalog訪問Apache Paimon資料來源的中繼資料類型為dlf時,StarRocks版本必須為3.2.8及以上。

  • 當Unified Catalog訪問Apache Iceberg資料來源的中繼資料類型為dlf時,StarRocks版本必須為3.2.9及以上。

建立Unified Catalog

文法

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
    "type" = "unified",
    MetastoreParams
)

參數說明

  • catalog_name:Unified Catalog的名稱,必選參數。命名要求如下:

    • 必須由字母(a~z或A~Z)、數字(0~9)或底線(_)組成,並且只能以字母開頭。

    • 總長度不能超過64個字元。

  • comment:Unified Catalog的描述。此參數為可選。

  • type:資料來源的類型。設定為unified

  • MetastoreParams:StarRocks訪問中繼資料服務的相關參數配置。使用的中繼資料類型不同,參數的配置也不同。

    • 使用DLF

      屬性

      是否必須

      說明

      unified.metastore.type

      資料來源類型,取值為dlf

      dlf.catalog.id

      DLF中已有的資料目錄ID。僅當hive.metastore.type配置為dlf時需要填寫該參數。如果未配置dlf.catalog.id參數的值,則系統將使用預設的DLF Catalog。

      paimon.catalog.warehouse

      當使用Paimon資料來源時填寫。

      Paimon資料所在的Warehouse儲存路徑,支援HDFS、OSS和OSS-HDFS。OSS或OSS-HDFS格式為:oss://<yourBucketName>/<yourPath>

      重要

      若使用OSS或OSS-HDFS作為warehouse,須配置參數aliyun.oss.endpoint。詳情請參見StorageCredentialParams:StarRocks訪問Paimon叢集檔案儲存體的相關參數配置。

    • 使用Hive MetaStore

      參數

      是否必須

      說明

      unified.metastore.type

      中繼資料服務的類型。設定為hive

      hive.metastore.uris

      HMS的URI。格式為thrift://<HMS IP地址>:<連接埠號碼>,連接埠號碼預設為9083。

      如果您的HMS開啟了高可用模式,此處可以填寫多個HMS地址並用逗號分隔,例如:"thrift://<HMS IP地址1>:<HMS連接埠號碼 1>,thrift://<HMS IP地址2>:<HMS 連接埠號碼2>,thrift://<HMS IP地址3>:<HMS連接埠號碼3>"

樣本

以下樣本建立了一個名為unified_catalog的Unified Catalog,用於查詢融合資料來源裡的表資料。

  • 中繼資料類型unified.metastore.typedlf

    CREATE EXTERNAL CATALOG unified_catalog
    PROPERTIES
    (
        "type"="unified",
        "unified.metastore.type"="dlf",
        "paimon.catalog.warehouse"="oss://<YourBucketName>/<YourPath>/",
         "dlf.catalog.id" = "unified_dlf_test"
    );
  • 中繼資料類型unified.metastore.typehive,使用HDFS作為儲存。

    CREATE EXTERNAL CATALOG unified_catalog
    PROPERTIES
    (
        "type" = "unified",
        "unified.metastore.type" = "hive",
        "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );

查看Unified Catalog

  • 您可以通過SHOW CATALOGS查詢當前所在StarRocks叢集裡所有Catalog。

    SHOW CATALOGS;
  • 您也可以通過SHOW CREATE CATALOG查詢某個External Catalog的建立語句。

    SHOW CREATE CATALOG unified_catalog;

切換Unified Catalog和資料庫

您可以通過如下方法切換至目標Unified Catalog和資料庫。

  • 先通過SET CATALOG指定當前會話生效的Unified Catalog,然後再通過USE指定資料庫。

    -- 切換當前會話生效的 Catalog
    SET CATALOG <catalog_name>
    -- 指定當前會話生效的資料庫
    USE <db_name>
  • 通過USE直接將會話切換到目標Unified Catalog下的指定資料庫。

    USE <catalog_name>.<db_name>

刪除Unified Catalog

您可以通過DROP CATALOG刪除某個External Catalog。

例如,通過如下命令刪除Unified Catalogunified_catalog

DROP CATALOG unified_catalog;

查看Unified Catalog內的表結構

您可以通過如下方法查看Hive表的表結構:

  • 查看錶結構

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
  • 從CREATE命令查看錶結構和表檔案存放位置

    SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;

查詢Unified Catalog內的表資料

  • 您可以通過如下操作查詢Unified Catalog內的表資料。

    1. 通過SHOW DATABASES查看指定 Unified Catalog 所屬的資料來源中的資料庫。

      SHOW DATABASES FROM <catalog_name>;
    2. 切換Unified Catalog和資料庫

    3. 通過SELECT查詢目標資料庫中的目標表。

      SELECT count(*) FROM <table_name> LIMIT 10;
  • 您也可以通過SELECT查詢目標資料庫中的目標表。

    SELECT * FROM <catalog_name>.<database_name>.<table_name>;

從Hive、Iceberg、Hudi、Delta Lake或Kudu匯入資料

您可以通過INSERT INTO將 Hive、Iceberg、Hudi、Delta Lake或Kudu表中的資料匯入StarRocks中Unified Catalog下的表。

例如,通過如下命令將Hive表hive_table的資料匯入到StarRocks中Unified Catalogunified_catalog下資料庫test_database裡的表test_table

INSERT INTO unified_catalog.test_database.test_table SELECT * FROM hive_table;

在Unified Catalog內建立資料庫

同StarRocks內部資料目錄(Internal Catalog)一致,如果您擁有Unified Catalog的CREATE DATABASE許可權,那麼您可以使用CREATE DATABASE在該Unified Catalog內建立資料庫。

說明
  • 您可以通過GRANTREVOKE操作對使用者和角色進行許可權的賦予和收回。

  • 當前僅支援建立Hive資料庫和Iceberg資料庫。

切換至目標Unified Catalog,然後通過如下語句建立資料庫。

CREATE DATABASE <database_name>
[properties ("location" = "<prefix>://<path_to_database>/<database_name.db>")]

如果您在建立資料庫時不指定location,那麼系統會使用預設的<warehouse_location>/<database_name.db>作為檔案路徑。

location:用於指定資料庫所在的檔案路徑,支援HDFS、阿里雲OSS或OSS-HDFS。其中,prefix根據儲存系統的不同而不同。

  • HDFS:取值為hdfs

  • 阿里雲OSS或OSS-HDFS:取值為oss

從Unified Catalog內刪除資料庫

同StarRocks內部資料庫一致,如果您擁有Unified Catalog內資料庫的DROP許可權,那麼您可以使用DROP DATABASE來刪除該資料庫。僅支援刪除空資料庫。

說明
  • 您可以通過GRANTREVOKE操作對使用者和角色進行許可權的賦予和收回。

  • 當前僅支援刪除Hive資料庫和Iceberg資料庫。

  • 刪除資料庫操作並不會將HDFS或阿里雲OSS上的對應檔案路徑刪除。

切換至目標Unified Catalog,然後通過如下語句刪除資料庫。

DROP DATABASE <database_name>;

在Unified Catalog內建立表

同StarRocks內部資料庫一致,如果您擁有Unified Catalog內資料庫的CREATE TABLE許可權,那麼您可以使用CREATE TABLE或CREATE TABLE AS SELECT (CTAS)在該資料庫下建立表。

說明
  • 您可以通過GRANTREVOKE操作對使用者和角色進行許可權的賦予和收回。

  • 當前僅支援建立Hive表和Iceberg表。

切換至目標Unified Catalog和資料庫,然後通過CREATE TABLE建立Hive表或Iceberg表。

CREATE TABLE <table_name>
(column_definition1[, column_definition2, ...]
ENGINE = {|hive|iceberg}
[partition_desc]

有關建立Hive表和Iceberg表的詳細資料,請參見建立Hive表建立Iceberg表

例如,通過如下語句,建立一張Hive表hive_table

CREATE TABLE hive_table
(
    action varchar(65533),
    id int,
    dt date
)
ENGINE = hive
PARTITION BY (id,dt);

向Unified Catalog內的表中插入資料

同StarRocks內表一致,如果您擁有Unified Catalog內表的INSERT許可權,那麼您可以使用INSERT將StarRocks表資料寫入到該表(當前僅支援寫入到Parquet格式的Unified Catalog表)。

說明
  • 您可以通過GRANTREVOKE操作對使用者和角色進行許可權的賦予和收回。

  • 當前僅支援向Hive表和Iceberg表中插入資料。

切換至目標Unified Catalog和資料庫,然後通過INSERT INTO向Hive表或Iceberg表中插入資料。

INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

-- 向指定分區寫入資料。
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

有關向Hive表和Iceberg表中插入資料的詳細資料,請參見向Hive表中插入資料向Iceberg表中插入資料

例如,通過如下語句,向Hive表hive_table中寫入如下資料。

INSERT INTO hive_table
VALUES
    ("buy", 1, "2023-09-01"),
    ("sell", 2, "2023-09-02"),
    ("buy", 3, "2023-09-03");

從Unified Catalog內刪除表

同StarRocks內表一致,如果您擁有Unified Catalog內表的DROP許可權,那麼您可以使用DROP TABLE來刪除該表。

說明
  • 您可以通過GRANTREVOKE操作對使用者和角色進行許可權的賦予和收回。

  • 當前僅支援刪除Hive表和Iceberg表。

切換至目標Unified Catalog和資料庫,然後通過DROP TABLE刪除Hive表或Iceberg表。

DROP TABLE <table_name>;

例如,通過如下語句,刪除Hive表hive_table

DROP TABLE hive_table FORCE;