Перейти к основному содержимому
Перейти к основному содержимому

Использование табличной функции ClickHouse azureBlobStorage

Это один из наиболее эффективных и простых способов копирования данных из Azure Blob Storage или Azure Data Lake Storage в ClickHouse. С помощью этой табличной функции вы можете указать ClickHouse подключиться напрямую к хранилищу Azure и считывать данные по требованию.

Функция предоставляет табличный интерфейс, который позволяет выбирать, вставлять и фильтровать данные непосредственно из источника. Функция высоко оптимизирована и поддерживает многие широко используемые форматы файлов, включая CSV, JSON, Parquet, Arrow, TSV, ORC, Avro и другие. Полный список см. в разделе "Data formats".

В этом разделе мы рассмотрим простой стартовый пример переноса данных из Azure Blob Storage в ClickHouse, а также важные аспекты эффективного использования этой функции. Для получения дополнительных сведений и описания расширенных параметров обратитесь к официальной документации — странице документации по табличной функции azureBlobStorage.

Получение ключей доступа Azure Blob Storage

Чтобы ClickHouse мог получить доступ к вашему Azure Blob Storage, вам понадобится строка подключения с ключом доступа.

  1. В портале Azure перейдите к своей учетной записи хранения (Storage Account).

  2. В меню слева выберите Access keys в разделе Security + networking.

    Azure Data Store Settings
  3. Выберите key1 или key2 и нажмите кнопку Show рядом с полем Connection string.

    Azure Data Store Access Keys
  4. Скопируйте строку подключения — вы будете использовать её как параметр в табличной функции azureBlobStorage.

Выполнение запросов к данным в Azure Blob Storage

Откройте удобную для вас консоль для выполнения запросов к ClickHouse — это может быть веб-интерфейс ClickHouse Cloud, CLI‑клиент ClickHouse или любой другой инструмент, который вы используете для запуска запросов. Как только у вас будут готовы строка подключения и консоль запросов ClickHouse, вы можете начинать выполнять запросы к данным напрямую из Azure Blob Storage.

В следующем примере мы выполняем запрос ко всем данным, хранящимся в JSON‑файлах в контейнере с именем data-container:

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

Это позволяет эффективно загружать внешние данные в ClickHouse без необходимости выполнять промежуточные шаги ETL.

Простой пример с использованием набора данных Environmental sensors

В качестве примера мы скачаем один файл из набора данных Environmental Sensors.

  1. Скачайте пример файла из набора данных Environmental Sensors.

  2. В Azure Portal создайте новую учётную запись хранилища, если у вас её ещё нет.

Примечание

Убедитесь, что для вашей учётной записи хранилища включён параметр 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, см. раздел Automatic schema inference from input data

  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 заполнена данными из файла 2019-06_bmp180.csv.zst, хранящегося в Azure Blob Storage.

Дополнительные материалы

Это лишь базовое введение в использование функции azureBlobStorage. Для более продвинутых возможностей и подробной информации о настройке обращайтесь к официальной документации: