BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по ClickHouse » Энциклопедия ClickHouse » clickhouse multiif

clickhouse multiif

 

Краткое введение

В условиях современных аналитических пайплайнов число условий в бизнес-логике растёт пропорционально сложности требований к сегментации, категоризации и вычислению метрик. Правильное применение многоусловной логики в ClickHouse не просто упрощает SQL-запросы, но и существенно влияет на производительность и читаемость кода. Глава посвящена концепции и практикам использования функции multiIf в ClickHouse, а также сопутствующим паттернам, которые позволяют держать бизнес-правила в одном месте, снижать стоимость вычислений и минимизировать риски ошибок. В рамках курса мы сравним multiIf с вложенными if, рассмотрим типичные сценарии категоризации и матчинга значений, обсудим архитектурные решения и механизмы тестирования, а также приведём реальные примеры внедрения в открытых и российских продуктах.

 

Введение

ClickHouse известен как высокопроизводительная колоночная СУБД, ориентированная на аналитические запросы в реальном времени. Одним из рабочих инструментов для реализации бизнес-логики на уровне выборки являются условные выражения. Функция multiIf позволяет задать последовательность условий и вернуть соответствующее значение для первого истинного условия, а также задать значение по умолчанию. Эта конструкция удобна для категоризации, маппинга значений, ранжирования и динамических вычислений без необходимости писать сложные вложенные CASE-подобные выражения.

Почему это важно в рамках курса:

  • единая точка определения категорий и правил расчёта в одном SQL-выражении;
  • минимизация количества проходов по данным, если реализована корректная логика;
  • упрощение миграций бизнес-правил: достаточно изменить часть конвейера без переработки множества запросов;
  • возможность кэширования и использования материализованных столбцов для ускорения выполнения.

Далее мы разберём как теоретически выстраивать логику multiIf, какие есть подводные камни и как реализовать устойчивые к изменениям аналитические пайплайны.

 

Теоретические основы и терминология

  • Что такое multiIf

    • Это функция, которая принимает пары "условие - результат" и, наконец, значение по умолчанию. Для первого условия, которое оказывается истинным, возвращается соответствующий результат. Если ни одно условие не удовлетворено, возвращается значение по умолчанию.
    • Синтаксис (упрощённо): multiIf(cond1, result1, cond2, result2, ..., default_result)
  • Сравнение с if и CASE

    • В ClickHouse доступно несколько форм условной логики: if(condition, true_value, false_value) и multiIf(...). В некоторых случаях CASE-выражения могут быть не поддержаны напрямую в стандартном SQL-потоке, поэтому multiIf становится удобной альтернативой для множественных условий.
    • В отличие от вложенных вложенных if, multiIf часто обеспечивает более компактную запись и меньшую стоимость обертываний.
  • Поведение по умолчанию и привязка типов

    • Результаты в разных ветках могут иметь разные типы. ClickHouse пытается привести типы к совместимому общему типу. В некоторых случаях следует явно приводить типы через CAST, чтобы избежать неоднозначностей.
  • Векторизация и вычислительная модель

    • В ClickHouse выражения вычисляются по строкам, часто векторизованно. При использовании multiIf важно учитывать, что для больших массивов данных избыточные вычисления могут повлиять на производительность, если условия сложны.
  • Типы условий

    • Условия могут быть сравнения значений, проверки на принадлежность к набору, числовые диапазоны, строковые сопоставления и т. д. Важно держать логику в рамках предсказуемых, индексируемых условий, чтобы ускорить сканирование.
  • Логика исключений и дефолтов

    • Значение по умолчанию должно быть грамотно выбрано: оно играет роль "catch-all" и удерживает данные от непредвиденных результатов. Часто дефолт обеспечивает явную обработку пустых или неизвестных значений.

       

Методологии и подходы

  • Простой сценарий: категоризация по диапазонам
    • Пример: присвоение рейтинга для продаж по объёму выручки.
    • Преимущество: компактная форма выражения, понятная для бизнес-аналитиков.
  • Сложная бизнес-логика: множественные условия с разной весомостью
    • В этом случае multiIf может заменить последовательность вложенных условий.
    • Важно документировать порядок условий и границы диапазонов.
  • Паттерн матчинга значений вместо больших CASE-деревьев
    • Можно использовать таблицу соответствий и присоединение (join) для сложной матчинговой логики, чтобы не перегружать запрос.
  • Комбинация multiIf и словаря (dictionary)
    • Для больших наборов правил эффективнее держать правила в отдельной справочной таблице или словаре и применять соединение или функции lookup.
  • Фрагментация логики и тестирование
    • Разделение правил на небольшие, независимые модули облегчает отладку и повторное использование.
  • Управление дефолтами и обратная совместимость
    • Внимание к тем случаям, когда новые правила должны не ломать старые данные.

       

