DataHub から Hologres にデータをストリーミングすることで、リアルタイム分析、モニタリング、レポーティング、または複雑なデータ処理が可能になります。DataHub と Hologres の機能を組み合わせることで、データパイプラインの効率と精度が向上します。本トピックでは、DataHub からデータを同期するためのデータコネクタの作成方法と、一般的な問題に対する解決策について説明します。
背景情報
DataHub はデータソースまたはシンクとして機能し、トピックから他の Alibaba Cloud サービスへ リアルタイム / 準リアルタイム でデータを同期できます。これにより、異なるサービス間のデータフローが合理化されます。DataHub のデータ同期機能の詳細については、「概要」をご参照ください。
次の表に、DataHub と Hologres の概念間のマッピングを示します。
DataHub | Hologres |
Project | Database |
Topic | Table |
同期モードとポリシー
同期モード
モード | 説明 |
逐一挿入 | DataHub のデータを Hologres に 1 件ずつ挿入します。このモードは、DataHub のすべてのデータを Hologres に同期する場合に適用されます。 |
再生 | ソース DataHub プロジェクトで実行された変更操作を宛先の Hologres データベースで実行し、データの一貫性を確保します。データ変更操作は、バイナリログを分析することで取得できます。このモードは、Data Transmission Service (DTS) を使用してソースから DataHub にデータを同期し、その後 Hologres にデータを同期する場合に適用されます。この場合、DataHub はバイナリログに相当します。 説明 DTS を使用して DataHub にデータを同期すると、同期されたデータ列に追加の列が加えられ、データ操作が記述されます。追加の列の名前が、宛先の DataHub トピック内の既存の列の名前と競合する可能性があります。競合を防ぐ方法の詳細については、「追加列の命名規則の変更」をご参照ください。 |
同期ポリシー
ポリシー | 説明 |
リプレース | データの書き込み時に主キーの競合が発生した場合、元のデータは新しいデータで上書きされます。これにより、ソースデータベースと宛先データベース間のデータの一貫性が確保されます。 |
無視 | データの書き込み時に主キーの競合が発生した場合、新しいデータは無視されます。データは更新されません。これにより、重複データの書き込みが防止され、宛先データベースのデータ整合性が確保されます。 |
注意事項
Hologres に同期できるのは、DataHub の TUPLE 型トピックのデータのみです。
Hologres インスタンスのパーティションテーブルにデータを書き込む前に、子テーブルを作成する必要があります。詳細については、「CREATE PARTITION TABLE」をご参照ください。
各データコネクタは接続を占有します。各データコネクタが占有する接続数は、DataHub トピックのシャード数と同じです。
事前準備
-
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 コンソールにログインし、作成したトピックをクリックしてトピック詳細ページに移動します。
右上隅にある [+ Connector] をクリックします。
-
Hologres をクリックし、[Create connector] パネルでパラメーターを設定します。
パラメーター
説明
Instance
Hologres インスタンスの ID です。Hologres コンソール に移動して インスタンス ID を取得します。
[データベース]
DataHub データを同期する Hologres データベースの名前です。
Table
DataHub からデータを受信する Hologres テーブルの名前です。この例では
lineitemを使用します。[主キーの競合ポリシー]
主キーの競合が発生した場合のデータ更新ポリシーです。有効な値:
replace:データの書き込み時に主キーの競合が発生した場合、元のデータは新しいデータで上書きされます。これがデフォルト値です。
ignore:データの書き込み時に主キーの競合が発生した場合、新しいデータは無視されます。データは更新されず、元のデータが引き続き使用されます。
データ同期ポリシーの詳細については、本トピックの「同期ポリシー」をご参照ください。
[同期シナリオ]
データ同期に使用されるモードです。有効な値:
default:データは 1 件ずつ挿入されます。これがデフォルト値です。
-
dts: DTS を使用して DataHub にデータを同期し、追加列の新しい命名規則を有効にしている場合に選択します。
dts_old:DTS を使用して DataHub にデータを同期し、追加列の新しい命名規則を有効にしていない場合に使用します。
データ同期モードの詳細については、本トピックの「同期モード」をご参照ください。
[インポートフィールド]
Hologres に同期するフィールドです。ビジネス要件に基づいて、DataHub トピックのすべてのフィールドまたは一部のフィールドを同期できます。
[認証モード]
Hologres インスタンスへのアクセスを認証するモードです。デフォルト値は AccessKey です。
[アクセスキーID]
Hologres インスタンスへのアクセスに使用される Alibaba Cloud アカウントのアクセスキー ID です。AccessKey ペア ページからアクセスキー ID を取得できます。
[アクセスキー秘密鍵]
Hologres インスタンスへのアクセスに使用される Alibaba Cloud アカウントのシークレットアクセスキーです。AccessKey ペア ページからシークレットアクセスキーを取得できます。
タイムスタンプ単位
データコネクタがデータ同期に使用するタイムスタンプ単位です。有効な値:
MICROSECOND:デフォルト値です。
MILLISECOND。
SECOND。
-
作成 をクリックしてデータ同期を開始します。
データコネクタが作成された後、トピック詳細ページの 同期タスク タブでリアルタイムの同期ステータスを表示できます。
Hologres で同期されたデータをクエリします。
Hologres インスタンスを開発ツールに接続し、そのツールを使用してデータがリアルタイムで Hologres インスタンスに同期されているかどうかを確認します。開発ツールの詳細については、「概要」をご参照ください。たとえば、次のステートメントを実行して、同期されたデータをクエリできます。
SELECT COUNT(*) FROM lineitem;
一般的なエラーとトラブルシューティング
このセクションでは、Hologres を使用するときに報告される一般的なエラーと、これらのエラーの解決策について説明します。
エラー 1
問題の説明
ErrorMessage: Import field not found in dest schema.原因
宛先の Hologres テーブルに、データコネクタでインポートフィールドとして指定されたフィールドが含まれていません。
[Synchronization Scenarios] パラメーターが [default] に設定されていますが、DTS を使用して DataHub にデータを同期する際に生成される追加の列が、データコネクタでインポートフィールドとして設定されています。
解決策
Hologres テーブルを作成し、不足しているフィールドを追加します。または、データコネクタの [Import Fields] パラメーターを変更して、追加のフィールドを削除することもできます。
データコネクタを作成し、[Synchronization Scenarios] パラメーターを [dts] または [dts_old] に設定します。
エラー 2
問題の説明
ErrorMessage: Column type not match with Holo column.原因
DataHub トピックのフィールドのデータ型が、Hologres テーブルのフィールドのデータ型と一致していません。
解決策
Hologres テーブルを作成し、データ型のマッピングに基づいてテーブルに有効なデータ型を指定します。
エラー 3
問題の説明
ErrorMessage: Not import column xxx not allow null and no default value.原因
宛先の Hologres テーブルには、データコネクタでインポートフィールドとして指定されていないフィールドが含まれています。これらのフィールドには not null プロパティが設定されており、デフォルト値が設定されていません。
解決策
Hologres テーブルを作成します。データコネクタでインポートフィールドとして指定されていないフィールドについては、デフォルト値を設定するか、not null プロパティを設定しないでください。