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ネットワーク構成ツールの使用

推薦する

ウェブテーブルフレームを作成するためのヒント

<br />Web テーブル フレームを作成するためのヒント。 ------------...

JS で async await をエレガントに使用する方法

目次jQuery の $.ajax Webpack時代の始まり約束について深く考えるネストをなくすj...

MySQLの認可コマンド grant の使い方のまとめ

MySQL 認証コマンド grant の使用方法:この記事の例は MySQL 5.0 以降で実行され...

Linux は n 日前のログとサンプルコマンドを自動的に削除します

1. ファイル削除コマンド:対応するディレクトリを検索します -mtime + 日数 -name &...

CentOS6で定期的にjarプログラムを実行するスクリプトをcrontabで実行する

1. 簡単なJavaプログラムを書く パブリッククラステストシェル{ パブリック静的voidメイン(...

Centos7 での Rsync+crontab 定期同期バックアップ

最近、社内の重要なサーバデータを定期的にストレージにバックアップし、ついでにメモしておきたい以前、W...

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...

IE イメージ ツールバーを無効にする

IE6 で試してみたところ、ツールバーが表示されました。オプションに「イメージ ツールバーを有効にす...

docker ログ - docker コンテナ ログの実装を表示します

docker logs コマンドを使用してコンテナ ログを表示できます。コマンド形式: $ dock...

MySQL に配列を保存するサンプルコードと方法

多くの場合、ストアド プロシージャを作成するときに配列がよく使用されますが、MySQL ではストアド...

vue3を使用してAppleシステムのサイドメッセージプロンプト効果を模倣する

目次アニメーションプレビューその他のUIライブラリ始めるコンポーネントディレクトリ構造トーストおおよ...

HTML ヘッドタグの詳細な紹介

HTML のヘッド部分には、ブラウザによる Web ページのレンダリングや SEO などに関連するタ...

Vue 組み込みコンポーネントのキープアライブでの LRU アルゴリズムの使用

目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...

WeChatアプレットのスクロールビューが左右連動効果を実現

WeChatアプレットはスクロールビューを使用して左右のリンクを実現します。参考までに、具体的な内容...

webpackでHMRを手動で実装するいくつかの方法

目次1. はじめに2. GitHub 3. 基本構成プロジェクトディレクトリパッケージ.json c...