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

Использование HTTP интерфейса ClickHouse в Azure Data Factory

azureBlobStorage Табличная Функция является быстрым и удобным способом загрузки данных из Azure Blob Storage в ClickHouse. Однако, ее использование может не всегда подходить по следующим причинам:

  • Ваши данные могут быть не сохранены в Azure Blob Storage — например, они могут находиться в Azure SQL Database, Microsoft SQL Server или Cosmos DB.
  • Политики безопасности могут полностью запретить внешний доступ к Blob Storage — например, если учетная запись хранилища заблокирована и не имеет публичной конечной точки.

В таких сценариях вы можете использовать Azure Data Factory вместе с HTTP интерфейсом ClickHouse для отправки данных из сервисов Azure в ClickHouse.

Этот метод меняет поток: вместо того, чтобы ClickHouse получал данные из Azure, Azure Data Factory отправляет данные в ClickHouse. Обычно требуется, чтобы ваша инстанция ClickHouse была доступна из общественного интернета.

к сведению

Можно избежать открытия вашей инстанции ClickHouse для интернета, используя Azure Data Factory's Self-hosted Integration Runtime. Эта настройка позволяет отправлять данные по частной сети. Однако это выходит за рамки данной статьи. Вы можете найти более подробную информацию в официальном руководстве: Создание и конфигурация самостоятельно размещенного интеграционного времени

Превращение ClickHouse в REST сервис

Azure Data Factory поддерживает отправку данных во внешние системы по HTTP в формате JSON. Мы можем использовать эту возможность для вставки данных напрямую в ClickHouse с помощью HTTP интерфейса ClickHouse. Вы можете узнать больше в документации HTTP интерфейса ClickHouse.

В этом примере нам нужно всего лишь указать целевую таблицу, определить формат входных данных как JSON и включить опции для более гибкого анализа меток времени.

Чтобы отправить этот запрос в качестве части HTTP запроса, вам просто нужно передать его как URL-кодированную строку в параметре запроса вашего ClickHouse конечного пункта:

к сведению

Azure Data Factory может обрабатывать это кодирование автоматически, используя встроенную функцию encodeUriComponent, поэтому вам не нужно делать это вручную.

Теперь вы можете отправить данные в формате JSON на этот URL. Данные должны соответствовать структуре целевой таблицы. Вот простой пример с использованием curl, предполагая, что таблица состояла из трех колонок: col_1, col_2, и col_3.

Вы также можете отправить массив объектов JSON или JSON Lines (разделенные новой строкой JSON объекты). Azure Data Factory использует формат массива JSON, который отлично соответствует JSONEachRow входу ClickHouse.

Как вы видите, для этого шага вам не нужно делать ничего особенного на стороне ClickHouse. HTTP интерфейс уже предоставляет все необходимое для функционирования как REST-подобный конечный пункт — дополнительная конфигурация не требуется.

Теперь, когда мы сделали ClickHouse похожим на REST конечный пункт, пора настроить Azure Data Factory для его использования.

В следующих шагах мы создадим инстанцию Azure Data Factory, настроим Linked Service для вашей инстанции ClickHouse, определим Dataset для REST sink, и создадим активность Копирование Данных для отправки данных из Azure в ClickHouse.

Создание инстанции Azure Data Factory

Данный руководстве предполагает, что у вас есть доступ к учетной записи Microsoft Azure и что вы уже настроили подписку и группу ресурсов. Если у вас уже есть настроенный Azure Data Factory, то вы можете безопасно пропустить этот шаг и перейти к следующему, используя вашу существующую службу.

  1. Войдите в Портал Microsoft Azure и нажмите Создать ресурс.

  2. В левой панели категорий выберите Аналитика, затем нажмите на Data Factory в списке популярных сервисов.

  3. Выберите свою подписку и группу ресурсов, введите имя для новой инстанции Data Factory, выберите регион и оставьте версию как V2.

  4. Нажмите Обзор + Создать, затем нажмите Создать для запуска развертывания.

После успешного завершения развертывания, вы можете начать использовать вашу новую инстанцию Azure Data Factory.

Создание нового основанного на REST Linked Service

  1. Войдите в портал Microsoft Azure и откройте вашу инстанцию Data Factory.

  2. На странице обзора Data Factory нажмите Запустить Студию.

  3. В левом меню выберите Управление, затем перейдите в Связанные службы, и нажмите + Новый, чтобы создать новую связанную службу.

  4. В строке поиска Новая связанная служба введите REST, выберите REST и нажмите Продолжить для создания REST коннектора.

  5. В панели конфигурации связанной службы введите имя для вашего нового сервиса, нажмите на поле Базовый URL, затем нажмите Добавить динамическое содержимое (эта ссылка появится только при выборе поля).

  6. В панели динамического содержимого вы можете создать параметризованный URL, который позволяет вам определить запрос позже при создании наборов данных для различных таблиц — это делает связанную службу повторно используемой.

  7. Нажмите "+" рядом с полем фильтра и добавьте новый параметр, назовите его pQuery, установите тип как String и установите значение по умолчанию на SELECT 1. Нажмите Сохранить.

  8. В поле выражения введите следующее и нажмите ОК. Замените your-clickhouse-url.com на фактический адрес вашей инстанции ClickHouse.

  9. Вернитесь к основной форме, выберите Основную аутентификацию, введите имя пользователя и пароль, используемые для подключения к вашему HTTP интерфейсу ClickHouse, нажмите Проверка соединения. Если все настроено корректно, вы увидите сообщение об успехе.

  10. Нажмите Создать для завершения настройки.

