これは、Azure Blob Storage または Azure Data Lake Storage から ClickHouse にデータをコピーする、最も効率的でシンプルな方法の 1 つです。このテーブル関数を使うと、ClickHouse が Azure ストレージに直接接続し、必要なときにデータを読み取るようにできます。
この関数は、元データに対して直接 select、insert、filter を実行できるテーブル形式インターフェイスを提供します。この関数は高度に最適化されており、CSV、JSON、Parquet、Arrow、TSV、ORC、Avro など、広く使われている多くのファイルフォーマットをサポートしています。完全な一覧については、"データフォーマット" を参照してください。
このセクションでは、Azure Blob Storage から ClickHouse にデータを転送するための簡単な入門ガイドと、この関数を効果的に使うための重要な注意点を説明します。詳細および高度なオプションについては、公式ドキュメントを参照してください。
azureBlobStorage テーブル関数 documentation page
Azure Blob Storage のアクセスキーを取得する
ClickHouse が Azure Blob Storage にアクセスするには、アクセスキーを含む接続文字列が必要です。
-
Azure Portal で Storage Account に移動します。
-
左側のメニューで、Security + networking セクションの Access keys を選択します。

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

-
接続文字列をコピーします。これは 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 つのファイルをダウンロードします。
-
サンプルファイル を Environmental Sensors データセット からダウンロードします。
-
Azure Portal で、ストレージ アカウントをまだ作成していない場合は、新しく作成します。
-
ストレージ アカウントに新しいコンテナーを作成します。この例では、名前を sensors にします。 既存のコンテナーを使用する場合は、この手順を省略できます。
-
先ほどダウンロードした
2019-06_bmp180.csv.zstファイルを コンテナーにアップロードします。 -
前述の手順に従って、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 = ';'- データをテーブルに読み込むには、元のデータセットで使用されている
スキーマを簡略化したものを作成します:
CREATE TABLE sensors ( sensor_id UInt16, lat Float32, lon Float32, timestamp DateTime, temperature Float32 ) ENGINE = MergeTree ORDER BY (timestamp, sensor_id);
- 次に、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 関数の基本的な使い方のみを紹介しました。より高度なオプションや設定の詳細については、公式ドキュメントを参照してください。