Подключение внешних источников

Для выполнения аналитических задач по укрупненным размерностям, например “город”, “торговая точка”, “товарная категория” реализован механизм внешних связей, где значения размерностей отображаются в значения полей внешних каталогов.

Внешняя связь – это интерфейс отображения и/или группировки размерностей который позволяет определить древовидные и иные структуры размерностей временного ряда. Например: ИНН организации отображается в набор значений идентификаторов кассовых аппаратов.

Каждая внешняя связь некоторый набор полей и привязана к какой-то размерности. При этом внешняя связь может сохранять как значение этой размерности, так и идентификатор значения в словаре, где и хранится отображение идентификатора размерности в её значение.

Например:

Пример внешней связи

Стандартные внешние связи

В схеме по умолчанию есть две внешние связи, реализация которых входит в пакет yupana-external-links. Реализация DAO для этих внешних связей поверх HBase входит в пакет yupana-hbase.

ItemsInvertedIndex

Индекс слов встречающихся в товарах. Используется для полнотекстового поиска в наименованиях товаров

Поля:

  • phrase – слова для поиска. Порядок слов не имеет значения, например “пиво жигулевское” и “жигулевское пиво”. Поскольку внутри каталога слова хранятся в стемированном виде, при поиске окончания не учитываются. Запросы “пиво жигулевское” и “пиву жигулевскому” считаются одинаковыми (и пребразуются к набору слов “piv”, “zhigulevsk”).

RelatedItemsCatalog

Каталог сопутствующих товаров. Позволяет находить совместные покупки товаров.

Поля:

  • item – строгое название сопутствующего товара (чекового наименования).
  • phrase – часть названия сопутствующего товара (чекового наименования), аналогично полю phrase в ItemsInvertedIndex.

Поля каталога могут использоваться только в условиях (а не как поля запроса). Рекомендуется использовать со схемой kkm_items.

Примеры:

  1. Ищем покупки вместе с пивом:
SELECT item, time, kkmId 
  FROM kkm_items 
  WHERE time >= TIMESTAMP '2018-11-01' AND time < TIMESTAMP '2018-12-01'
    AND RelatedItemsCatalog_phrase = 'пиво'
  1. Ищем номера чеков в где присутствуют пиво и чипсы:
SELECT item, time, kkmId, documentNumber
  FROM kkm_items
  WHERE time >= TIMESTAMP '2018-11-01' AND time < TIMESTAMP '2018-12-01' 
    AND RelatedItemsCatalog_phrase = 'пиво'
    AND itemsInvertedIndex_phrase = 'чипсы'
  1. Ищем номера чеков в где присутствуют пиво и чипсы, но нет орешков:
SELECT item, time, kkmId, documentNumber 
  FROM kkm_items
  WHERE time >= TIMESTAMP '2018-11-01' AND time < TIMESTAMP '2018-12-01'
    AND RelatedItemsCatalog_phrase = 'пиво'
    AND itemsInvertedIndex_phrase = 'чипсы'
    AND RelatedItemsCatalog_phrase <> 'орешки'

Схема работы внешней связи

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

Трансформация запроса

На этом этапе условия из запроса, относящиеся к каталогу, преобразуются в условия в терминах размерностей и/или метрик. Например, заданные в условии ИНН преобразуются в наборы идентификаторов касс.

Извлечение значений

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

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