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 functions

clickhouse functions

 

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

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

 

Введение

ClickHouse предлагает широкий спектр функций, разделяемых на несколько категорий: скалярные функции (scalar), оконные функции, агрегатные функции, функции массивов, функций для дат и времени, строковые функции и т.д. В отличие от традиционных СУБД, здесь важна векторизированная модель исполнения: функции применяются к столбцам целыми векторными блоками данных, что обеспечивает значительную производительность при больших нагрузках. В рамках курса мы не ограничиваемся перечислением названий функций, а исследуем принципы их работы, способы эффективного использования и типичные ошибки.

Функции в ClickHouse реализуются внутри движка вычислений и подключаются через реестр функций. В реальном проекте это означает, что:

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

Теоретически корректное использование функций требует согласованных правил в рамках архитектуры данных: как данные транслируются из источников, как обрабатываются пропуски, как агрегируются и как результаты возвращаются пользователю или системе визуализации.

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

 

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

  • Функция (function) в ClickHouse - именованный механизм преобразования входных значений в выходные. В контексте столбцовых форматов это обычно векторизованная операция над столбцами.
  • Скалярная функция (scalar function) - операция, применяемая к одному или нескольким входам и возвращающая одно значение для каждой строки. Примеры: toDate, length, substring.
  • Агрегатная функция (aggregate function) - применяется к множеству значений и возвращает единственное агрегатное значение: например, sum, avg, max.
  • Оконная функция (window function) - агрегирует данные в рамках заданного окна, позволяя вычислять кумулятивные, скользящие метрики и т. п. Примеры: window functions в ClickHouse включают rank и rowNumber в некоторых контекстах, хотя поддержка оконных функций в CH реализована через специфические конструкции и функции.
  • Функции массивов (array functions) - operate on arrays, например, arrayJoin, arrayMap, arrayFilter, которые позволяют манипулировать элементами массивов внутри столбца.
  • Функции дат и времени - преобразование и извлечение параметров времени: toDate, toDateTime, toStartOfMonth, toStartOfHour, now, today и т. п.
  • Функции строк - работа со строками: length, lower, upper, regexpExtract, replaceOne и т. д.
  • Функции числовые - производят арифметику, битовые операции, статистические преобразования: toInt32, round, sqrt, rand и т. д.
  • Nullable и обработка пропусков - многие функции поддерживают Nullable-входы и возвращают Nullable-результаты. Важно учитывать поведение функций при наличии пропусков и выбросов.
  • Детерминированность и побочные эффекты - детерминированные функции возвращают одинаковый результат при одном и том же наборе входных значений; недетерминированные (например, rand) дают разные результаты. Это влияет на кэширование и повторное выполнение запросов.
  • Контекст выполнения - часть функций может опираться на контекст (например, для нестандартных преобразований времени, локализации, форматирования).

Понимание типов функций и их свойств позволяет архитектору и аналитикам формировать корректные и эффективные запросы, выбирать правильный инструмент под задачу и выстраивать устойчивые схемы проверки и тестирования.

 

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

  • Выбор функции по цели: преобразование данных, агрегация, сравнение, поиск по паттерну, форматирование, статистика и т. д. Важно различать, когда применять скалярную функцию над столбцом, а когда - агрегатную функцию после группировки.
  • Правило «первой фильтрации»: сначала применяйте функции, которые уменьшают объем данных (фильтры, распаковка массивов, преобразование типов), затем агрегируйте. Это снижает объем передаваемых данных и ускоряет вычисления.
  • Использование функций массивов для распаковывания вложенных структур: arrayJoin позволяет развернуть массивы в ряды строк, но увеличивает число строк, поэтому применяйте с осторожностью и мониторингом памяти.
  • Правило «детерминированность против кэширования»: если функция детерминирована и входы неизменны, результат может быть кэширован; не детерминированные функции требуют осторожности при повторном выполнении.
  • Правила тестирования функций: тестируйте функции на наборе известных входов, проверьте поведение с NULL (Nullable), проверьте крайние значения и искаженные данные, используйте тестовые данные перед развёртыванием в продакшн.

Практический подход к обучению функциональности CH строится на последовательности: освоение базового набора функций, затем переход к продвинутым сценариям (окна, массивы, сложные формулы), затем - к проектным решениям и governance.

 

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

  • Архитектура вычислений ClickHouse состоит из слоев парсинга, оптимизации и исполнения. В контексте функций это выражение, которое парсится в дерево операций и затем выполняется в векторизованном режиме на столбцах.
  • Реестр функций (function registry) - центральный механизм, через который каждому имени функции сопоставляется конкретная реализация. При добавлении новой функции важно согласовать сигнатуры, поведение при Nullable, а также ограничения по типам.
  • Распределенная обработка - в контексте функций это означает, что вычисления могут выполняться на нескольких узлах; функции в таких сценариях должны быть детерминированы там, где это критично, и корректно обрабатывать пропуски и дубликаты.
  • Векторизация и кэширование - ClickHouse применяет функции к векторам столбцов, что обеспечивает большую производительность по сравнению с построчным вычислением. Правильная настройка типов и использования функций помогает избежать лишних преобразований.
  • Совместимость и интеграции - функции в ClickHouse интегрируются через SQL-интерфейсы, HTTP-интерфейс и драйверы ODBC/JDBC. Это обеспечивает гибкость при построении ETL-пайплайнов и BI-слоев.

Ниже приведена упрощенная схема обработки запроса с участием функций:

  • Парсинг SQL -> построение Expression Tree
  • Оптимизация выражения (упрощение констант, устранение лишних преобразований)
  • Векторизация: применение функций над блоками столбцов
  • Агрегация/соединение результатов
  • Возвращение результата клиенту

     

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

  • Управление доступом к функциям: создание набора «проверенных» функций, доступных аналитикам через единый каталог функций внутри команды BI. Это снижает риск некорректных или опасных трансформаций.
  • Тестирование функций: автоматизированные тесты для каждого набора функций, включая сценарии с Nullable и пустыми значениями, регрессионные тесты при обновлениях ClickHouse.
  • версия функций и совместимость: поддержка версионности функций в рамках окружения (development, staging, production). Учитывайте несовместимости между версиями ClickHouse и установленными пакетами функций.
  • Документация и каталог функций: централизованный реестр функций с примерами использования, ограничениями по типам, производительностью и типичными сценариями ошибок.
  • Governance на уровне архитектуры данных: контроль за тем, какие функции используют аналитики, как ограничиваются ресурсы, какие функции держать под наблюдением на предмет производительности.

     

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

  • Примеры скалярных функций и их сигнатуры:
    • toDateTime(timestamp) - преобразование значения к типу DateTime.
    • length(string) - длина строки.
    • substring(string, pos, len) - извлечение подстроки.
  • Примеры функций дат и времени:
    • toStartOfHour(ts) - приведение к началу часа.
    • toStartOfMonth(ts) - приведение к началу месяца.
    • now() - текущее время.
  • Примеры функций массивов:
    • arrayJoin(arr) - разворачивает массив в ряды строк.
    • arrayMap(x -> f(x), arr) - отображение функции на элементы массива.
    • arrayFilter(x -> условие, arr) - фильтрация элементов массива.
  • Примеры агрегатных функций:
    • sum(col), avg(col), min(col), max(col)
    • quantile(0.95)(col) - квантильная оценка.
  • Примеры строковых функций:
    • replaceOne(s, pat, repl) - замена подстроки в строке.
    • regexpExtract(s, pat, idx) - извлечение по регулярному выражению.
  • Примеры условной логики и пролонгации:
    • if(cond, then, else) - ветвление на уровне функций.
  • Примеры использования функций в реальных запросах:
    • SELECT toDate(event_time) AS d, count() AS c FROM events GROUP BY d ORDER BY d;
    • SELECT uniqExact(user_id) FROM visits WHERE toDate(event_time) = today();
    • SELECT arrayJoin(tags) AS t, count(*) FROM posts GROUP BY t;

       

Интеграция в архитектуру:

  • Операционная часть: интеграция функций через SQL-интерфейс в BI и ETL-пайплайны, использование драйверов JDBC/ODBC и HTTP API для вызовов функций в процедурах обработки данных.
  • Архитектура данных: функции применяются к слоям источников данных (Kafka,, сторидж) через pipeline-слой, который преобразует сырые данные в форму, пригодную для анализа.
  • Мониторинг и оптимизация: сбор метрик быстродействия функций (время выполнения, объем памяти, пропускная способность), настройка параметров, связанных с памятью и конвейером исполнения (например, настройки чтения, блоки агрегации).

     

Примеры open-source и российских продуктов:

  • Open-source: ClickHouse как основа, Apache Pinot и Apache Druid в качестве альтернатив для примеров архитектур, где функции и агрегации также играют ключевую роль в аналитике. Эти решения демонстрируют подходы к обработке больших данных и функциональной трансформации.
  • Российские примеры: Яндекс.Облако предоставляет управляемый сервис на базе ClickHouse, что демонстрирует практическое развёртывание функций в продакшн-среде. Крупные российские проекты, например VKontakte, применяют ClickHouse для требований аналитики в реальном времени и пакетной агрегации, что иллюстрирует важность понимания функций в рамках масштабируемых архитектур.

Схематическое сравнение категорий функций в ClickHouse:

  • Скаляры: преобразование и вычисление над отдельными значениями.
  • Агрегаты: вычисление итоговых метрик по группам.
  • Окна: кумулятивные и скользящие метрики.
  • Массивы: манипуляции внутри массивов и развертывание элементов.

Важно помнить: выбор конкретной функции и её параметров должен базироваться на анализе требований по точности, производительности и устойчивости к пропускам.

 

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

  • Неправильная обработка Nullable: некоторые функции не могут корректно обрабатывать NULL без явного приведения типа или использования специальных функций-посредников.
  • Неоптимальные преобразования типов: частые преобразования типов могут снизить производительность. Старайтесь выполнять минимально необходимые преобразования.
  • Перегрузка функций массивами: использование arrayJoin без учета роста объема строк может привести к экспоненциальному росту количества строк и памяти.
  • Неправильный выбор оконных функций: оконные функции требуют правильной постановки каркаса окна (ORDER BY, PARTITION BY). Ошибки здесь приводят к неверным результатам и падению производительности.
  • Невнятная документация и governance: отсутствие единообразного каталога функций может привести к дублированию, различной трактовке сигнатур и рискованным сценариям.
  • Совместимость версий: обновления ClickHouse или внешних библиотек функций могут приводить к несовместимостям. Важно тестировать обновления на staging и иметь план миграции.
  • Риск некорректного ускорения через кэширование: кэш может вести к устаревшим значениям, особенно в случае нестабильных данных или использования недетерминированных функций.

     

Заключение

Функции - фундамент аналитических систем на ClickHouse. Их правильное понимание и грамотное использование позволяют строить точные, масштабируемые и быстрые аналитические решения. Теория функций тесно связана с архитектурой компьютинговых слоев: от парсера и реестра функций до векторизированного исполнения и интеграции с внешними системами. Внедрение устойчивых методик использования функций в организациях требует дисциплины в governance, тестировании и мониторинге. В конце пути практик - это не только «что» использовать, но и «почему» именно эти функции соответствуют задачам вашего проекта, как они влияют на производительность и как обеспечить корректность результатов.

 

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

  1. Что такое clickhouse functions и чем они отличаются от функций в других СУБД?
  • ClickHouse предоставляет набор функций, разделённых на скалярные, агрегатные, оконные и массивные. Основное отличие - векторизированное выполнение и фокус на аналитических нагрузках: функции работают на столбцах, обрабатывая данные пакетами, что обеспечивает высокую производительность на больших объемах. Это отличается от построчного исполнения в некоторых традиционных СУБД и требует иной стратегии оптимизации.
  1. Как выбрать между скалярной и агрегатной функцией в типичной аналитической задаче?
  • Скаляры применяются для трансформации отдельных значений внутри строк, например, извлечение части строки, приведение типов. Агрегаты необходимы для вычисления итоговых метрик по группам, например, sum или uniq. В зависимости от целей анализа - глубина детализации против агрегирования - выбираются соответствующие функции. Часто разумно начать с агрегаций, а затем дополнительной трансформации данных над результатами.
  1. Что нужно учитывать при работе с Nullable в функциях?
  • В большинстве случаев стоит явно учитывать наличие NULL и использовать функции, которые поддерживают Nullable или оборачивать вызовы в конструкции типа if(isNull(col), ..., col). Неправильное обращение с NULL может привести к неожиданным результатам или полному исключению строк из расчета.
  1. Какие практики оптимизации применяются к функциям в ClickHouse?
  • Оптимизация начинается с фильтрации и распаковки данных до применения функций, минимизации количества преобразований типов, использования arrayJoin обоснованно, контролирования объема временных материалов и внимательного проектирования оконных функций. Мониторинг времени выполнения и памяти позволяет выявлять «узкие места» и адаптировать запросы.
  1. Какие типичные ошибки встречаются при использовании функций в реальных проектах?
  • Неправильное использование Nullable, игнорирование особенностей реализации функций на больших объемах, чрезмерное применение функций к каждому блоку данных без учета объема; неучет производительности при использовании arrayJoin; несоответствие сигнатур функций и типов данных; недокументированные зависимости между версиями ClickHouse и используемыми функциями.
  1. Какова роль функций в архитектуре ClickHouse?
  • Функции - это средство трансформации и агрегации внутри движка. Они интегрируются как часть выражения SQL и обрабатываются в рамках векторизированной реализации, обеспечивая эффективное выполнение запросов на столбцовых структурах данных. Правильная архитектура данных и грамотное использование функций позволяют достигать высокой производительности в условиях больших нагрузок.
  1. Какие примеры реальных сценариев с использованием clickhouse functions можно привести?
  • Пример 1: анализ временных рядов с группировкой по явному времени (toDateTime, toStartOfHour), с последующей агрегацией (sum, countDistinct) для выявления трендов.
  • Пример 2: обработка вложенных структур и массивов через arrayJoin и arrayMap для раскрытия тегов и атрибутов, связанных с каждым событием.
  • Пример 3: извлечение проб и паттернов в тексте через regexpExtract и replaceOne, затем агрегация по категории.
  • Пример 4: применение оконных аналогов через последовательные агрегаты и функции кумуляции, для расчета скользящих метрик.
  1. Какие open-source решения можно рассмотреть как альтернативы или комплементы для функционального анализа?
  • ClickHouse в качестве базовой платформы; Apache Pinot и Apache Druid - альтернативы для аналитической обработки в реальном времени; Apache Spark и Trino - для задач, где требуется гибкость интеграций и разнообразие инструментов анализа.
  1. Какие российские примеры внедрения функций стоит изучать?
  • Яндекс.Облако предоставляет управляемый сервис на базе ClickHouse: это демонстрирует практические подходы к развёртыванию и эксплуатации функций в продакшн-среде. Крупные российские проекты, которые активно применяют ClickHouse для аналитики в реальном времени, наилучшим образом иллюстрируют важность грамотного проектирования функций и их интеграции в архитектуру данных.
  1. Каковы лучшие практики сопровождения функций в рамках команды data-направления?
  • Создание единого каталога функций и стандартов использования, воспроизводимые тесты для каждого набора функций, мониторинг производительности, контроль версий и план миграций при обновлениях, а также тесное сотрудничество между аналитиками, инженерами данных и IT-директорами для согласованной стратегии использования функций.

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

← Предыдущая статья
clickhouse max - управление максимальными значениями и оптимизация запросов в ClickHouse
Следующая статья →
clickhouse примеры

 

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

Решения

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

Клиенты
  • ГК «Агропромкомплектация-Курск» - одна из ведущих в Российской Федерации агропромышленных компаний с полным производственным циклом "от поля до прилавка". За 32 года работы на рынке компания заслуженно завоевала репутацию одного из лидеров страны в производстве свинины и молока.

  • MoneyCare — кредитная платформа и сервис для ПОС-кредитования в магазинах, установленная в более чем 18 тысячах трейдинговых точек и сотрудничающая с 11 главными банками России.

  • В 2003 году Мерсико и пятью микрокредитными агентствами Мерсико было принято историческое решение о консолидации активов по всей территории Кыргызстана в целях образования национального финансового института по развитию сообществ - Компаньона. В октябре 2004 года Компаньон был зарегистрирован Национальным банком Кыргызской Республики.

  • Розничный и интернет-магазин 12 Storeez один из лидеров на рынке женской одежды. С географией рынка не только на территории России, своя продукция представлена еще и в таких странах как Казахстан и Дубай.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • 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 и политикой конфиденциальности.