Архитектура и технологическая реализация

  • Общее решение

    • Данные собираются в OLAP-структуру ClickHouse, где условная логика применяется непосредственно в SELECT-выражениях или в материализованных представлениях (материализованные представления, MV).
    • При больших наборах правил целесообразно вынести логику в отдельную таблицу соответствий (mapping table) и выполнить JOIN, чтобы снизить сложность запросов и увеличить читаемость.
  • Типичные узлы архитектуры

    • Источник данных (лог, транзакционная база, конвейеры ELT)
    • Чистка и категоризация (слой трансформаций, где применяется multiIf)
    • Загрузка в аналитическую модель (модель столбцов, агрегации, индексы, TTL)
    • Репликация и резервирование данных
  • Варианты реализации multiIf

    • Прямой мультиусловный выражение в SELECT
    • Маппинг через отдельную таблицу категорий (например, range_to_label таблица)
    • Комбинации multiIf с другими функциями для обеспечения устойчивости к изменениям
  • Интеграция с российскими и открытыми решениями

    • Открытое решение: ClickHouse (Open Source)
    • Российские продукты и решения:
      • Postgres Pro (распространение PostgreSQL с поддержкой корпоративного уровня).
      • Яндекс DataLens и Яндекс DataSphere как инструменты визуализации и подготовки данных, в которых можно строить паттерны категоризации и встраивать их в аналитические конвейеры.
      • Яндекс Keeper внутри экосистемы ClickHouse и его проекции на высокую Availability.
    • В качестве взаимодополнения можно использовать Hadoop-экосистему или Spark на открытом ПО для подготовки больших наборов правил и выгрузки в формате, удобном для ClickHouse.
  • Пример архитектуры

    • Источники: Kafka, файловые накопители (Parquet/ORC)
    • Слоёвая обработка:
      • Слой очистки и нормализации
      • Слой правил multiIf или маппинг-таблица
      • Модель агрегирования и подготовка витрин
    • Витрины: materialized views для ускорения частых запросов
    • Мониторинг и тестирование: CI/CD pipelines для SQL-правил, unit-тесты на выборке данных
  • Примеры техник

    • Материализованные выражения: создание столбца-выражения через Materialized View, где логика multiIf уже вычислена на уровне загрузки данных
    • Шаблоны: вынесение правил в отдельные таблицы-словарь и использование JOIN вместо большого multiIf в основном запросе
    • Векторизация: учитывать, что некоторые условия могут быть выражены через функции ARRAY и EXISTS для ускорения проверок принадлежности к списку

       

Организационные и процессные аспекты

  • Управление изменениями правил
    • Включайте версионирование правил, документируйте изменения и создавайте тестовые наборы данных для регрессионного тестирования.
  • Ответственность за бизнес-правила
    • Назначайте ответственных за правила категоризации (data owners) и храните логи изменений.
  • Тестирование и наборы тестов
    • Наборы тестов должны покрывать типичные случаи, границы диапазонов, случаи отсутствия данных и проверки дефолтов.
  • Документация и доступ к правилам
    • Ведите централизованную документацию по всем правилам multiIf и маппинг-таблицам. Документация должна быть доступна аналитикам, инженерным лидерам и ИТ-директорам.

       

Технические детали реализации (алгоритмы, схемы, протоколы, интеграции)

  • Простая реализация с multiIf

    • Пример 1: категоризация по диапазонам продаж
      код:
      SELECT
      order_id,
      amount,
      multiIf(amount < 100, 'low',
      amount < 1000, 'medium',
      amount < 10000, 'high',
      'very high') AS revenue_band
      FROM sales;

    • Пример 2: статусы задач
      код:
      SELECT
      task_id,
      status,
      multiIf(status = 'new', 'New',
      status = 'in_progress', 'In Progress',
      status = 'done', 'Completed',
      'Unknown') AS status_label
      FROM tasks;

  • Сложные правила через маппинг-таблицу

    • Таблица category_mapping (condition_code, label)
    • Вариант 1: простая линейная сопоставимость с условием
      код:
      SELECT
      user_id,
      revenue,
      COALESCE(mapping.label, 'other') AS category
      FROM events

       

LEFT JOIN mapping_table AS mapping

 

ON (events.segment = mapping.condition_code);

  • Вариант 2: диапазоны, связанные с пользователями, через словарь
    код:
    SELECT
    user_id,
    revenue,
    dict_label as category

     

FROM events

