このトピックでは、clickhouse-client ツールを使用してローカルファイルから ApsaraDB for ClickHouse にデータをインポートする方法について説明します。
前提条件
データベースアカウントを作成します。詳細については、「コミュニティ互換版クラスターのアカウント管理」および「Enterprise Edition クラスターのアカウント管理」をご参照ください。
クラスターのバージョンと同じかそれ以降のバージョンの clickhouse-client をインストールします。
説明パブリックネットワーク経由でのデータインポートは低速です。大規模なデータセットやパフォーマンステストの場合は、内部ネットワーク経由でのデータインポートを推奨します。
内部ネットワーク経由でデータをインポートするには:
Elastic Compute Service (ECS) インスタンスは、ApsaraDB for ClickHouse クラスターと同じ Virtual Private Cloud (VPC) 内にある必要があります。
VPC エンドポイントを使用して ClickHouse クラスターに接続します。
clickhouse-client ツールをインストールするために、ECS インスタンスでパブリックネットワークアクセスを有効にします:
新規インスタンス:購入時に [パブリック IPv4 アドレスの割り当て] をオンにします。購入の詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
パブリックアクセスがない既存のインスタンス:Elastic IP Address (EIP) を関連付けます。
clickhouse-client ツールをホストするサーバーの IP アドレスを ApsaraDB for ClickHouse のホワイトリストに追加します。詳細については、「ホワイトリストの設定」をご参照ください。
ソースファイルがサポートされている形式であること。
操作手順
このトピックでは、CSV ファイルから ApsaraDB for ClickHouse クラスターの分散テーブルにデータをインポートする方法の例を示します。実際には、ビジネス要件に合わせてパラメーターを変更してください。この例では、次の環境を使用します:
インポート先データベース:default
インポート先テーブル:test_tbl_distributed
ソースデータファイル:testData.csv
ステップ 1:データの準備
clickhouse-client のインストールディレクトリに、testData.csv という名前のファイルを作成し、次のデータを追加します。
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,23,shenzhen,http://example.com
4,jess,45,hangzhou,http://example.com
5,jack,14,shanghai,http://example.com
6,tomy,25,hangzhou,http://example.com
7,lucy,45,shanghai,http://example.com
8,tengyin,26,shanghai,http://example.com
9,wangli,27,shenzhen,http://example.com
10,xiaohua,37,shanghai,http://example.comステップ 2:テーブルの作成
データベースに接続します。
DMS を使用して ClickHouse クラスターに接続できます。
他のクライアントを使用している場合は、「データベースへの接続」をご参照ください。
クラスターのエディションに基づいてテーブルを作成します。
重要インポート先テーブルの列の順序とデータ型がソースファイルのデータと完全に一致しない場合、データインポートが失敗する可能性があります。インポートする前に、テーブルスキーマがファイルの構造に対応していることを必ず確認してください。
Enterprise 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;Enterprise Edition クラスターでテーブルを作成する際に、
ON CLUSTER is not allowed for Replicated databaseというエラーが発生することがあります。これは古いマイナーバージョンにおける既知の問題です。この問題を修正するには、クラスターのマイナーエンジンバージョンをアップグレードしてください。コミュニティ互換版
シングルレプリカクラスターとデュアルレプリカクラスターではエンジンが異なります。レプリカのタイプに基づいてエンジンを選択してください。
重要デュアルレプリカ版のクラスターでテーブルを作成する場合、MergeTree ファミリーの 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:結果の検証
クラスターに接続します。
クエリ文を実行します。
重要マルチノードのコミュニティ互換版クラスターでは、常に分散テーブルをクエリしてください。ローカルテーブルを直接クエリすると、単一ノードからの結果しか返されないため、データが不完全になります。
SELECT * FROM test_tbl_local;次の結果が返されます。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | yang | 32 | shanghai | http://example.com | | 2 | wang | 22 | beijing | http://example.com | | 3 | xiao | 23 | shenzhen | http://example.com | | 4 | jess | 45 | hangzhou | http://example.com | | 5 | jack | 14 | shanghai | http://example.com | | 6 | tomy | 25 | hangzhou | http://example.com | | 7 | lucy | 45 | shanghai | http://example.com | | 8 | tengyin | 26 | shanghai | http://example.com | | 9 | wangli | 27 | shenzhen | http://example.com | | 10 | xiaohua | 37 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+
サポートされているファイル形式
次の表に、サポートされている一般的なファイル形式を示します。
ファイルの各行はテーブルの 1 行に対応し、ファイルの各列はテーブルの 1 列に対応します。
以下の形式では、列名やデータ型を含むヘッダー行は解析時に無視されます。データは、ソースファイルのヘッダーではなく、インポート先テーブルの列の順序に基づいてインポートされます。
形式 | 要件 | 例 |
TabSeparated |
| |
TabSeparatedWithNames | この形式は TabSeparated に似ていますが、最初の行に列名が含まれます。このヘッダー行は解析時に無視されます。 | |
TabSeparatedWithNamesAndTypes | この形式は TabSeparated に似ていますが、最初の行に列名、2 行目にデータ型が含まれます。テキストが解析されるとき、最初の 2 行は無視されます。 | |
CSV |
| |
CSVWithNames | この形式は CSV に似ていますが、最初の行に列名が含まれます。テキストが解析されるとき、最初の行は無視されます。 | |
ファイル形式の詳細については、「入出力データの形式」をご参照ください。
関連ドキュメント
データ移行と同期ソリューションの詳細については、「データ移行と同期」をご参照ください。