ローカルファイルから ApsaraDB for ClickHouse にデータをインポートする場合、clickhouse-client を使用できます。このトピックでは、ApsaraDB for ClickHouse にデータをインポートする方法について説明します。
前提条件
データベースアカウントが作成されていること。詳細については、「Community 互換エディションクラスターのデータベースアカウントを管理する」および「Enterprise Edition クラスターのデータベースアカウントを管理する」をご参照ください。
clickhouse-client がインストールされており、clickhouse-client のバージョンがクラスターのバージョン以上であること。詳細については、「clickhouse-client をインストールする」をご参照ください。
説明インターネット経由のデータインポートは低速です。大量のデータをインポートする場合、またはインポートパフォーマンスをテストする場合は、内部ネットワーク経由でデータをインポートできます。
内部ネットワーク経由でデータをインポートするには、ApsaraDB for ClickHouse クラスターと同じ VPC 内にある Elastic Compute Service (ECS) インスタンスに clickhouse-client をインストールします。その後、VPC エンドポイントを使用してクラスターに接続できます。
ECS インスタンスに clickhouse-client をインストールする場合は、ECS インスタンスのインターネットアクセスを有効にする必要があります。
ECS インスタンスを購入していない場合は、ECS インスタンスの購入時に [パブリック IP アドレス] フィールドのチェックボックスをオンにすることをお勧めします。 ECS インスタンスの購入方法の詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
ECS インスタンスを購入済みであるがインターネットアクセスが無効になっている場合は、ECS インスタンスに Elastic IP アドレス (EIP) を関連付ける必要があります。詳細については、「EIP を ECS インスタンスに関連付ける」をご参照ください。
clickhouse-client がインストールされているサーバーの IP アドレスが、ApsaraDB for ClickHouse クラスターのホワイトリストに追加されていること。ホワイトリストの設定方法の詳細については、「ホワイトリストを設定する」をご参照ください。
インポートするファイルの形式が ApsaraDB for ClickHouse でサポートされていること。サポートされているファイル形式と要件の詳細については、「clickhouse-client を使用してデータをインポートする」をご参照ください。
手順
この例では、ApsaraDB for ClickHouse クラスターのデフォルトデータベースにある test_tbl_distributed 分散テーブルに CSV ファイルをインポートする方法を示します。ビジネス要件に基づいてパラメーターを変更できます。サンプル環境:
宛先データベース: default
宛先テーブル: test_tbl_distributed
データソース: testData.csv ファイル
ステップ 1: データを準備する
clickhouse-client がインストールされているディレクトリに、testData.csv という名前の 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: テーブルを作成する
データベースに接続します。
ApsaraDB for ClickHouse は Data Management (DMS) と統合されており、クラスターへの接続が容易になります。 DMS を使用してクラスターに接続する方法の詳細については、「DMS を使用して ApsaraDB for ClickHouse クラスターに接続する」をご参照ください。
別のクライアントを使用する場合は、「データベースの接続性」をご参照ください。
クラスターエディションに基づいてテーブルを作成します。
重要テーブルフィールドとテーブルフィールドのデータ型、およびテキストフィールドとテキストフィールドのデータ型のマッピングに注意してください。宛先テーブルの列の順序とデータ型が、ソーステキストの列の順序とデータ型と完全に一致していることを確認してください。そうしないと、データのインポート中にエラーが発生する可能性があります。
Enterprise Edition クラスターの場合、ローカルテーブルのみを作成する必要があります。 Community 互換クラスターの場合、ビジネス要件に基づいて分散テーブルを作成する必要がある場合があります。次のサンプル文は、テーブルの作成方法の例を示しています。詳細については、「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 互換エディション
シングルレプリカエディションとデュアルレプリカエディションで使用されるテーブルエンジンは異なります。使用するレプリカタイプに基づいてテーブルエンジンを選択します。
重要ダブルレプリカエディションクラスターでテーブルを作成する場合は、テーブルで MergeTree ファミリーのレプリケートテーブルエンジンを使用していることを確認してください。テーブルで非レプリケートテーブルエンジンを使用すると、テーブル上のデータはレプリカ間でレプリケートされません。これにより、データの不整合が発生する可能性があります。
シングルレプリカエディション
ローカルテーブルを作成します。
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 エンドポイント。 [クラスター情報] ページでパブリックエンドポイントまたは VPC エンドポイントを表示できます。 clickhouse-client がインストールされているサーバーに基づいて、適切な接続方法を選択することをお勧めします。
クラスターのパブリックエンドポイントを申請する方法の詳細については、「パブリックエンドポイントを申請および解放する」をご参照ください。 |
port | TCP ポート番号。 [クラスター情報] ページで TCP ポート番号を表示できます。 |
user | データベースアカウントのユーザー名。 |
password | データベースアカウントのパスワード。 |
table_name | 宛先テーブルの名前。分散テーブルを作成する場合は、このパラメーターを分散テーブルの名前に設定します。 |
file_type | ソースファイルのタイプ。 |
ステップ 4: インポート結果を表示する
クラスターに接続します。
DMS を使用してクラスターに接続します。詳細については、「DMS を使用して ApsaraDB for ClickHouse クラスターに接続する」をご参照ください。
次のクエリ文を実行します。
重要クラスターが Community 互換エディションを実行し、複数のノードが含まれている場合は、分散テーブルをクエリしてすべてのノードから完全なデータを取得することをお勧めします。分散されていないテーブルをクエリすると、クラスター内の単一ノードからのみデータを取得できます。これは、インポートしたデータよりも少なくなります。
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 | +--------------+---------------------+---------------+----------------+----------------------+
サポートされているファイル形式
次の表に、インポートできる一般的なファイル形式を示します。
テキストでは、データの各行はテーブル内の単一のレコードに対応し、データの各列はテーブルの作成時に指定されたフィールドに対応します。
最初または2番目の列に列名または列タイプの説明が含まれている場合、説明は解析されません。インポートする生データのみが処理されます。ファイルに記述されている列名とデータ型は、データが挿入されるテーブルの列の位置またはデータ型を決定しません。
ファイル形式 | テキスト要件 | 例 |
TabSeparated |
|
|
TabSeparatedWithNames | このファイル形式は TabSeparated 形式に似ていますが、この形式ではテキストの最初の行が列名である必要があります。最初の行は解析中に無視されます。 |
|
TabSeparatedWithNamesAndTypes | このファイル形式は TabSeparated 形式に似ていますが、最初の行の値は列名であり、2番目の行の値はデータ型です。最初と2番目の行は解析中に無視されます。 |
|
CSV |
|
|
CSVWithNames | この形式は CSV 形式に似ていますが、最初の行の値は列名です。最初の行は解析中に無視されます。 |
|
サポートされているその他のファイル形式の詳細については、「入力および出力データの形式」をご参照ください。
関連情報
移行ソリューションの詳細については、「データの移行と同期」をご参照ください。