Как расширить динамическую схему с помощью представлений в Hasura и Postgres?

Итак, я пытаюсь и изо всех сил пытаюсь в течение нескольких дней расширить схему с помощью настраиваемой группы, используя что-то вроде это

У меня есть таблица с несколькими полями вроде id, country, ip, created_at. Затем я пытаюсь получить их как группы. Например, сгруппируйте данные по дате, почасовой дате или по стране, а также по стране с помощью DISTINCT ip.

Честно говоря, я ноль в SQL. Но я попытался поиграться и получить то, что хочу. Вот пример .

 SELECT Hour(created_at) AS date,
COUNT(*) AS count
 FROM session where CAST(created_at AS date) = '2021-04-05'
 GROUP BY Hour(created_at)
 ORDER BY date;
 
SELECT country,
count(*) AS count from (SELECT * FROM session where CAST(created_at AS date) <= '2021-05-12' GROUP BY created_at) AS T1
GROUP BY country;
  
SELECT country, COUNT(*) as count
FROM (SELECT DISTINCT ip, country FROM session) AS T1
GROUP BY country;

SELECT DATE(created_at) AS date,
        COUNT(*) AS count
 FROM   session
 GROUP BY DATE(created_at)
 ORDER BY date;

Теперь я борюсь с двумя вещами.

  1. Как сделать дату переменными? Я имею в виду, что если я хочу сгруппировать их по определенному диапазону дат / или сегодняшним данным почасово или за квартал (больше настраиваемых), как мне добавить переменные в Raw SQL Хасуры?
  2. Также для этого подхода мне нужно добавить схему для каждого из них? Нравится
CREATE
OR REPLACE VIEW "public"."unique_session_counts_date" AS
SELECT
 date(session.created_at) AS date,
 count(*) AS count
FROM
 session
GROUP BY
 (date(session.created_at))
ORDER BY
 (date(session.created_at));

Есть ли способ сделать это более обобщенным? Я имею в виду, что если бы это было в Nodejs, я мог бы сделать что-то вроде

return rawQuery(
   `
   select ${field} x, count(*) y
   from ${table}
   where website_id=$1
   and created_at between $2 and $3
   ${domainFilter}
   ${urlFilter}
   group by 1
   order by 2 desc
   `,
   params,
 );

В этом случае, на основе любого поля и предложения where, которое я отправляю, один запрос поможет мне. Может в хасуре что-то подобное сделать?

Огромное спасибо заранее.


person Subhendu Kundu    schedule 20.04.2021    source источник


Ответы (1)


  1. Как сделать дату переменными? Я имею в виду, если я хочу сгруппировать их по определенному диапазону дат / или сегодняшним данным почасово или по кварталу (больше настраиваемых), как мне добавить переменные в необработанный SQL Hasura?

Моя первая мысль такая. Если вы думаете о передаче переменных, например, через GraphQL, GraphQL будет выглядеть примерно так:

query MyQuery {
    unique_session_counts_date(where: {created_at: {_gte: "<start date here>", _lte: "<end date here>"}}) {
        <...any fields, rollups, etc here...>
    }   
}

Базовое представление / запрос будет следовать за группой и в порядке, указанном вами. Затем вы сможете отправить запрос запроса graphql и просто передать соответствующие параметры, такие как $ 1, $ 2 и $ 3, в вызове raqQuery.

  1. Также для этого подхода мне нужно добавить схему для каждого из них?

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

Это моя первая попытка решить проблему. Я попытаюсь решить эту проблему через несколько часов через поток Twitch @ HasuraHQ, если сможете. Присоединяйтесь, счастлив пройти через это вживую.

person Adron    schedule 21.04.2021
comment
Интересно! для уверенности! Я бы с радостью принял участие в этом звонке. Вы имеете в виду время? Я живу в часовом поясе IST. Так что я буду еще 3 часа - person Subhendu Kundu; 21.04.2021
comment
Я видел ручей ❤️ Большое спасибо. Вы получили то, что я пытался сделать. Наверное, я вас кое-где запутал. Чтобы помочь вам понять вариант использования, я собрал небольшой документ с вариантами использования и тем, как я решил это на данный момент. Я жду ответов и правильных способов сделать это. Вот документ: github.com/subhendukundu/ круто-био-аналитика / blob / main / docs / - person Subhendu Kundu; 22.04.2021