すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for ClickHouse:clickhouse-client を使用してデータをインポートする

最終更新日:Feb 18, 2025

ローカルファイルから 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: テーブルを作成する

  1. データベースに接続します。

    ApsaraDB for ClickHouse は Data Management (DMS) と統合されており、クラスターへの接続が容易になります。 DMS を使用してクラスターに接続する方法の詳細については、「DMS を使用して ApsaraDB for ClickHouse クラスターに接続する」をご参照ください。

    別のクライアントを使用する場合は、「データベースの接続性」をご参照ください。

  2. クラスターエディションに基づいてテーブルを作成します。

    重要

    テーブルフィールドとテーブルフィールドのデータ型、およびテキストフィールドとテキストフィールドのデータ型のマッピングに注意してください。宛先テーブルの列の順序とデータ型が、ソーステキストの列の順序とデータ型と完全に一致していることを確認してください。そうしないと、データのインポート中にエラーが発生する可能性があります。

    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 ファミリーのレプリケートテーブルエンジンを使用していることを確認してください。テーブルで非レプリケートテーブルエンジンを使用すると、テーブル上のデータはレプリカ間でレプリケートされません。これにより、データの不整合が発生する可能性があります。

    シングルレプリカエディション

    1. ローカルテーブルを作成します。

      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;
    2. オプション。分散テーブルを作成します。

      ローカルテーブルにのみデータをインポートする場合は、この手順をスキップします。

      クラスターがマルチノードクラスターの場合は、分散テーブルを作成することをお勧めします。

      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());

    デュアルレプリカエディション

    1. ローカルテーブルを作成します。

      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;
    2. オプション。分散テーブルを作成します。

      ローカルテーブルにのみデータをインポートする場合は、この手順をスキップします。

      クラスターがマルチノードクラスターの場合は、分散テーブルを作成することをお勧めします。

      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 がインストールされているサーバーに基づいて、適切な接続方法を選択することをお勧めします。

  • ECS インスタンス上:

    clickhouse-client が ApsaraDB for ClickHouse クラスターと同じ VPC 内にある場合は、VPC エンドポイントを使用してクラスターに接続することをお勧めします。これにより、内部ネットワーク経由でデータを迅速にインポートできます。

    clickhouse-client と ApsaraDB for ClickHouse クラスターが異なる VPC 内にある場合は、インターネット経由でクラスターに接続することをお勧めします。

  • ECS 以外のインスタンス上: インターネット経由でクラスターに接続することをお勧めします。

クラスターのパブリックエンドポイントを申請する方法の詳細については、「パブリックエンドポイントを申請および解放する」をご参照ください。

port

TCP ポート番号。 [クラスター情報] ページで TCP ポート番号を表示できます。

user

データベースアカウントのユーザー名。

password

データベースアカウントのパスワード。

table_name

宛先テーブルの名前。分散テーブルを作成する場合は、このパラメーターを分散テーブルの名前に設定します。

file_type

ソースファイルのタイプ。

ステップ 4: インポート結果を表示する

  1. クラスターに接続します。

    DMS を使用してクラスターに接続します。詳細については、「DMS を使用して ApsaraDB for ClickHouse クラスターに接続する」をご参照ください。

  2. 次のクエリ文を実行します。

    重要

    クラスターが 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

  • データはこの形式でテキストファイルに行ごとに書き込まれます。列はタブで区切られます。

  • タブ、改行、バックスラッシュを表すには、エスケープシーケンスが必要です。エスケープシーケンスは、タブの場合は \t、改行の場合は \n、バックスラッシュの場合は \\ です。

  • \N は NULL を示します。

Bob\t28\tSoftware engineer\n
John\t32\tData analyst\n
Tom\t25\tProduct manager\n

TabSeparatedWithNames

このファイル形式は TabSeparated 形式に似ていますが、この形式ではテキストの最初の行が列名である必要があります。最初の行は解析中に無視されます。

Name\tAge\tOccupation\n
Bob\t28\tSoftware engineer\n
John\t32\tData analyst\n
Tom\t25\tProduct manager\n

TabSeparatedWithNamesAndTypes

このファイル形式は TabSeparated 形式に似ていますが、最初の行の値は列名であり、2番目の行の値はデータ型です。最初と2番目の行は解析中に無視されます。

Name\tAge\tOccupation\n
String\tUInt16\tString\n
Bob\t28\tSoftware engineer\n
John\t32\tData analyst\n
Tom\t25\tProduct manager\n

CSV

  • データはこの形式でファイルに行ごとに書き込まれます。

  • 文字列の二重引用符 (") は、2つの二重引用符でエスケープされます。たとえば、"Hello, World!" 文字列は、ファイルでは ""Hello, World!"" と記述する必要があります。

  • 数値型の値は二重引用符 (") を使用しません。

  • デフォルトの列区切り文字は カンマ (,) です。インポートコマンドを実行するときに、--format_csv_delimiter パラメーターを使用して他の列区切り文字を指定できます。たとえば、縦棒 (|) で列を区切る場合は、次のコマンドを実行します。

    cat testData.csv | ./clickhouse-client --format_csv_delimiter="|" --host=cc-bp163l724nkf8****.clickhouse.ads.aliyuncs.com --port=3306 --user=test --password=123456Aa --query="INSERT INTO test_tbl_distributed FORMAT CSV";
Bob,28,Software engineer
John,t32,Data analyst
Tom,t25,Product manager

CSVWithNames

この形式は CSV 形式に似ていますが、最初の行の値は列名です。最初の行は解析中に無視されます。

id,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

サポートされているその他のファイル形式の詳細については、「入力および出力データの形式」をご参照ください。

関連情報

移行ソリューションの詳細については、「データの移行と同期」をご参照ください。