Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ClickHouse の azureBlobStorage テーブル関数を使う

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

この関数は、元データに対して直接 select、insert、filter を実行できるテーブル形式インターフェイスを提供します。この関数は高度に最適化されており、CSVJSONParquetArrowTSVORCAvro など、広く使われている多くのファイルフォーマットをサポートしています。完全な一覧については、"データフォーマット" を参照してください。

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

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

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

  1. Azure Portal で 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 Portal で、ストレージ アカウントをまだ作成していない場合は、新しく作成します。

  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);
  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 関数の基本的な使い方のみを紹介しました。より高度なオプションや設定の詳細については、公式ドキュメントを参照してください。

Navigation