MySQLからClickHouseに移行する5つの方法

MySQLからClickHouseに移行する5つの方法

データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以下のとおりで、ClickHouse 自体がサポートする 3 つの方法と 2 つのサードパーティ ツールが含まれます。

テーブルエンジンの作成 MySQL
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
 name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
 name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
 ...
 INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
 INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']);

公式ドキュメント: https://clickhouse.yandex/docs/en/operations/table_engines/mysql/

実際のデータは、外部テーブルとして理解できるリモート MySQL データベースに保存されることに注意してください。

MySQL でデータを追加および削除することでこれを確認できます。

挿入 選択
-- 最初にテーブルを作成します CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
 name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
 name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
 ...
) ENGINE = エンジン
-- データをインポート INSERT INTO [db.]table [(c1, c2, c3)] select column or * from mysql('host:port', 'db', 'table_name', 'user', 'password')

列の種類と列の数をカスタマイズし、クリックハウス関数を使用してデータを処理することができます。

mysql("host:port","db","table_name","user_name","password")からtoDate(xx)を選択します。
選択元としてテーブルを作成する
テーブルを作成 [存在しない場合] [db.]テーブル名
エンジン = ログ
として 
選択*
mysql から('host:port', 'db', 'article_clientuser_sum', 'user', 'password')

ネットユーザーの記事: http://jackpgao.github.io/2018/02/04/ClickHouse-Use-MySQL-Data/

カスタム列はサポートされておらず、参考文献でブロガーが書いたENGIN=MergeTreeテストは失敗しました。

これはcreate tableinsert into selectの組み合わせとして理解できます。

Altinity/clickhouse-mysql-data-reader

Altinity 社は、MySQL から ClickHouse にデータを移行するための Python ツール (binlog の増分更新と完全インポートをサポート) をオープンソース化しましたが、公式の readme はコードと同期しておらず、クイック スタートに従って動作しません。

## テーブル clickhouse-mysql を作成する \
 --src-host=127.0.0.1 \
 --src-user=リーダー \
 --src-password=Qwerty1# \
 --table-templates-with-create-database \
 --src-table=airline.ontime > create_clickhouse_table_template.sql
## スクリプト vim create_clickhouse_table_template.sql を変更します
## インポートしてテーブルを作成する clickhouse-client -mn < create_clickhouse_table_template.sql
## clickhouse-mysqlにデータをインポートする\
 --src-host=127.0.0.1 \
 --src-user=リーダー \
 --src-password=Qwerty1# \
 --table-migrate \
 --dst-host=127.0.0.1 \
 --dst-table=ログ統合\
 --csvプール

公式ドキュメント: https://github.com/Altinity/clickhouse-mysql-data-reader#mysql-migration-case-1—migrate-existing-data

なお、上記 3 つの方法はすべて MySQL から ClickHouse にインポートされます。データ量が多いと、MySQL に大きな負担がかかります。以下は2つのオフライン方式です(ストリームセットはリアルタイムとオフラインの両方をサポートします)

csv

## テーブルの作成を無視 clickhouse-client \
 -h ホスト \
 --query="[db].table に挿入 フォーマット CSV" < test.csv

ただし、ソース データの品質が低い場合は、特殊文字 (区切り文字、エスケープ文字) や改行などの問題が発生することがよくあります。私はひどく騙されました。

カスタム区切り文字、--format_csv_delimiter="|"
エラーが発生した場合、中止するのではなくスキップします。 --input_format_allow_errors_num=10 は最大 10 行のエラーを許可し、 --input_format_allow_errors_ratio=0.1 は 10% のエラーを許可します。 csv は null 値をスキップし、コード: 27 を報告します。 DB::Exception: 入力を解析できません: 期待される 、 before: xxxx: (at row 69) ERROR: garbage after Nullable(Date): "8,002<LINE FEED>0205" sed ' :a;s/,,/,\\N,/g;ta' |clickhouse-client -h host --query "INSERT INTO [db].table FORMAT CSV" ,, を ,\N, に置き換えます。
python clean_csv.py --src=src.csv --dest=dest.csv --chunksize=50000 --cols --encoding=utf-8 --delimiter=,

clean_csv.py 他の記事032-csvファイルのフォールトトレランス処理を参照してください

ストリームセット

Streamsets は、MySQL からの完全なインポートや CSV の読み取りをサポートし、binlog をサブスクライブすることで増分挿入もサポートします。私の他の記事「025-Big Data ETL ツール StreamSets のインストールと MySQL Binlog へのサブスクリプション」を参照してください。

この記事では、MySQLからClickhouseをインポートする方法のみを示します。

