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

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

Это один из самых эффективных и простых способов копирования данных из Azure Blob Storage или Azure Data Lake Storage в ClickHouse. С помощью этой функции таблицы вы можете указать 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, клиент 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.

Простой пример с использованием набора данных сенсоров окружающей среды

В качестве примера мы загрузим один файл из набора данных сенсоров окружающей среды.

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

Дополнительные ресурсы

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