ClickHouse は、さまざまな方法で OLTP データベースのインフラストラクチャに容易に統合できます。その方法の 1 つが、SQL ダンプを使用して他のデータベースと ClickHouse の間でデータを転送することです。
SQLダンプの作成
データは、SQLInsert を使用して SQLフォーマットでダンプできます。ClickHouse はデータを INSERT INTO <table name> VALUES(... 形式で書き出し、output_format_sql_insert_table_name 設定オプションで指定したテーブル名を使用します:
SET output_format_sql_insert_table_name = 'some_table';
SELECT * FROM some_data
INTO OUTFILE 'dump.sql'
FORMAT SQLInsertoutput_format_sql_insert_include_column_names オプションを無効にすることで、カラム名を省略できます:
SET output_format_sql_insert_include_column_names = 0これで、dump.sql ファイルを別のOLTPデータベースに読み込ませることができます:
mysql some_db < dump.sqlsome_db MySQLデータベースに some_table テーブルが存在しているものとします。
DBMS によっては、1 回のバッチで処理できる値の量に制限がある場合があります。デフォルトでは、ClickHouse は 65k 件の値からなるバッチを作成しますが、これは output_format_sql_insert_max_batch_size オプションで変更できます:
SET output_format_sql_insert_max_batch_size = 1000;値の一覧をエクスポートする
ClickHouse には Values フォーマットがあります。これは SQLInsert に似ていますが、INSERT INTO table VALUES の部分を省き、値の一覧だけを返します。
SELECT * FROM some_data LIMIT 3 FORMAT Values('Bangor_City_Forest','2015-07-01',34),('Alireza_Afzal','2017-02-01',24),('Akhaura-Laksam-Chittagong_Line','2015-09-01',30)SQLダンプからデータを挿入する
SQLダンプを読み取るには、MySQLDump を使用します。
SELECT *
FROM file('dump.sql', MySQLDump)
LIMIT 5┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest │ 2015-07-01 │ 34 │
│ Alireza_Afzal │ 2017-02-01 │ 24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │ 30 │
│ 1973_National_500 │ 2017-10-01 │ 80 │
│ Attachment │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘デフォルトでは、ClickHouse は不明なカラムをスキップし (input_format_skip_unknown_fields オプションで制御) 、ダンプ内で最初に見つかったテーブルのデータを処理します (複数のテーブルが 1 つのファイルにダンプされている場合) 。DDL ステートメントはスキップされます。MySQL ダンプからテーブルにデータを読み込むには (mysql.sql ファイルを使用) :
INSERT INTO some_data
FROM INFILE 'mysql.sql' FORMAT MySQLDumpMySQLのダンプファイルからテーブルを自動的に作成することもできます。
CREATE TABLE table_from_mysql
ENGINE = MergeTree
ORDER BY tuple() AS
SELECT *
FROM file('mysql.sql', MySQLDump)ここでは、ClickHouse が自動的に推論した構造に基づいて、table_from_mysql という名前のテーブルを作成しています。ClickHouse は、データに基づいて型を検出するか、利用可能な場合は DDL を使用します。
DESCRIBE TABLE table_from_mysql;┌─name──┬─type─────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path │ Nullable(String) │ │ │ │ │ │
│ month │ Nullable(Date32) │ │ │ │ │ │
│ hits │ Nullable(UInt32) │ │ │ │ │ │
└───────┴──────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘その他のフォーマット
ClickHouse は、さまざまなユースケースやプラットフォームに対応するため、テキスト形式とバイナリ形式の両方を含む多数のフォーマットをサポートしています。さらに多くのフォーマットとその扱い方については、以下の記事を参照してください。
また、clickhouse-local も参照してください。これは、ClickHouse server を必要とせず、ローカル/リモートファイルを扱えるポータブルで高機能なツールです。