LEFT JOIN dict_table ON events.user_segment = dict_table.segment;
  • Вариант 3: совместное использование CASE/ELSE в сочетании с маппингом
    код:
    SELECT
    id,
    COALESCE(label, 'Unknown') AS category
    FROM (

     

SELECT id,

         multiIf(country IN ('RU', 'UA', 'BY'), 'CIS',
                 country IN ('DE', 'FR'), 'EU',
                 'OTHER') AS label
  FROM users
);
  • Производительность и оптимизация

    • Рассмотрите возможность переноса сложной логики в отдельный столбец materialized view, чтобы ускорить повторные запросы.
    • Если правило слишком длинное или содержит дорогостоящие условия (например, регулярные выражения), вынос их в отдельную таблицу и использование JOIN может быть выгоднее.
    • Учитывайте частотность веток: если одно условие истинно чаще других, можно оптимизировать расположение условий так, чтобы наиболее вероятные ветви размещались первыми.
  • Примеры интеграции с инструментами

    • Open-source: ClickHouse в связке с Apache Kafka для стриминга данных, PostgreSQL/Postgres Pro как источник маппинга и справочников.
    • Российские продукты: Яндекс DataLens для визуализации и проверки результатов категории, Yandex DataSphere для подготовки и публикации моделей и пайплайнов.
    • Пример интеграции с parallel pipelines и тестированием через GitHub Actions: тестовые скрипты на SQL и данные-фикстуры в репозитории.
  • Архитектурная схема (ASCII)

    • Источник данных -> Трансформация (multiIf и маппинг) -> Витрина -> BI/SQL-запросы
    • Диаграмма:
      Источник данных -> [ ETL → Tрансформации] -> MultiIf/Dictionary lookup -> Витрина -> Аналитика
----------------------------------------
v
Входные данные Материализованные столбцы/Views -> Dashboards

 

Риски, ограничения и типовые ошибки

  • Неподдерживаемые типы и приведения

    • Разные ветви могут возвращать значения разных типов. Приводите к общему типу явно (CAST), чтобы избежать исключений и несовместимости.
  • Сложность поддержания больших правил

    • Большие наборы условий приводят к нечитабельному коду. Разделяйте правила на модули, документируйте и используйте внешние таблицы соответствий.
  • Эффективность

    • В больших таблицах неэффективность может возникнуть, если условия вычисляются дорого: регулярные выражения, сложные вычисления на каждой ветке. Перенос части логики в словари или MV может снизить нагрузку.
  • Риск дублирования логики

    • При копировании правил в несколько мест возрастает риск расхождения логики. Централизуйте правила и поддерживайте их единообразно.
  • Неопределённый дефолт

    • Неправильно подобранный дефолт может привести к непредсказуемым категориям. Устанавливайте дефолт осмысленно и документируйте выбор.
  • Тестирование

    • Пропуск тестов на границы диапазонов приводит к скрытым ошибкам в продакшене. Всегда тестируйте на границах и на невалидных данных.
  • Типичные ошибки

    • Неправильные условия в multiIf, которые противоречат друг другу.
    • Игнорирование возможности пустых значений в столбцах, что может приводить к неверной классификации.
    • Непредсказуемый дефолт в случаях, когда данные выходят за рамки ожиданий.

       

Заключение

  • Практическая ценность
    • MultiIf в ClickHouse - мощный инструмент для реализации бизнес-логики на этапе анализа. Он позволяет выразить множество условий в компактной форме и, при правильной организации, обеспечивает высокую читаемость и производительность.
  • Рекомендации по использованию
    • Используйте multiIf там, где правила линейны и ветви небольшие.
    • Выносите крупные и изменчивые схемы в маппинг-таблицы или словари.
    • Рассматривайте материализованные выражения для частых вычислений.
    • В случае сложной логики - сочетайте multiIf с внешними таблицами и верифицируйте поведение через тесты.
  • Влияние на архитектуру данных
    • Правильная организация правил позволяет централизовать бизнес-логику, снизить сложность отдельных запросов, повысить прозрачность аналитических метрик и облегчить поддержку.

       

