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

ApsaraDB for ClickHouse:OSSからのデータのインポート

最終更新日:Oct 17, 2024

テーブルエンジンまたはテーブル関数を使用して、OSS (Object Storage Service) からApsaraDB for ClickHouseにデータをインポートし、ログクエリ、分析、および処理を行うことができます。 このトピックでは、OSSからApsaraDB for ClickHouseにデータをインポートする方法について説明します。

前提条件

  • OSSが有効化されています。 OSSを有効化する方法の詳細については、OSSコンソールを使用して開始するトピックのOSSの有効化セクションをご参照ください。

  • バケット作成についての バケットとApsaraDB for ClickHouseクラスターは同じリージョンにデプロイされています。 バケットの作成方法の詳細については、「OSSコンソールを使用して開始する」トピックの「バケットの作成」セクションをご参照ください。

  • OSSバケットへのアクセスに使用されるAlibaba Cloudアカウントには、バケット内のオブジェクトに対する読み取り権限が付与されています。 権限を付与する方法の詳細については、「概要」をご参照ください。

データ準備

次のテストデータをtest.csvという名前のCSVファイルに保存し、そのファイルをOSSにアップロードします。 データをインポートする場合、ApsaraDB for ClickHouseクラスターでサポートされているデフォルトの列区切り文字はコンマ (,) です。 データをアップロードする方法の詳細については、「OSSコンソールを使用して開始する」トピックの「オブジェクトのアップロード」セクションをご参照ください。

1,yang,32,shanghai,http://example1.com
2,wang,22,beijing,http://example2.com
3,xiao,23,shenzhen,http://example3.com
4,jess,45,hangzhou,http://example4.com
5,jack,14,shanghai,http://example5.com
6,tomy,25,hangzhou,http://example6.com
7,lucy,45,shanghai,http://example7.com
8,tengyin,26,shanghai,http://example8.com
9,wangli,27,shenzhen,http://example9.com
10,xiaohua,37,shanghai,http://example10.com