この記事では、ストリームセットサービスがすでに設定されていることを前提としています。

サービスを有効にして再起動する

jdbc jarとmysqlおよびclickhouseの依存パッケージをアップロードします。

便利な方法として、pom.xmlを作成し、Mavenを使用して均一にダウンロードします。

<プロジェクト xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <モデルバージョン>4.0.0</モデルバージョン>
 <groupId>com.anjia</groupId>
 <artifactId>デモ</artifactId>
 <packaging>jar</packaging>
 <バージョン>1.0-SNAPSHOT</バージョン>
 <name>デモ</name>
 <url>http://maven.apache.org</url>
 <依存関係>
 <依存関係>
 <groupId>ru.yandex.clickhouse</groupId>
 <artifactId>クリックハウス-jdbc</artifactId>
 <バージョン>0.1.54</バージョン>
 </依存関係>
 <依存関係>
 <グループID>mysql</グループID>
 <artifactId>mysql-コネクタ-java</artifactId>
 <バージョン>5.1.47</バージョン>
 </依存関係>
 </依存関係>
</プロジェクト>

Mavenがローカルにインストールされている場合は、次のコマンドを実行します。

mvn 依存関係:コピー依存関係 -D出力ディレクトリ=lib -Dインクルードスコープ=コンパイル

必要なすべての jar ファイルがダウンロードされ、lib ディレクトリにコピーされます。

次に、それをstreamsets /opt/streamsets-datacollector-3.9.1/streamsets-libs-extras/streamsets-datacollector-jdbc-lib/lib/ディレクトリにコピーします。

ストリームセットサービスを再起動します

       

要約する

以上が、編集者が紹介したMySQLからClickHouseへの移行方法5選です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • MySQLデータベースのデータフォルダを移行するための詳細な手順
  • MySQLデータベースを別のマシンに移行する方法の詳細な説明
  • OracleデータベースをMySQLに移行する方法の概要
  • MySQLデータベースをOracleデータベースに移行する
  • MySQLデータベース移行により、大量のデータを迅速にエクスポートおよびインポートできます
  • MySQL InnoDB テーブルスペースのアンロード、移行、ロードの使用方法
  • MySQLデータ移行の詳しい説明 - データディレクトリ直接置換の注意事項
  • mysql5.5 データベースデータディレクトリ移行方法の詳細な説明
  • MySQLのバックアップと移行データの同期方法
  • MySQL移行計画と落とし穴の実践記録

<<:  ElementUIはel-formフォームリセット機能ボタンを実装します

>>:  Linuxネットワーク構成ツールの使用

推薦する

Mac OS 10.11 での MySQL 5.7.12 のインストールと設定のチュートリアル

Mac OS 10.11 に MySQL をインストールして設定する方法を、主に写真を使って手順を簡...

Docker コンテナの uid と gid の詳細な理解

デフォルトでは、コンテナ内のプロセスは root ユーザー権限で実行され、この root ユーザーは...

超シンプルな QPS 統計手法 (推奨)

過去 N 秒間の QPS 値の統計 (1 秒あたりの選択、挿入などを含む) mysql> se...

vue_drf は SMS 認証コードを実装します

目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...

Linux 上で Docker コンテナを作成、一覧表示、削除する方法の概要

1. Dockerコンテナを起動する以下のコマンドを使用して新しい Docker コンテナを起動しま...

JavaScript で配列の変更を監視する方法

序文以前、defineProperty を紹介したとき、オブジェクトの変更のみを監視でき、配列の変更...

MySQL の NULL と空の文字列

最近、MySQL に触れました。昨日、テーブル構造情報を格納するための新しいテーブルを作成しました。...

Hbase 入門

1. HBaseの概要1.1 HBaseとはHBase は、高い信頼性、高いパフォーマンス、列ストレ...

MySQLの保存場所を新しいディスクに移行する方法

1. 新しいディスクを準備し、現在のルートパーティションと同じファイルシステムでフォーマットし、ディ...

Ubuntu 18.04 に MySQL をインストールする (グラフィカル チュートリアル)

ヒント: 以下の操作はすべて root 権限で実行されます。 # MySQL がインストールされてい...

MySQLクエリステートメントの簡単な操作例

この記事では、例を使用して、MySQL クエリ ステートメントの簡単な操作を説明します。ご参考までに...

純粋な HTML+CSS でオリンピック リングを実装するためのサンプル コード

レンダリング コード - 青と黄色のリングを例に挙げます <div class="コ...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...

Mysqlトランザクション操作の失敗を解決する方法

Mysqlトランザクション操作の失敗を解決する方法トランザクションの原子性: トランザクションは、デ...