FAQ (Вопрос-Ответ)

  1. Что такое clickhouse multiif и в чем его преимущество?
  • MultiIf - функция ClickHouse, позволяющая определить цепочку условий и вернуть соответствующий результат для первого истинного условия, с дефолт-значением для остальных сценариев. Преимущество - компактная запись сложной логики категоризации и уменьшение числа вложенных выражений по сравнению с гигантскими CASE-блоками.
  1. Чем multiIf отличается от вложенных функций if?
  • В большинстве случаев они эквивалентны по функциональности, но multiIf позволяет компактно выражать цепочку условий без вложенных вызовов. Это упрощает чтение и уменьшает количество уровней вложенности. Однако в некоторых случаях вложенные if могут давать более явный контроль над порядком вычислений.
  1. Когда предпочтительно использовать multiIf против CASE?
  • Если ваша платформа поддерживает CASE с аналогичным функционалом и вы стремитесь к более явному стилю SQL, CASE может быть оправдан. Если же паттерн выражения лучше читается как линейная последовательность условий, multiIf обеспечивает более компактную запись. В ClickHouse CASE может быть не столь распространён или может не поддерживать все вариации, поэтому multiIf часто становится выбором по удобству.
  1. Как эффективно использовать multiIf в больших таблицах?
  • Разумно держать часто встречающиеся ветви в начале цепочки условий, чтобы минимизировать вычисления. Рассмотрите перенос части логики в маппинг-таблицу или словарь, а также применение MV для ускорения частых запросов. При необходимости используйте внешние источники справочников (Postgres Pro) для разделения правил и снижения дублирования.
  1. Какие паттерны применяются для паттернов категоризации?
  • Категоризация по диапазонам (low/medium/high), маппинг значений через справочники, использование нескольких условий для разных признаков (география, платформа и т.д.), а также сочетание multiIf с внешними таблицами соответствий.
  1. Как связать multiIf с архитектурой данных?
  • В рамках архитектуры можно держать правила в виде столбцов-мэппингов или таблиц словарей, соединять их через JOIN и применять в одном месте. Это упрощает сопровождение и тестирование, повышает повторное использование правил.
  1. Какие риски и типовые ошибки следует учитывать?
  • Ошибки типов возвращаемых значений, несоответствия дефолтов, сложность поддержки больших наборов условий, нехватка тестов на границах, и риск дублирования логики в нескольких местах конвейера.
  1. Какие лучшие практики для тестирования multiIf?
  • Тестируйте на наборы тестовых данных, включающие все ветви, границы диапазонов и значения за пределами ожидаемого. Введите регрессионные тесты, которые фиксируют поведение при изменении правил. Автоматизируйте тестирование через CI/CD и проверку результатов against эталонных часто-используемых запросов.
  1. Может ли multiIf использоваться вместе с материализованными представлениями?
  • Да. Вычисления по правилу multiIf можно вынести в MV, чтобы ускорить повторные запросы и снизить нагрузку на выборку данных в реальном времени.
  1. Какие примеры практического использования в проектах стоит рассмотреть?
  • Категоризация клиентов по риск-уровням, распределение трафика по сегментам, маппинг статусов задач, расчёт рангов и уровней обслуживания, а также создание витрин с готовыми метриками на основе правил категоризации.

Создание эффективной архитектуры с использованием clickhouse multiif требует баланса между читаемостью, поддерживаемостью и производительностью. Глубокое понимание того, когда применять прямо multiIf, а когда выносить логику в справочники и словари, позволяет аналитикам и ИТ-директорам выстраивать устойчивые, масштабируемые пайплайны данных. В рамках курса мы продолжаем исследовать примеры реальных проектов, где такие принципы применяются в отечественных и открытых технологиях, чтобы вы могли адаптировать их под ваши бизнес-задачи.

← Предыдущая статья
Clickhouse table engine
Следующая статья →
clickhouse profile

 

Узнать стоимость решенияЗапросить видео презентацию

Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

Задать вопрос

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • "Уральский банк реконструкции и развития" входит в топ-25 крупнейших банков России и список значимых кредитных организаций на рынке платежных услуг по версии ЦБ РФ.

  • СберКорус (Группа компаний Сбербанка) – это ИТ‑компания, ИТ‑интегратор, SaaS-провайдер. Является разработчиком цифровых сервисов и услуг для автоматизации широкого диапазона бизнес-процессов юридических лиц. В 2004 году компания стала первым в России оператором электронного документооборота, а в 2012 году вошла в экосистему Сбера. 

  • ПАО АНК «Башнефть» — российская вертикально-интегрированная нефтяная компания, с 2016 года входит в ПАО НК «Роснефть». Главный офис расположен в городе Уфе (Башкортостан). Добыча углеводородов – более 21 млн тонн нефти в год. Объем переработки – более 18 млн тонн нефти в год. Число сотрудников – более 33 тыс. человек.

  • Ручная обработка заявок на займы в МФО ДоброЗайм была малоэффективной и приводила к высоким затратам по ФОТ отдела верификации и андеррайтинга. При этом время обработки заявок было высоким, как и количество ошибок под влиянием человеческого фактора. Дополнительные сложности создавал сложный документооборот, обусловленный неконсолидированной кредитной историей и скоринговой оценкой. Все это суммарно мешало масштабированию бизнеса МФО.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.