メインコンテンツへスキップ
メインコンテンツへスキップ

ClickHouse の azureBlobStorage テーブル関数の使用

これは、Azure Blob Storage または Azure Data Lake Storage から ClickHouse へ データをコピーするための、最も効率的でシンプルな方法の 1 つです。この テーブル関数を使うことで、ClickHouse に Azure ストレージへ直接接続させ、 オンデマンドでデータを読み取るよう指示できます。

この関数は、テーブルに似たインターフェイスを提供し、ソースから直接 SELECTINSERT、およびフィルタリングを行うことができます。この関数は 高度に最適化されており、CSVJSONParquetArrowTSVORCAvro など、広く利用されている多くのファイル形式をサポートします。サポート している形式の網羅的な一覧は、"データ形式" を参照して ください。

このセクションでは、Azure Blob Storage から ClickHouse へデータを転送する ためのシンプルな入門ガイドと、この関数を効果的に使用するうえで重要な注意点に ついて説明します。詳細および高度なオプションについては、公式ドキュメントを 参照してください: azureBlobStorage テーブル関数ドキュメントページ

Azure Blob Storage アクセスキーの取得

ClickHouse から Azure Blob Storage にアクセスできるようにするには、アクセスキー付きの接続文字列が必要です。

  1. Azure ポータルで、Storage Account に移動します。

  2. 左側のメニューで、Security + networking セクションの下にある Access keys を選択します。

    Azure Data Store Settings
  3. key1 または key2 のいずれかを選択し、Connection string フィールドの横にある Show ボタンをクリックします。

    Azure Data Store Access Keys
  4. 接続文字列をコピーします。この文字列は azureBlobStorage テーブル関数のパラメーターとして指定します。

Azure Blob Storage 上のデータをクエリする

利用している ClickHouse のクエリコンソールを開きます。これは ClickHouse Cloud の Web インターフェイス、ClickHouse CLI クライアント、またはクエリを実行するために使用しているその他のツールのいずれでも構いません。接続文字列と ClickHouse のクエリコンソールの両方が用意できたら、Azure Blob Storage 上のデータに対して直接クエリを実行できるようになります。

次の例では、data-container という名前のコンテナ内にある JSON ファイルに保存されたすべてのデータをクエリします。

SELECT * FROM azureBlobStorage(
    '<YOUR CONNECTION STRING>',
    'data-container',
    '*.json',
    'JSONEachRow');

そのデータをローカルの ClickHouse テーブル(例: my_table)にコピーするには、 INSERT INTO ... SELECT 文を使用できます。

INSERT INTO my_table
SELECT * FROM azureBlobStorage(
    '<YOUR CONNECTION STRING>',
    'data-container',
    '*.json',
    'JSONEachRow');

これにより、ETL の中間処理を挟むことなく、外部データを ClickHouse に効率的に取り込めます。

Environmental Sensors データセットを使った簡単な例

例として、Environmental Sensors データセットから 1 つのファイルをダウンロードします。

  1. Environmental Sensors データセット から サンプルファイル をダウンロードします。

  2. Azure ポータルで、まだストレージ アカウントを持っていない場合は、新しいストレージ アカウントを作成します。

注意

ストレージ アカウントで Allow storage account key access が有効になっていることを確認してください。 無効になっている場合、アカウント キーを使用してデータにアクセスできません。

  1. ストレージ アカウントに新しいコンテナーを作成します。この例では、コンテナー名を sensors とします。 既存のコンテナーを使用する場合は、この手順をスキップできます。

  2. 先ほどダウンロードした 2019-06_bmp180.csv.zst ファイルをコンテナーにアップロードします。

  3. 前の手順で説明したとおりに、Azure Blob Storage の接続文字列を取得します。

ここまでの設定が完了したら、Azure Blob Storage からデータに対して直接クエリを実行できます。

    SELECT *
    FROM azureBlobStorage(
        '<YOUR CONNECTION STRING>', 
        'sensors',
        '2019-06_bmp180.csv.zst', 
        'CSVWithNames')
    LIMIT 10
    SETTINGS format_csv_delimiter = ';'
  1. データをテーブルに読み込むには、元のデータセットで使用されているスキーマの簡略版を作成します:
    CREATE TABLE sensors
    (
        sensor_id UInt16,
        lat Float32,
        lon Float32,
        timestamp DateTime,
        temperature Float32
    )
    ENGINE = MergeTree
    ORDER BY (timestamp, sensor_id);
    
情報

Azure Blob Storage のような外部ソースに対してクエリを実行する際の構成オプションやスキーマ推論の詳細については、入力データからの自動スキーマ推論を参照してください。

  1. 次に、Azure Blob Storage から sensors テーブルにデータを挿入します:
    INSERT INTO sensors
    SELECT sensor_id, lat, lon, timestamp, temperature
    FROM azureBlobStorage(
        '<YOUR CONNECTION STRING>', 
        'sensors',
        '2019-06_bmp180.csv.zst', 
        'CSVWithNames')
    SETTINGS format_csv_delimiter = ';'
    

これで、Azure Blob Storage に保存されている 2019-06_bmp180.csv.zst ファイルからのデータが sensors テーブルに読み込まれました。

参考資料

ここでは、azureBlobStorage テーブル関数の基本的な使い方のみを紹介しました。より高度なオプションや設定の詳細については、公式ドキュメントを参照してください。