手順

  1. ApsaraDB for ClickHouseクラスターに接続します。 詳細については、「ApsaraDB For ClickHouseクラスターへの接続」をご参照ください。

  2. oss_test_tbl_localという名前のローカルテーブルを作成します。

    重要
    • ApsaraDB for ClickHouseテーブルは、OSS外部テーブルと同じスキーマを使用し、OSS外部テーブルのデータ形式と互換性がある必要があります (特にnullフィールドの場合) 。 これにより、データ解析の失敗によるクラスターの問題を防ぎます。

    • ローカルテーブルを作成するには、ApsaraDB for ClickHouseクラスターのエディションに基づいてステートメントを実行する必要があります。 左側のナビゲーションウィンドウで [クラスター情報] をクリックし、[クラスタープロパティ] セクションでクラスターのエディションを表示します。

    • ビジネス要件に基づいてテーブルエンジンを選択できます。 テーブルエンジンの詳細については、「テーブルエンジン」をご参照ください。

    Single-replica Editionのクラスタにローカルテーブルを作成するために使用されるステートメント

    CREATE TABLE oss_test_tbl_local ON CLUSTER default
    (
    id UInt8,
    user_name String,
    age UInt16,
    city String,
    access_url String
    )
    ENGINE = MergeTree()
    ORDER BY id;

    Double-replica Editionのクラスタにローカルテーブルを作成するために使用するステートメント

    CREATE TABLE oss_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;
  3. (オプション) oss_test_tbl_distributedという名前の分散テーブルを作成します。

    説明

    コレクション内のローカルテーブルにデータを分散する場合は、分散テーブルを作成する必要があります。

    CREATE TABLE oss_test_tbl_distributed ON CLUSTER default
    (
    id UInt8,
    user_name String,
    age UInt16,
    city String,
    access_url String
    )
    ENGINE = Distributed(default, default, oss_test_tbl_local, rand());
  4. OSSからApsaraDB for ClickHouseにデータをインポートします。

    テーブルエンジンまたはテーブル関数を使用して、OSSからApsaraDB for ClickHouseにデータをインポートできます。

    重要

    OSS外部テーブルを作成するには、クラスターのカーネルバージョンに基づいてステートメントを実行する必要があります。 左側のナビゲーションウィンドウで [クラスター情報] をクリックし、[クラスタープロパティ] セクションにクラスターのカーネルバージョンを表示します。

    方法1: テーブルエンジンを使用してOSSからデータをインポート

    1. oss_test_tblという名前のOSS外部テーブルを作成します。

      22.8より前のバージョンのクラスターにOSS外部テーブルを作成するために使用される構文

      CREATE TABLE <table_name> [ON CLUSTER cluster]
      (
      'col_name1' col_type1,
      'col_name2' col_type2,
      ...
      )
      ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');

      バージョン22.8以降のクラスターにOSS外部テーブルを作成するために使用される構文

      CREATE TABLE <table_name> [ON CLUSTER cluster]
      (
      'col_name1' col_type1,
      'col_name2' col_type2,
      ...
      )
      ENGINE = OSS('https://<BucketName>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');

      下表に、各パラメーターを説明します。

      パラメーター

      説明

      table_name

      テーブルの名前。

      ON CLUSTERクラスター

      各ノードにローカルテーブルを作成することを指定します。 値をON CLUSTER defaultに設定します。

      col_name1、col_name2

      列の名前。

      col_type1,col_type2

      列のデータ型。

      重要

      OSS外部テーブルのスキーマは、OSS内のデータを含むCSVファイルのスキーマに対応している必要があります。

      BucketName

      バケットの名前です。

      oss-endpoint

      OSSへのアクセスに使用されるエンドポイント。 詳細は、「リージョンとエンドポイント」をご参照ください。

      重要

      バケットとApsaraDB for ClickHouseクラスターが同じリージョンにデプロイされていること、および仮想プライベートクラウド (VPC) 経由でOSSにアクセスできることを確認してください。

      ファイル名

      ファイルの名前。

      access-key-id

      OSSのデータにアクセスするために使用するAccessKey ID。 詳細については、「」をご参照ください。AccessKeyペアを取得するにはどうすればよいですか?

      {access-key-secret}

      OSSのデータにアクセスするために使用するAccessKeyシークレット。 詳細については、「」をご参照ください。AccessKeyペアを取得するにはどうすればよいですか?

      oss-file-path

      アップロードしたCSVファイルの保存パス。 パスはoss://<bucket-name>/<path-to-file> 形式です。

      説明

      oss-file-pathパラメーターは、ワイルドカード文字を使用するファジーマッチングをサポートします。 詳細については、このトピックの「ワイルドカード文字を使用してOSSのストレージパスのファジーマッチングを実行する」をご参照ください。

      ファイル形式名

      ファイルの形式。 このトピックでは、CSV形式を使用します。

      サンプル文:

      22.8より前のバージョンのクラスターにOSS外部テーブルを作成するために使用されるサンプル文

      クラスターのデフォルトでの

      CREATE TABLE oss_test_tbl on cluster default
      (
      id UInt8,
      user_name String,
      age UInt16,
      city String,
      access_url String
      )
      ENGINE = OSS('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'oss://testBucketName/test.csv', 'CSV');

      バージョン22.8以降のクラスターにOSS外部テーブルを作成するために使用されるサンプル文

      クラスターのデフォルトでの

      CREATE TABLE oss_test_tbl on cluster default
      (
      id UInt8,
      user_name String,
      age UInt16,
      city String,
      access_url String
      )
      ENGINE = OSS('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****','CSV')
    2. OSS外部テーブルoss_test_tblから分散テーブルoss_test_tbl_distributedにデータをインポートします。

      説明

      OSSからローカルテーブルにのみデータをインポートする必要がある場合は、INSERT INTOステートメントの分散テーブルの名前をローカルテーブルの名前に置き換えます。

      INSERT INTO oss_test_tbl_distributed SELECT * FROM oss_test_tbl;

      インポートするCSVファイルの列区切り文字にコンマ (,) を使用しない場合は, INSERT INTO文のformat_csv_delimiterパラメーターで別の列区切り文字を指定する必要があります。 たとえば、縦棒 (|) がCSVファイルの列区切り文字として使用されている場合、次のステートメントを実行します。

      INSERT INTO oss_test_tbl_distributed SELECT * FROM oss_test_tbl settings format_csv_delimiter='|';

    方法2: テーブル関数を使用してOSSからデータをインポート

    OSSから22.8より前のバージョンのクラスターにデータをインポートするために使用される構文

    INSERT INTO <table_name> SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');

    OSSからバージョン22.8以降のクラスターにデータをインポートするために使用される構文

    INSERT INTO <table_name> SELECT * FROM oss('https://<BucketName>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');

    パラメーターの詳細については、このトピックの「パラメーターを説明する表」をご参照ください。

    サンプル文:

    OSSから22.8より前のバージョンのクラスターにデータをインポートするために使用されるサンプル文

    INSERT INTO oss_test_tbl_distributed SELECT * FROM oss('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'oss://testBucketName/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');

    OSSからバージョン22.8以降のクラスターにデータをインポートするために使用されるサンプル文

    INSERT INTO oss_test_tbl_distributed SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');

    インポートするCSVファイルの列区切り文字にコンマ (,) を使用しない場合は, INSERT INTO文のformat_csv_delimiterパラメーターで別の列区切り文字を指定する必要があります。 たとえば、縦棒 (|) がCSVファイルの列区切り文字として使用されている場合、次のステートメントを実行します。

    INSERT INTO oss_test_tbl_distributed SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>',  '<col_name> <col_type>(,...)') settings format_csv_delimiter='|';
  5. 分散テーブルoss_test_tbl_distributedのデータを照会し、OSSのデータがApsaraDB for ClickHouseにインポートされているかどうかを確認します。

    SELECT * FROM oss_test_tbl_distributed; 

    次の応答が返されます。

    ┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐
    │  1 │  yang     │   32  │  shanghai  │  http://example1.com  │
    │  2 │  wang     │   22  │  beijing   │  http://example2.com  │
    │  3 │  xiao     │   23  │  shenzhen  │  http://example3.com  │
    │  4 │  jess     │   45  │  hangzhou  │  http://example4.com  │
    │  5 │  jack     │   14  │  shanghai  │  http://example5.com  │
    │  6 │  tomy     │   25  │  hangzhou  │  http://example6.com  │
    │  7 │  lucy     │   45  │  shanghai  │  http://example7.com  │
    │  8 │  tengyin  │   26  │  shanghai  │  http://example8.com  │
    │  9 │  wangli   │   27  │  shenzhen  │  http://example9.com  │
    │ 10 │  xiaohua  │   37  │  shanghai  │  http://example10.com │
    └────┴───────────┴───────┴────────────┴───────────────────────┘

ワイルドカード文字を使用したOSSのストレージパスのファジーマッチング

ほとんどの場合、OSS内の複数の小さなファイルは、同じ命名規則に基づいて作成されます。 小さなファイルの分析を簡単にするために、oss-file-pathパラメーターを設定してファジーマッチングを実行するときに、次のワイルドカード文字を使用できます。

  • *: すべてのファイルまたはディレクトリに一致します。 たとえば、/dir/* は、/dirディレクトリ内のすべてのファイルと一致します。

  • {x, y, z}: 括弧 {} で囲まれた値のいずれかに一致します。 たとえば、file_{x, y, z} は、file_xfile_y、またはfile_zと一致します。

  • {num1. num2}: 最小値、最大値、またはそれらの間の値に一致します。 たとえば、file_{1 .. 3} は、file_1file_2、またはfile_3と一致します。

  • ?: ランダムな文字に一致します。 たとえば、ファイル_? は、file_afile_bfile_c、または名前が類似している他のファイルに一致します。

ファイルは、次の構造を使用するディレクトリにアップロードできます。

oss://testBucketName/
               doc-data/
                    oss-import/
                        small_files/
                            access_log_csv_1.txt
                            access_log_csv_2.txt
                            access_log_csv_3.txt

次のリストは、参照用にのみoss-file-pathパラメーターの値を示しています。

  • oss:// testBucketName/doc-data/oss-import/small_files/*

  • oss:// testBucketName/doc-data/oss-import/small_files/access *

  • oss:// testBucketName/doc-data/oss-import/small_files/access_log_csv_{1,2,3}.txt

  • oss:// testBucketName/doc-data/oss-import/*/access_log_csv_{1,2,3}.txt

  • oss:// testBucketName/doc-data/oss-import/*/*

  • oss:// testBucketName/doc-data/oss-import/*/access_log_csv_{1...3}.txt

  • oss:// testBucketName/doc-data/oss-import/*/access_log_csv_?.txt