Теперь вы должны увидеть свою новую зарегистрированную связанную службу на основе REST в списке.

Создание нового набора данных для HTTP интерфейса ClickHouse

Теперь, когда у нас есть настроенная связанная служба для HTTP интерфейса ClickHouse, мы можем создать набор данных, который Azure Data Factory будет использовать для отправки данных в ClickHouse.

В этом примере мы вставим небольшую часть Данных сенсоров окружающей среды.

  1. Откройте консоль запросов ClickHouse на ваш выбор — это может быть веб-интерфейс ClickHouse Cloud, клиент CLI или любой другой интерфейс, который вы используете для выполнения запросов — и создайте целевую таблицу:

  2. В Azure Data Factory Studio выберите Автора в левой панели. Наведите курсор на элемент Набор данных, нажмите на значок с тремя точками и выберите Новый набор данных.

  3. В строке поиска введите REST, выберите REST, и нажмите Продолжить. Введите имя для вашего набора данных и выберите связанную службу, которую вы создали на предыдущем шаге. Нажмите ОК, чтобы создать набор данных.

  4. Теперь вы должны увидеть ваш новый созданный набор данных в разделе Наборы данных в панели ресурсов фабрики слева. Выберите набор данных, чтобы открыть его свойства. Вы увидите параметр pQuery, который был определен в связанной службе. Нажмите на поле текста Значение. Затем нажмите Добавить динамическое содержимое.

  5. В открывшейся панели вставьте следующий запрос:

    осторожно

    Все одинарные кавычки ' в запросе должны быть заменены на две одинарные кавычки ''. Это необходимо для парсера выражений Azure Data Factory. Если вы не экранируете их, вы можете не увидеть ошибку сразу — но она произойдет позже, когда вы попытаетесь использовать или сохранить набор данных. Например, 'best_effort' должно быть записано как ''best_effort''.

  6. Нажмите ОК, чтобы сохранить выражение. Нажмите Проверка соединения. Если все настроено корректно, вы увидите сообщение об успешном соединении. Нажмите Опубликовать все в верхней части страницы, чтобы сохранить ваши изменения.

Настройка примера набора данных

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

к сведению

Чтобы сохранить этот гид сконцентрированным, мы не будем углубляться в точные шаги создания исходного набора данных в Azure Data Factory. Вы можете загрузить пример данных в любое сервис хранения на ваш выбор — например, Azure Blob Storage, Microsoft SQL Server, или даже в другом формате файлов, поддерживаемом Azure Data Factory.

Загрузите набор данных в ваше Azure Blob Storage (или другую предпочитаемую службу хранения). Затем, в Azure Data Factory Studio, перейдите в панель ресурсов фабрики. Создайте новый набор данных, который указывает на загруженные данные. Нажмите Опубликовать все, чтобы сохранить ваши изменения.

Создание активности копирования для передачи данных в ClickHouse

Теперь, когда мы настроили как входные, так и выходные наборы данных, мы можем настроить активность Копирование Данных для передачи данных из нашего примера набора данных в таблицу sensors в ClickHouse.

  1. Откройте Azure Data Factory Studio, перейдите на вкладку Автора. В панели Ресурсы фабрики наведите курсор на Конвейер, нажмите на значок с тремя точками и выберите Новый конвейер.

  2. В панели Деятельности раскройте раздел Перемещение и преобразование и перетащите активность Копирование данных на холст.

  3. Выберите вкладку Источником и выберите источник набора данных, который вы создали ранее.

  4. Перейдите на вкладку Приемник и выберите созданный для вашей таблицы сенсоров набор данных ClickHouse. Установите Метод запроса на POST. Убедитесь, что Тип сжатия HTTP установлен на Нет.

    осторожно

    Сжатие HTTP не работает корректно в активности Копирования Данных Azure Data Factory. Когда оно включено, Azure отправляет нагрузку, состоящую только из нулевых байтов — вероятно, это ошибка в службе. Обязательно оставьте сжатие выключенным.

    к сведению

    Мы рекомендуем сохранить размер пакета по умолчанию 10,000, или даже увеличить его дальше. Для получения дополнительной информации см. Выбор стратегии вставки / Пакетные вставки, если синхронно.

  5. Нажмите Отладка в верхней части холста, чтобы запустить конвейер. После короткого ожидания активность будет поставлена в очередь и выполнена. Если все настроено корректно, задача должна завершиться со статусом Успех.

  6. После завершения нажмите Опубликовать все, чтобы сохранить ваш конвейер и изменения в наборе данных.

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