clickhouse-client を使用して、ローカルファイルを Alibaba Cloud ClickHouse にインポートします。
前提条件
-
データベースアカウントが作成されていること。 詳細については、「Community-Compatible Edition クラスターのアカウント管理」または「Enterprise Edition クラスターのアカウント管理」をご参照ください。
-
clickhouse-client (お使いのクラスターのバージョン以上) がインストールされていること。 詳細については、「clickhouse-client のインストール」をご参照ください。
説明パブリックネットワーク経由のインポートは低速です。 大規模なデータセットの場合は、内部ネットワークを使用してください。
お使いの Alibaba Cloud ClickHouse クラスターと同じ VPC 内の ECS インスタンスに clickhouse-client をインストールし、VPC エンドポイント経由で接続します。
ECS インスタンスには、clickhouse-client をインストールするためのパブリックネットワークアクセスが必要です。
-
ECS インスタンスを購入していない場合は、ウィザードを使用してインスタンスを作成する際に、Public IP Address を選択してください。
-
既存の ECS インスタンスにパブリック IP がない場合は、Elastic IP Address (EIP) を関連付けます。 詳細については、「Elastic IP Address (EIP) の関連付け」をご参照ください。
-
-
clickhouse-client サーバー IP が Alibaba Cloud ClickHouse のホワイトリストに追加されます。 ホワイトリストを設定する。
-
ソースファイルがサポートされている形式であること。 詳細については、「サポートされているファイル形式」をご参照ください。
操作手順
この例では、Alibaba Cloud ClickHouse の default データベースの test_tbl_distributed テーブルに CSV ファイルをインポートします。パラメーターを実際の値に置き換えてください:
-
インポート先データベース: default
-
インポート先テーブル: test_tbl_distributed
-
ソースデータファイル: testData.csv
ステップ 1: データの準備
clickhouse-client のインストールディレクトリに、次の内容で testData.csv を作成します。
1,田中,32,shanghai,http://example.com
2,佐藤,22,beijing,http://example.com
3,鈴木,23,shenzhen,http://example.com
4,高橋,45,hangzhou,http://example.com
5,伊藤,14,shanghai,http://example.com
6,渡辺,25,hangzhou,http://example.com
7,山本,45,shanghai,http://example.com
8,中村,26,shanghai,http://example.com
9,小林,27,shenzhen,http://example.com
10,加藤,37,shanghai,http://example.com
ステップ 2: テーブルの作成
-
データベースに接続します。
Alibaba Cloud ClickHouse は Data Management Service (DMS) と統合されています。DMS を使用して ClickHouse クラスターに接続する。
その他のクライアントについては、「データベースへの接続」をご参照ください。
-
クラスターのエディションに基づいてテーブルを作成します。
重要列の順序とデータ型は、ソースファイルと一致している必要があります。
Enterprise Edition ではローカルテーブルのみが必要です。 Community-Compatible Edition では、分散テーブルも必要になる場合があります。 構文リファレンスについては、「CREATE TABLE」をご参照ください。
Enterprise Edition
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id;このステートメントを実行したときにエラーメッセージ
"ON CLUSTER is not allowed for Replicated database"が表示された場合は、「マイナーエンジンバージョンをアップグレード」してエラーを修正できます。Community-Compatible Edition
クラスターのレプリカタイプに基づいてエンジンを選択します。
重要デュアルレプリカクラスターでテーブルを作成する場合、MergeTree エンジンファミリーの Replicated エンジンを使用する必要があります。 デュアルレプリカクラスターで非 Replicated エンジンを使用してテーブルを作成すると、レプリカ間でデータをレプリケートできず、データの不整合が発生する可能性があります。
シングルレプリカ
-
ローカルテーブルを作成します。
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id; -
(オプション) 分散テーブルを作成します。
ローカルテーブルのみが必要な場合は、このステップをスキップしてください。
マルチノードクラスターに推奨します。
CREATE TABLE test_tbl_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
デュアルレプリカ
-
ローカルテーブルを作成します。
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}') order by id; -
(オプション) 分散テーブルを作成します。
ローカルテーブルのみが必要な場合は、このステップをスキップしてください。
マルチノードクラスターに推奨します。
CREATE TABLE test_tbl_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
-
ステップ 3: データのインポート
clickhouse-client のインストールディレクトリから次のコマンドを実行します。
インポートを高速化するには、ソースファイルを分割し、複数のクライアントを並行して実行してください。
マルチノードクラスターの場合は、分散テーブルにインポートしてください。
cat <file_name> | ./clickhouse-client --host=<host> --port=<port> --user=<user> --password=<password> --query="INSERT INTO <table_name> FORMAT <file_type>";
|
パラメーター |
説明 |
|
file_name |
ソースファイルのパス。 |
|
host |
クラスター情報 ページで確認できる、クラスターのパブリックエンドポイントまたは VPC エンドポイント。 clickhouse-client の場所に基づいてエンドポイントを選択します:
詳細については、「パブリックエンドポイントの申請またはリリース」をご参照ください。 |
|
port |
TCP ポート。クラスター情報 ページで利用可能です。 |
|
user |
データベースアカウント。 |
|
password |
データベースアカウントのパスワード。 |
|
table_name |
インポート先のテーブル名。 分散テーブルの場合は、分散テーブル名を使用してください。 |
|
file_type |
ソースファイルの形式。 |
ステップ 4: インポート結果の確認
-
クラスターに接続します。
詳細については、「DMS を使用した ClickHouse クラスターへの接続」をご参照ください。
-
クエリ文を実行します。
重要マルチノードの Community-Compatible Edition クラスターでは、分散テーブルにクエリを実行してすべてのデータを表示してください。 ローカルテーブルは、1 つのノードからのデータのみを返します。
SELECT * FROM test_tbl_distributed;期待される出力:
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | 田中 | 32 | shanghai | http://example.com | | 2 | 佐藤 | 22 | beijing | http://example.com | | 3 | 鈴木 | 23 | shenzhen | http://example.com | | 4 | 高橋 | 45 | hangzhou | http://example.com | | 5 | 伊藤 | 14 | shanghai | http://example.com | | 6 | 渡辺 | 25 | hangzhou | http://example.com | | 7 | 山本 | 45 | shanghai | http://example.com | | 8 | 中村 | 26 | shanghai | http://example.com | | 9 | 小林 | 27 | shenzhen | http://example.com | | 10 | 加藤 | 37 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+
サポートされているファイル形式
一般的にサポートされているファイル形式:
-
各行は 1 つの行を表します。 列の順序はテーブル定義と一致している必要があります。
-
ヘッダー付きの形式の場合、ヘッダー行は無視されます。 インポートは列の順序に依存し、ヘッダー名や型には依存しません。
|
形式 |
テキスト要件 |
例 |
|
TabSeparated |
|
|
|
TabSeparatedWithNames |
TabSeparated と同じですが、最初の行に列名が含まれます (解析時に無視されます)。 |
|
|
TabSeparatedWithNamesAndTypes |
TabSeparated と同じですが、最初の行に列名、2 行目にデータ型が含まれます。 両方の行は解析時に無視されます。 |
|
|
CSV |
|
|
|
CSVWithNames |
CSV と同じですが、最初の行に列名が含まれます (解析時に無視されます)。 |
|
完全な形式のリファレンスについては、「入出力データ形式」をご参照ください。
関連ドキュメント
その他の移行方法については、「データの移行と同期」をご参照ください。