メインコンテンツまでスキップ
メインコンテンツまでスキップ

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

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

これは、ソースから直接データを選択、挿入、フィルタリングできるテーブルのようなインターフェイスを提供します。この関数は非常に最適化されており、CSV, JSON, Parquet, Arrow, TSV, ORC, Avroなど、広く使用されている多くのファイル形式をサポートしています。完全なリストについては、"データ形式"を参照してください。

このセクションでは、Azure Blob StorageからClickHouseへのデータ転送のための簡単なスタートアップガイドと、この関数を効果的に使用するための重要な考慮事項について説明します。詳細や高度なオプションについては、公式ドキュメントを参照してください: azureBlobStorage テーブル関数のドキュメントページ

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

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

  1. Azureポータルで、ストレージアカウントに移動します。

  2. 左側のメニューで、セキュリティ + ネットワーキングセクションの下にあるアクセスキーを選択します。

    Azure データストア設定
  3. key1またはkey2のいずれかを選択し、接続文字列フィールドの横にある表示ボタンをクリックします。

    Azure データストアアクセスキー
  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に効率的に取り込むことができます。

環境センサーデータセットを使用したシンプルな例

例として、環境センサーのデータセットから単一のファイルをダウンロードします。

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

  2. Azureポータルで、新しいストレージアカウントを作成します。すでにある場合はこのステップをスキップできます。

注意

ストレージアカウントキーアクセスを許可することがストレージアカウントで有効にされていることを確認してください。そうしないと、アカウントキーを使用してデータにアクセスできません。

  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 = ';'

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

追加リソース

これは、azureBlobStorage関数の使用に関する基本的な紹介に過ぎません。より高度なオプションや構成の詳細については、公式ドキュメントを参照してください: