DataHub實(shí)時(shí)同步
將DataHub數(shù)據(jù)同步至Hologres適用于需要實(shí)時(shí)數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控、實(shí)時(shí)報(bào)表和復(fù)雜數(shù)據(jù)結(jié)構(gòu)處理的場(chǎng)景,通過(guò)結(jié)合DataHub和Hologres的能力,可以提升數(shù)據(jù)處理和分析的效率和準(zhǔn)確性。本文介紹如何創(chuàng)建DataHub數(shù)據(jù)同步任務(wù)以及常見(jiàn)問(wèn)題。
背景信息
DataHub提供數(shù)據(jù)Sink/Source功能,即數(shù)據(jù)同步功能,支持將對(duì)應(yīng)Topic中的數(shù)據(jù)實(shí)時(shí)/準(zhǔn)實(shí)時(shí)
的同步到第三方阿里云產(chǎn)品中,打通阿里云產(chǎn)品間的數(shù)據(jù)流通。關(guān)于DataHub數(shù)據(jù)同步功能介紹詳情,請(qǐng)參見(jiàn)概述
DataHub與Hologres的映射關(guān)系如下表所示。
DataHub | Hologres |
Project | Database |
Topic | Table |
同步場(chǎng)景與策略介紹
同步場(chǎng)景
同步場(chǎng)景 | 說(shuō)明 |
逐條插入 | 將源數(shù)據(jù)庫(kù)中數(shù)據(jù)逐條插入到目標(biāo)數(shù)據(jù)庫(kù)中,適用于將DataHub數(shù)據(jù)全量同步至Hologres的場(chǎng)景。 |
回放 | 通過(guò)分析并重新執(zhí)行Binlog數(shù)據(jù)庫(kù)操作記錄日志,將源數(shù)據(jù)庫(kù)變更操作應(yīng)用到目標(biāo)數(shù)據(jù)庫(kù)中,最終確保數(shù)據(jù)一致性。適用于DTS同步數(shù)據(jù)至DataHub,再將DataHub數(shù)據(jù)同步至Hologres的鏈路場(chǎng)景,其中DataHub相當(dāng)于Binlog。 說(shuō)明 DTS同步數(shù)據(jù)至DataHub,會(huì)在數(shù)據(jù)列的基礎(chǔ)上添加附加列,用于記錄數(shù)據(jù)的操作信息。DTS同步數(shù)據(jù)至DataHub,附加列的命名存在新舊差異,詳情請(qǐng)參見(jiàn)修改數(shù)據(jù)同步的附加列規(guī)則。 |
同步策略
同步策略 | 說(shuō)明 |
覆蓋(replace) | 數(shù)據(jù)寫入發(fā)生主鍵沖突,新的數(shù)據(jù)覆蓋老數(shù)據(jù)并寫入,確保目標(biāo)數(shù)據(jù)庫(kù)中的數(shù)據(jù)與源數(shù)據(jù)保持一致。 |
忽略(ignore) | 數(shù)據(jù)寫入發(fā)生主鍵沖突,忽略新數(shù)據(jù),即數(shù)據(jù)不更新,避免重復(fù)數(shù)據(jù)的導(dǎo)入和覆蓋,保持目標(biāo)數(shù)據(jù)庫(kù)的數(shù)據(jù)完整性。 |
注意事項(xiàng)
僅支持將DataHub TUPLE類型數(shù)據(jù)同步到Hologres。
數(shù)據(jù)寫入分區(qū)表必須先在Hologres中創(chuàng)建分區(qū)子表,詳情請(qǐng)參見(jiàn)CREATE PARTITION TABLE。
每個(gè)同步任務(wù)都會(huì)占用部分連接數(shù),每個(gè)任務(wù)占用的連接數(shù)等于DataHub Topic的Shard數(shù)。
準(zhǔn)備工作
開(kāi)通DataHub服務(wù)并準(zhǔn)備DataHub數(shù)據(jù)。具體操作,請(qǐng)參見(jiàn)快速入門。
購(gòu)買Hologres實(shí)例并建表,本文以表
lineitem
為示例。具體操作,請(qǐng)參見(jiàn)購(gòu)買Hologres和通過(guò)HoloWeb連接Hologres創(chuàng)建表。DataHub與Hologres的數(shù)據(jù)類型映射如下表所示。
DataHub
Hologres
TINYINT
SMALLINT
SMALLINT
SMALLINT
INTEGER
INTEGER
BIGINT
BIGINT
FLOAT
REAL
DOUBLE
DOUBLE PRECISION
DECIMAL
DECIMAL
STRING
TEXT
BOOLEAN
BOOLEAN
TIMESTAMP
TIMESTAMPTZ
示例建表語(yǔ)句如下。
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;
創(chuàng)建同步任務(wù)
登錄DataHub服務(wù)控制臺(tái),單擊已創(chuàng)建的Topic,進(jìn)入Topic詳情頁(yè)。
單擊Topic詳情頁(yè)右上角的+同步。
單擊Hologres,在新建Connector頁(yè)面配置參數(shù)。
參數(shù)
說(shuō)明
Instance
Hologres實(shí)例的ID。進(jìn)入Hologres管理控制臺(tái),獲取實(shí)例ID。
Database
用于接收DataHub數(shù)據(jù)的Hologres數(shù)據(jù)庫(kù)名稱。
Table
用于接收DataHub數(shù)據(jù)的Hologres表名稱
lineitem
。主鍵沖突策略
主鍵沖突時(shí)的數(shù)據(jù)更新策略。取值說(shuō)明:
replace(默認(rèn)值):數(shù)據(jù)寫入發(fā)生主鍵沖突時(shí),新數(shù)據(jù)寫入覆蓋老數(shù)據(jù)。
ignore:數(shù)據(jù)寫入發(fā)生主鍵沖突時(shí),忽略新數(shù)據(jù),即數(shù)據(jù)不更新,仍然使用老數(shù)據(jù)。
關(guān)于數(shù)據(jù)同步策略詳情,請(qǐng)參見(jiàn)同步策略。
同步場(chǎng)景
數(shù)據(jù)同步的使用場(chǎng)景。取值說(shuō)明:
default(默認(rèn)值):逐條插入。
dts:通過(guò)DTS同步數(shù)據(jù)至DataHub時(shí),若啟用新附加列規(guī)則,選擇此參數(shù)。
dts_old:通過(guò)DTS同步數(shù)據(jù)至DataHub時(shí),若未啟用新附加列規(guī)則,選擇此參數(shù)。
關(guān)于數(shù)據(jù)同步場(chǎng)景詳情,請(qǐng)參見(jiàn)同步場(chǎng)景。
導(dǎo)入字段
需要導(dǎo)入Hologres的字段。可以根據(jù)實(shí)際業(yè)務(wù)需求選擇導(dǎo)入部分或全部字段。
鑒權(quán)模式
默認(rèn)為AccessKey。
AccessKey ID
訪問(wèn)Hologres實(shí)例的AccessKey ID。您可以單擊AccessKey 管理,獲取用戶的AccessKey ID。
AccessKey Secret
訪問(wèn)Hologres實(shí)例的AccessKey Secret。您可以單擊AccessKey 管理,獲取AccessKey Secret。
Timestamp Unit
同步時(shí)間單位,取值說(shuō)明。
MICROSECOND:微秒,為默認(rèn)值。
MILLISECOND:毫秒。
SECOND:秒。
單擊創(chuàng)建,同步DataHub的數(shù)據(jù)至Hologres。
創(chuàng)建Connector后,您可以在Topic詳情頁(yè)的同步任務(wù)中查看實(shí)時(shí)同步數(shù)據(jù)的狀態(tài)。
Hologres查詢數(shù)據(jù)。
您可以連接Hologres實(shí)例開(kāi)發(fā)工具,實(shí)時(shí)查詢同步至Hologres中的數(shù)據(jù)。Hologres連接詳情,請(qǐng)參見(jiàn)概述。執(zhí)行以下示例查詢語(yǔ)句。
SELECT COUNT(*) FROM lineitem;
常見(jiàn)問(wèn)題
為您介紹在使用Hologres過(guò)程中的常見(jiàn)報(bào)錯(cuò),以便于您能自行排查并解決問(wèn)題。
問(wèn)題1
報(bào)錯(cuò)信息
ErrorMessage: Import field not found in dest schema.
報(bào)錯(cuò)原因
Hologres表中未包含同步任務(wù)指定的導(dǎo)入字段。
任務(wù)的同步場(chǎng)景指定為default,但是導(dǎo)入字段包含DTS同步到DataHub產(chǎn)生的附加列。
解決方法
重新創(chuàng)建Hologres表,加上未包含的導(dǎo)入字段;修改同步任務(wù)的導(dǎo)入字段,去掉Hologres表中不存在的字段。
重新創(chuàng)建同步任務(wù),并指定同步場(chǎng)景為dts或dts_old。
問(wèn)題2
報(bào)錯(cuò)信息
ErrorMessage: Column type not match with Holo column.
報(bào)錯(cuò)原因
DataHub Topic中的字段類型與Hologres表中的字段類型不匹配。
解決方法
根據(jù)數(shù)據(jù)類型映射,重新創(chuàng)建Hologres表,設(shè)置正確的字段類型。
問(wèn)題3
報(bào)錯(cuò)信息
ErrorMessage: Not import column xxx not allow null and no default value.
報(bào)錯(cuò)原因
Hologres表中的部分字段未包含在同步任務(wù)的導(dǎo)入字段中,但是這部分字段設(shè)置了not null屬性,并且未設(shè)置default value。
解決方法
重新建Hologres表,對(duì)未包含在同步任務(wù)導(dǎo)入字段中的字段,不設(shè)置not null屬性或設(shè)置default value。