Вложенные объекты 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'
)