全部產品
Search
文件中心

Realtime Compute for Apache Flink:管理Hologres Catalog

更新時間:Aug 16, 2025

配置Hologres Catalog後,您可以在Realtime Compute開發控制台直接讀取Hologres中繼資料,無需再手動註冊Hologres表,從而提高作業開發的效率且保證資料的正確性。本文為您介紹如何配置、查看、使用及刪除Hologres Catalog。

前提條件

已完成獨享Hologres執行個體的建立,同時在執行個體中已完成資料庫的建立。具體操作可參見建立資料庫

使用限制

  • 不支援修改Catalog。如果需要修改,要先刪掉已建立的Catalog重新建立。

  • Hologres執行個體必須為獨享執行個體,不支援共用叢集執行個體,原因是Realtime ComputeFlink版僅支援讀寫Hologres內表。

建立Hologres Catalog

重要

Catalog建立完成後,配置資訊不支援修改。如果需要修改,要刪掉已建立的Catalog重新建立。

UI方式

如果您需要設定Hologres連接器支援的參數,可以採用SQL方式建立Hologres Catalog。

  1. 進入資料管理頁面。

    1. 登入Realtime Compute管理主控台,單擊目標工作空間操作列下的控制台

    2. 單擊資料管理

  2. 單擊建立Catalog,選擇Hologres後,單擊下一步

  3. 填寫參數配置資訊。

    image

    參數

    說明

    是否必填

    備忘

    catalogname

    Hologres Catalog名稱。

    僅支援小寫字母a-z和數字0-9,不含大寫字母、中劃線(-)、底線(_)等特殊字元。

    endpoint

    Hologres執行個體的網路連接埠。

    Hologres執行個體與Flink工作空間在同一VPC:進入Hologres管理主控台,在目標執行個體的詳情頁面的網路資訊地區擷取對應的指定VPC網路資訊。

    其他網路類型請參見如何擷取Hologres的Endpoint地址?

    username

    • 自訂帳號的使用者名稱,格式為BASIC$<user_name>

    • 阿里雲帳號或RAM使用者的AccessKey ID。

    • 當前配置的使用者需要能夠訪問對應的Hologres資料庫,Hologres資料庫許可權及使用者管理詳情請參見Hologres許可權模型使用者管理

    • AK取值的擷取方式詳情請參見如何查看AccessKey ID和AccessKey Secret資訊?

      重要
      • 為了避免您的AK或密碼資訊泄露,建議您通過專案變數的方式填寫其取值,詳情請參見專案變數

      • 自訂賬戶所建立的Catalog僅顯示擁有相應許可權的資料庫;使用AK/SK建立,則可以顯示該執行個體下所有資料庫。

    password

    • 自訂帳號的密碼。

    • 阿里雲帳號或RAM使用者的AccessKey Secret。

    dbname

    Hologres的資料庫名稱。

    在目標Hologres執行個體中已完成資料庫的建立,否則建立Catalog會報錯。

  4. 單擊確定

    建立完成後,中繼資料下即可查看建立的Catalog。

