配置Hologres Catalog後,您可以在Realtime Compute開發控制台直接讀取Hologres中繼資料,無需再手動註冊Hologres表,從而提高作業開發的效率且保證資料的正確性。本文為您介紹如何配置、查看、使用及刪除Hologres Catalog。
前提條件
已完成獨享Hologres執行個體的建立,同時在執行個體中已完成資料庫的建立。具體操作可參見建立資料庫。
使用限制
不支援修改Catalog。如果需要修改,要先刪掉已建立的Catalog重新建立。
Hologres執行個體必須為獨享執行個體,不支援共用叢集執行個體,原因是Realtime ComputeFlink版僅支援讀寫Hologres內表。
建立Hologres Catalog
Catalog建立完成後,配置資訊不支援修改。如果需要修改,要刪掉已建立的Catalog重新建立。
UI方式
如果您需要設定Hologres連接器支援的參數,可以採用SQL方式建立Hologres Catalog。
進入資料管理頁面。
登入Realtime Compute管理主控台,單擊目標工作空間操作列下的控制台。
單擊資料管理。
單擊建立Catalog,選擇Hologres後,單擊下一步。
填寫參數配置資訊。

參數
說明
是否必填
備忘
catalogname
Hologres Catalog名稱。
是
僅支援小寫字母a-z和數字0-9,不含大寫字母、中劃線(-)、底線(_)等特殊字元。
endpoint
Hologres執行個體的網路連接埠。
是
Hologres執行個體與Flink工作空間在同一VPC:進入,在目標執行個體的詳情頁面的網路資訊地區擷取對應的指定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會報錯。
單擊確定。
建立完成後,中繼資料下即可查看建立的Catalog。
SQL方式
在資料查詢文本編輯地區,輸入配置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:進入,在目標執行個體的詳情頁面的網路資訊地區擷取對應的指定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。輸入建立Catalog的代碼後,單擊右上方的運行完成Catalog的建立。
查看Hologres Catalog
Hologres Catalog配置成功後,您可以通過以下步驟查看Hologres中繼資料。
進入資料管理頁面。
單擊目標工作空間操作列下的控制台。
單擊資料管理。
在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方式
進入資料管理頁面。
單擊目標工作空間操作列下的控制台。
單擊資料管理。
進入目標資料庫。
單擊目標Catalog名稱對應操作列的查看。
單擊目標資料庫名稱對應操作列的查看。
建立Hologres表。
單擊建立表。
在使用內建連接器串連頁簽,選擇即時數倉Hologres連接器,單擊下一步。
填寫建表語句並配置相關參數資訊。程式碼範例如下。
文法
樣本
CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` ( ... ) WITH ( 'connector' = 'hologres' );CREATE TABLE `holocatalog`.`holo_test`.`product` ( id INT, name STRING ) WITH ( 'connector' = 'hologres' );單擊確定。
SQL命令方式
在資料查詢文本編輯地區,輸入以下建表語句。
通常,有以下幾種方式建立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' );輸入建表語句後,單擊右上方的運行完成表的建立。
建立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表。
|
重新命名表 |
|
增加列 |
|
修改列名 |
|
修改列注釋 |
|
讀寫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方式
進入資料管理頁面。
單擊目標工作空間操作列下的控制台。
單擊資料管理。
在Catalog列表頁面,單擊目標Catalog名稱對應操作列下的刪除。
在彈出的對話方塊中,單擊刪除。
刪除完成後,在左側中繼資料地區查看目標Catalog是否已刪除。
SQL命令方式
在資料查詢文本編輯地區,輸入以下命令。
DROP CATALOG ${catalog_name}其中,${catalog_name}為您要刪除的在Realtime Compute開發控制台上顯示的Hologres Catalog名稱。
選中刪除Catalog的命令,滑鼠右鍵選擇運行。
在左側中繼資料地區,查看目標Catalog是否已刪除。
常見問題
相關文檔
Hologres WITH參數資訊:WITH參數
Hologres Catalog相關實踐情境: