將DataHub資料同步至Hologres適用於需要即時資料分析、即時監控、即時報表和複雜資料結構處理的情境,通過結合DataHub和Hologres的能力,可以提升資料處理和分析的效率和準確性。本文介紹如何建立DataHub資料同步任務以及常見問題。
背景資訊
DataHub提供資料Sink/Source功能,即資料同步功能,支援將對應Topic中的資料即時/准即時
的同步到第三方阿里雲產品中,打通阿里雲產品間的資料流通。關於DataHub資料同步功能介紹詳情,請參見概述
DataHub與Hologres的映射關係如下表所示。
DataHub | Hologres |
Project | Database |
Topic | Table |
同步情境與策略介紹
同步情境
同步情境 | 說明 |
逐條插入 | 將來源資料庫中資料逐條插入到目標資料庫中,適用於將DataHub資料全量同步至Hologres的情境。 |
回放 | 通過分析並重新執行Binlog資料庫操作記錄日誌,將來源資料庫變更操作應用到目標資料庫中,最終確保資料一致性。適用於DTS同步資料至DataHub,再將DataHub資料同步至Hologres的鏈路情境,其中DataHub相當於Binlog。 說明 DTS同步資料至DataHub,會在資料列的基礎上添加附加列,用於記錄資料的操作資訊。DTS同步資料至DataHub,附加列的命名存在新舊差異,詳情請參見修改資料同步的附加列規則。 |
同步策略
同步策略 | 說明 |
覆蓋(replace) | 資料寫入發生主鍵衝突,新的資料覆蓋老資料並寫入,確保目標資料庫中的資料與來源資料保持一致。 |
忽略(ignore) | 資料寫入發生主鍵衝突,忽略新資料,即資料不更新,避免重複資料的匯入和覆蓋,保持目標資料庫的資料完整性。 |
注意事項
僅支援將DataHub TUPLE類型資料同步到Hologres。
資料寫入分區表必須先在Hologres中建立分區子表,詳情請參見CREATE PARTITION TABLE。
每個同步任務都會佔用部分串連數,每個任務佔用的串連數等於DataHub Topic的Shard數。
準備工作
開通DataHub服務並準備DataHub資料。具體操作,請參見快速入門。
購買Hologres執行個體並建表,本文以表
lineitem
為樣本。具體操作,請參見購買Hologres和通過HoloWeb串連Hologres建立表。DataHub與Hologres的資料類型映射如下表所示。
DataHub
Hologres
TINYINT
SMALLINT
SMALLINT
SMALLINT
INTEGER
INTEGER
BIGINT
BIGINT
FLOAT
REAL
DOUBLE
DOUBLE PRECISION
DECIMAL
DECIMAL
STRING
TEXT
BOOLEAN
BOOLEAN
TIMESTAMP
TIMESTAMPTZ
樣本建表語句如下。
BEGIN; CREATE TABLE lineitem ( L_ORDERKEY BIGINT NOT NULL, L_PARTKEY BIGINT NOT NULL, L_SUPPKEY BIGINT NOT NULL, L_LINENUMBER BIGINT NOT NULL, L_QUANTITY DECIMAL(20,10), L_EXTENDEDPRICE DECIMAL(20,10), L_DISCOUNT DECIMAL(20,10), L_TAX DECIMAL(20,10), L_RETURNFLAG TEXT, L_LINESTATUS TEXT, L_SHIPDATE TIMESTAMPTZ, L_COMMITDATE TIMESTAMPTZ, L_RECEIPTDATE TIMESTAMPTZ, L_SHIPINSTRUCT TEXT, L_SHIPMODE TEXT, L_COMMENT TEXT ); caLL set_table_property('lineitem', 'orientation', 'column'); COMMIT;
建立同步任務
登入DataHub服務控制台,單擊已建立的Topic,進入Topic詳情頁。
單擊Topic詳情頁右上方的+同步。
單擊Hologres,在建立Connector頁面配置參數。
參數
說明
Instance
Hologres執行個體的ID。進入Hologres管理主控台,擷取執行個體ID。
Database
用於接收DataHub資料的Hologres資料庫名稱。
Table
用於接收DataHub資料的Hologres表名稱
lineitem
。主鍵衝突策略
主鍵衝突時的資料更新策略。取值說明:
replace(預設值):資料寫入發生主鍵衝突時,新資料寫入覆蓋老資料。
ignore:資料寫入發生主鍵衝突時,忽略新資料,即資料不更新,仍然使用老資料。
關於資料同步策略詳情,請參見同步策略。
同步情境
資料同步的使用情境。取值說明:
default(預設值):逐條插入。
dts:通過DTS同步資料至DataHub時,若啟用新附加列規則,選擇此參數。
dts_old:通過DTS同步資料至DataHub時,若未啟用新附加列規則,選擇此參數。
關於資料同步情境詳情,請參見同步情境。
匯入欄位
需要匯入Hologres的欄位。可以根據實際業務需求選擇匯入部分或全部欄位。
鑒權模式
預設為AccessKey。
AccessKey ID
訪問Hologres執行個體的AccessKey ID。您可以單擊AccessKey 管理,擷取使用者的AccessKey ID。
AccessKey Secret
訪問Hologres執行個體的AccessKey Secret。您可以單擊AccessKey 管理,擷取AccessKey Secret。
Timestamp Unit
同步時間單位,取值說明。
MICROSECOND:微秒,為預設值。
MILLISECOND:毫秒。
SECOND:秒。
單擊建立,同步DataHub的資料至Hologres。
建立Connector後,您可以在Topic詳情頁的同步任務中查看即時同步資料的狀態。
Hologres查詢資料。
您可以串連Hologres執行個體開發工具,即時查詢同步至Hologres中的資料。Hologres串連詳情,請參見概述。執行以下樣本查詢語句。
SELECT COUNT(*) FROM lineitem;
常見問題
為您介紹在使用Hologres過程中的常見報錯,以便於您能自行排查並解決問題。
問題1
報錯資訊
ErrorMessage: Import field not found in dest schema.
報錯原因
Hologres表中未包含同步任務指定的匯入欄位。
任務的同步情境指定為default,但是匯入欄位包含DTS同步到DataHub產生的附加列。
解決方案
重新建立Hologres表,加上未包含的匯入欄位;修改同步任務的匯入欄位,去掉Hologres表中不存在的欄位。
重新建立同步任務,並指定同步情境為dts或dts_old。
問題2
報錯資訊
ErrorMessage: Column type not match with Holo column.
報錯原因
DataHub Topic中的欄位類型與Hologres表中的欄位類型不符。
解決方案
根據資料類型映射,重新建立Hologres表,設定正確的欄位類型。
問題3
報錯資訊
ErrorMessage: Not import column xxx not allow null and no default value.
報錯原因
Hologres表中的部分欄位未包含在同步任務的匯入欄位中,但是這部分欄位設定了not null屬性,並且未設定default value。
解決方案
重建立Hologres表,對未包含在同步任務匯入欄位中的欄位,不設定not null屬性或設定default value。