SQL方式

  1. 資料查詢文本編輯地區,輸入配置Hologres Catalog的命令。

    文法

    CREATE CATALOG <catalogname> WITH (
      'type' = 'hologres',
      'endpoint' = '<endpoint>', 
      'username' = '<AccessKey>',
      'password' = '<AccessSecret>',
      'dbname' = '<dbname>'
    );

    樣本

    簡單樣本

    即時消費樣本

    CREATE CATALOG holocatalog WITH (
      'type' = 'hologres',
      'endpoint' = 'hgpostcn-cn-******-cn-hangzhou-vpc-st.hologres.aliyuncs.com:80', 
      'username' = 'LTAI********************',
      'password' = '${secret_values.ak_holo}',
      'dbname' = 'holo_test'
    );

    需要開啟Binlog,且支援消費Binlog資料。

    CREATE CATALOG holocatalog WITH (
      'type' = 'hologres',
      'endpoint' = 'hgpostcn-cn-******-cn-hangzhou-vpc-st.hologres.aliyuncs.com:80', 
      'username' = 'LTAI********************',
      'password' = '${secret_values.ak_holo}',
      'dbname' = 'holo_test',
      'binlog' = 'true', -- 建立catalog時可以設定源表、維表和結果表支援的with參數,之後在使用此catalog下的表時會預設添加這些預設參數。
      'cdcmode' = 'true',
      'connectionpoolname' = 'the_conn_pool',
      'table_property.binlog.level' = 'replica', --也可以在建立catalog時傳入持久化的hologres表屬性,之後建立表時,預設都開啟binlog。
      'table_property.binlog.ttl' = '259200'
    );

    參數詳情如下表所示。

    參數

    說明

    是否必填

    備忘

    catalogname

    Hologres Catalog名稱。

    僅支援小寫字母a-z和數字0-9,不含大寫字母、中劃線(-)、底線(_)等特殊字元。

    type

    類型。

    固定值為hologres。

    endpoint

    Hologres的Endpoint地址。

    Hologres執行個體與Flink工作空間在同一VPC:進入Hologres管理主控台,在目標執行個體的詳情頁面的網路資訊地區擷取對應的指定VPC網路資訊。

    其他網路類型請參見如何擷取Hologres的Endpoint地址?

    username

    阿里雲帳號的AccessKey。

    詳情請參見如何查看AccessKey ID和AccessKey Secret資訊?

    說明
    • 為了避免您的AK資訊泄露,建議您通過變數的方式填寫password取值,詳情請參見專案變數

    • 當前配置的AccessKey對應的使用者需要能夠訪問對應的Hologres資料庫,Hologres資料庫許可權請參見Hologres許可權模型

    password

    阿里雲帳號的AccessSecret。

    dbname

    Hologres的資料庫名稱。

    在目標Hologres執行個體中已完成資料庫的建立,否則建立Catalog會報錯。

    ignore-non-persisted-options

    在使用Hologres Catalog時建立帶有不可持久化選項的表時,是否忽略非可持久化選項。

    參數取值如下:

    • true(預設值):可以成功建立出表,而忽略所有非可持久化選項。

    • false:會報建立表失敗的錯誤。

    說明

    Hologres Catalog表選項的可持久化意味著當再次從Catalog讀取該表的相關資訊時,可以重新擷取您在DDL中定義的一致的資訊。目前僅支援endpoint、username、password和dbname可持久化選項。

    catalog.table.metadata-columns

    通過此catalog來指定一個源表時,表的Schema可以按需添加Hologres Binlog源表的中繼資料列。多個中繼資料列使用英文分號';'分隔,例如:hg_binlog_event_type;hg_binlog_timestamp_us

    預設不添加中繼資料列,當配置該參數時,返回的表Schema會額外添加指定的中繼資料列,這些列只適用於Hologres Binlog源表,所以該Catalog返回的表只能用作資料來源表,不可以用作結果表或維表。目前支援6種meta-column,詳情請參見 Hologres Binlog欄位組成

    說明

    僅Realtime Compute引擎VVR 8.0.11及以上版本支援該參數。

    其他Hologres連接器支援的參數

    在建立Catalog時可以填入一些參數,包括WITH參數,之後使用此Catalog中的表時,將會預設配置這些參數。

    使用此功能,需要ignore-non-persisted-options參數配置為true。

  2. 輸入建立Catalog的代碼後,單擊右上方的運行完成Catalog的建立。

查看Hologres Catalog

Hologres Catalog配置成功後,您可以通過以下步驟查看Hologres中繼資料。

  1. 進入資料管理頁面。

    1. 登入Realtime Compute管理主控台

    2. 單擊目標工作空間操作列下的控制台

    3. 單擊資料管理

  2. Catalog列表頁面,查看Catalog名稱類型

    單擊查看,可以查看目標Catalog下的資料庫和表。如果Schema為public,則表名稱前面就省略了Schema的首碼,即直接顯示tableName。

使用Hologres Catalog

注意事項

  • 如果Schema為public,在填寫${schema_name.table_name}時,可以省略模式名稱的首碼,直接填寫tableName,即${table_name}。

  • 通過Hologres Catalog讀取出來的表支援消費update資料,讀取出來的Hologres表的ignoredelete屬性預設為false,mutatetype屬性預設為insertorupdate。ignoredelete和mutatetype屬性含義詳情請參見寬表Merge和局部更新功能

建立Hologres表

要建立的表資訊:Hologres Catalog為holocatalog、資料庫為holodb、表為holotable

說明
  • 在登入的Hologres資料服務下建立表時,WITH參數中connector為必填參數,且取值為hologres,可省略endpoint等其他參數。

  • 目前不支援直接在Hologres表中添加或修改支援的WITH參數。對於這些參數,您可以通過SQL hints的方式在INSERT語句中添加或修改。

具體的操作如下:

UI方式

  1. 進入資料管理頁面。

    1. 登入Realtime Compute管理主控台

    2. 單擊目標工作空間操作列下的控制台

    3. 單擊資料管理

  2. 進入目標資料庫。

    1. 單擊目標Catalog名稱對應操作列的查看

    2. 單擊目標資料庫名稱對應操作列的查看

  3. 建立Hologres表。

    1. 單擊建立表

    2. 使用內建連接器串連頁簽,選擇即時數倉Hologres連接器,單擊下一步

    3. 填寫建表語句並配置相關參數資訊。程式碼範例如下。

      文法

      樣本

      CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` (
       ...
      ) WITH (
       'connector' = 'hologres'
      );
      CREATE TABLE `holocatalog`.`holo_test`.`product` (
       id INT,
       name STRING
      ) WITH (
       'connector' = 'hologres'
      );
    4. 單擊確定

SQL命令方式

  1. 資料查詢文本編輯地區,輸入以下建表語句。

    通常,有以下幾種方式建立Hologres表:

    使用USE CATALOG HoloName命令

    使用USE語句直接引用Hologres Catalog。

    文法

    樣本

    USE CATALOG ${catalog_name};
    CREATE TABLE `${db_name}`.`${schema_name.table_name}`(
      ...
     ) WITH (
       'connector' = 'hologres'
     );
    USE CATALOG holocatalog;
    CREATE TABLE `holodb`.`holotable` (
     id INT,
     name STRING
    ) WITH (
     'connector' = 'hologres'
    );

    使用DDL語句

    在DDL語句中直接引用Hologres Catalog。

    文法

    樣本

    CREATE TABLE `${catalog_name}`.`${db_name}`.`${schema_name.table_name}`(
      ...
     ) WITH (
       'connector' = 'hologres'
     );
    CREATE TABLE `holocatalog`.`holodb`.`holotable` (
     id INT,
     name STRING
    ) WITH (
     'connector' = 'hologres'
    );

    在DDL語句中可以設定物理表屬性。

    CREATE TABLE `holocatalog`.`holodb`.`holotable` (
      id INT,
      name STRING
    ) WITH (
      'connector' = 'hologres',
      'table_property.orientation' = 'column',
      'table_property.distribution_key' = 'a',
      'table_property.clustering_key' = 'b:desc',
      'table_property.bitmap_columns' = 'a,b',
      'table_property.segment_key' = 'c',
      'table_property.time_to_live_in_seconds' = '86400',
      'table_property.binlog.level' = 'replica',
      'table_property.binlog.ttl' = '86400'
    );
  2. 輸入建表語句後,單擊右上方的運行完成表的建立。

建立Hologres表時,允許在WITH參數中設定表屬性(部分屬性無法修改),合理的表屬性設定可以有助於系統高效地組織和查詢資料。

  • 物理表屬性:當前支援的表屬性與Hologres側是一致的,Catalog側僅是加上了table_property.首碼用以區分。參數詳情請參見建表概述訂閱Hologres Binlog

    參數

    說明

    使用樣本

    是否支援修改

    table_property.orientation

    表格儲存體格式。

    'table_property.orientation' = 'row,column'

    不支援修改

    table_property.table_group

    Table Group。

    'table_property.table_group' = 'table_group_xxx'

    table_property.distribution_key

    分布鍵。

    'table_property.distribution_key' = 'a,b'

    table_property.clustering_key

    聚簇索引。

    'table_property.clustering_key' = 'a,b:desc'

    able_property.event_time_column(原table_property.segment_key)

    分段鍵。

    'table_property.event_time_column' = 'c,d'(或者 'table_property.segment_key' = 'c,d')

    table_property.bitmap_columns

    位元影像索引。

    'table_property.bitmap_columns' = 'a:on,b:off'

    支援修改

    table_property.dictionary_encoding_columns

    位元編碼。

    'table_property.dictionary_encoding_columns' = 'a:on,b:off,c:auto'

    table_property.time_to_live_in_seconds

    表資料聲明周期。

    'table_property.time_to_live_in_seconds' = '864000'

    table_property.binlog.level

    是否開啟Binlog。

    'table_property.binlog.level' = 'replica'

    table_property.binlog.ttl

    Binlog的TTL。

    'table_property.binlog.ttl' = '86400'

  • 寬容模式參數:在使用Hologres Catalog建立表時,可以通過參數enableTypeNormalization設定是否開啟類型寬容模式。

    維度

    說明

    使用情境

    在CTAS等情境中,需要調整已有欄位資料類型的精度(如從VARCHAR(10)到VARCHAR(20))或者修改資料類型(如從SMALLINT修改為INT)。

    注意事項

    • 寬容模式應該在初次開機CTAS作業時開啟,如果在初次開機時未開啟寬容模式,需要刪除下遊表並且將作業無狀態重啟才會生效。

    • 開啟寬容模式後,在上遊發生資料類型修改事件時,只要所修改類型與原類型的歸一化類型相同,則視作類型修改成功,CTAS作業正常運行。否則屬於不相容的情況,CTAS作業會拋出異常。

    參數取值

    • false(預設值):根據類型映射正常建立Hologres物理表。

    • true:啟用類型寬容模式,在建立Hologres物理表時,會使用類型歸一化後精度更高的資料類型。目前類型歸一化規則如下:

      • TINYINT、SMALLINT、INT和BIGINT歸一化為BIGINT。

      • CHAR、VARCHAR和STRING歸一化為STRING。

      • FLOAT和DOUBLE歸一化為DOUBLE。

      • 其他資料類型按照原本的類型映射規則建立,詳情請參見類型映射

修改Hologres表

目前Hologres Catalog支援的修改表操作及樣本如下:

操作

文法及樣本

修改表屬性

僅部分表屬性支援修改,詳情參考建立Hologres表

  • 文法:

    ALTER TABLE `${catalog_name}`.`${db_name}`.`${schema_name.table_name}` SET (
      'table_property.binlog.level' = 'replica',
      'table_property.binlog.ttl' = '64700'
    );
  • 樣本:

    ALTER TABLE `holocatalog`.`holodb`.`holotable` SET (
      'table_property.binlog.level' = 'replica',
      'table_property.binlog.ttl' = '64700'
    );

重新命名表

  • 文法:

    ALTER TABLE `${catalog_name}`.`${db_name}`.`${schema_name.table_name}` 
    RENAME TO `${catalog_name}`.`${db_name}`.`${schema_name.new_table_name}`;
  • 樣本:

    ALTER TABLE `holocatalog`.`holodb`.`holotable` 
    RENAME TO `holocatalog`.`holodb`.`new_holotable`;

增加列

  • 文法:

    ALTER TABLE `${catalog_name}`.`${db_name}`.`${schema_name.table_name}` 
    ADD <column_name> <column_datatype> COMMENT '<column_comment>';
  • 樣本:

    ALTER TABLE `holocatalog`.`holodb`.`holotable` 
    ADD address STRING COMMENT '地址資訊';

修改列名

  • 文法:

    ALTER TABLE `${catalog_name}`.`${db_name}`.`${schema_name.table_name}` 
    RENAME <old_column_name> TO <new_column_name>;
  • 樣本:

    ALTER TABLE `holocatalog`.`holodb`.`holotable` 
    RENAME address TO new_address;

修改列注釋

  • 文法:

    ALTER TABLE `${catalog_name}`.`${db_name}`.`${schema_name.table_name}` 
    MODIFY <column_name> <original_column_type> COMMENT '<new_column_comment>';
  • 樣本:

    ALTER TABLE `holocatalog`.`holodb`.`holotable` 
    MODIFY new_address STRING COMMENT '新的地址資訊';

讀寫Hologres表

  • 讀取Hologres表資料寫入到結果表中。

    Flink預設以批模式讀取Hologres源表資料,不會即時消費新寫入的資料。要即時消費Hologres資料,您可以採用以下任一方案。

    • 在建立Hologres Catalog時配置:在建立Catalog時採用SQL方式,開啟Binlog並消費Binlog資料,具體請參考即時消費樣本。然後讀取Hologres資料,程式碼範例如下。

      文法

      樣本

      INSERT INTO ${other_sink_table}
      SELECT ...
      FROM `${catalog_name}`.`${db_name}`.`${schema_name.table_name}`;
      INSERT INTO sink_table
      SELECT id, name
      FROM `holocatalog`.`holodb`.`holotable`;
    • 更改讀模數式為流模式:通過Table Hint方式將讀模數式更改為流模式,在SQL中添加/*+ OPTIONS('binlog'='true') */ 參數。程式碼範例如下。

      INSERT INTO sinktable
      SELECT id, name
        FROM `holocatalog`.`holodb`.`holotable`
        /*+ OPTIONS ('binlog' = 'true') */;
  • 將源表資料寫入到Hologres表中。

    文法

    樣本

    INSERT INTO `${catalog_name}`.`${db_name}`.`${schema_name.table_name}`
    SELECT ... 
    FROM ${other_source_table}
    INSERT INTO `holocatalog`.`holodb`.`holotable`
    SELECT id, name 
    FROM source_table;

作為CTAS的目標端Catalog

  • 文法

    CREATE TABLE IF NOT EXISTS `${catalog_name}`.`${db_name}`.`${schema_name.table_name}`
    WITH (
      'connector' = 'hologres'
    ) AS TABLE ${other_source_table};
  • 樣本

    CREATE TABLE IF NOT EXISTS `holocatalog`.`holodb`.`holotable`
    WITH (
      'connector' = 'hologres'
    ) AS TABLE source_table;

CTAS支援在WITH參數中設定物理表屬性,在建立目標表時,同時在表上設定對應的屬性。具體支援的表屬性參數詳情,請參見建立Hologres表

當從源端同步資料過程中,為保證資料能夠寫入Hologres,Hologres Catalog會在以下情況被迫改寫目標端的Schema:

  • 上遊Schema使用DECIMAL類型的列作為主鍵。

    由於Hologres不支援DECIMAL類型作為主鍵,因此Hologre預設會改寫該列類型為BIGINT。如果該改寫不滿足您的需求,則您也可以使用CTAS文法將引用的類轉換為STRING類型,並重建立立主鍵。

  • 上遊Schema中包含類型TIME、TIMESTAMP或TIMESTAMP_LTZ且精度大於6。

    由於Hologres支援的時間類型精度為6,因此為了確保資料能夠寫入到Hologres中,Flink會隱式地丟棄高於Hologres所支援的最高精度的部分。

作為CDAS的目標端Catalog

  • 文法

    CREATE DATABASE IF NOT EXISTS `${catalog_name}`.`${db_name}`
    WITH (
      'sink.parallelism' = '5' -- 設定每張結果表的並發數。
    ) AS DATABASE ${other_source_database};
  • 樣本

    CREATE DATABASE IF NOT EXISTS `holocatalog`.`holodb`
    WITH (
      'sink.parallelism' = '5' -- 設定每張結果表的並發數。
    ) AS DATABASE source_database;

WITH參數設定:

  • 支援聲明結果表的參數:當作業啟動時,這些參數將被應用到需要同步的下遊表中。具體支援調節的參數可參見即時數倉Hologres結果表

  • 支援指定schemaname:將資料同步到Hologres目標庫的指定Schema中。參數資訊如下。

    參數

    說明

    是否必填

    備忘

    schemaname

    schema名稱。

    預設值為public。

  • 不支援設定物理表屬性:每張目標表可能需要設定不同的表屬性,WITH參數不支援為每張表分別設定屬性。

    如果您需要設定表屬性,需要先手動建立目標表,再去啟動CDAS作業。物理表屬性的詳細資料請參見建立Hologres Catalog

刪除Hologres Catalog

重要

刪除Hologres Catalog不會影響已啟動並執行作業,但對未上線或者需要暫停恢複的作業均產生影響,請您謹慎操作。

UI方式

  1. 進入資料管理頁面。

    1. 登入Realtime Compute管理主控台

    2. 單擊目標工作空間操作列下的控制台

    3. 單擊資料管理

  2. Catalog列表頁面,單擊目標Catalog名稱對應操作列下的刪除

  3. 在彈出的對話方塊中,單擊刪除

  4. 刪除完成後,在左側中繼資料地區查看目標Catalog是否已刪除。

SQL命令方式

  1. 資料查詢文本編輯地區,輸入以下命令。

    DROP CATALOG ${catalog_name}

    其中,${catalog_name}為您要刪除的在Realtime Compute開發控制台上顯示的Hologres Catalog名稱。

  2. 選中刪除Catalog的命令,滑鼠右鍵選擇運行

  3. 在左側中繼資料地區,查看目標Catalog是否已刪除。

常見問題

相關文檔