Вложенные объекты JSON в Keen.io

В коллекции в Keen.io у меня есть свойство с именем pours типа list, pours это список отдельных pour объекты, которые содержат свойства start_time_of_pour, end_time_of_pour, а также pour_amount, Однако я не могу напрямую запрашивать данные, хранящиеся в этом списке в рабочей среде. Верстак только позволяет мне установить Target Property на pour список, а не отдельные объекты или свойства.

Есть ли способ получить доступ к этим вложенным объектам и свойствам в рабочей среде? Спасибо!

2 ответа

Решение

Джош из Кин IO здесь.

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

Индексированные свойства

Вы можете скопировать свойства из списка объектов в набор индексированных свойств перед отправкой события. Это приводит к таким свойствам, как pour_1_amount, pour_2_amount вплоть до pour_n_amount,

Если вы сделаете это, вы должны добавить number_of_pours свойство, которое представляет размер pours список. Когда вы будете готовы к анализу, первый запрос, чтобы получить максимум number_of_pours по всему спектру событий. Это будет вход в цикл, который вы будете запускать для анализа каждого индексированного свойства.

Допустим, вы хотите найти общую сумму всех наливов. Вот как это можно сделать, используя Ruby и keen -gem, хотя концепция в целом применима.

# within an irb session
require 'keen'   

# get the maximum number of pours to check
maximum_pours_length = 
  Keen.maximum('collection', target_property: 'number_of_pours')

# total pour amount
total_pour_amount = 0

for n in maximum_pours_length
  total_pour_amount = total_pour_amount + 
    Keen.sum('collection', target_property: "pour_#{n}_amount")
end

# print the total
puts total_pour_amount

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

Предварительные агрегатные свойства

Вы можете объединить (или уменьшить) все экземпляры свойства до одного: например total_pour_amount, maximum_pour_end_timeи т. д. Это требует, чтобы вы заранее знали, какой анализ вы хотите сделать, но затем вы можете использовать Keen для всех запросов.

Добыча с обработкой на стороне клиента

Вы можете выполнить извлечение и выполнить ручную обработку на вашей стороне. Чтобы ускорить извлечение, вы можете ограничить его определенными свойствами. Эта опция обеспечивает чистоту модели данных, но требует больше работы во время запроса, потому что Keen не будет выполнять агрегацию. Такие проекты, как набор данных Miso, могут облегчить эту работу.

С рубиновым гемом кажется, что теперь вы можете запустить что-то вроде этого, чтобы запросить вложенный атрибут:

Keen.select_unique(
    'sessions',
    target_property: 'user.id',
    :timeframe => 'this_8_weeks'
)
Другие вопросы по тегам