如何使用 Hasura 和 Postgres 中的视图扩展动态模式?

How to extend dynamic schema with views in Hasura and Postgres?

所以我尝试并努力了几天,使用 this

之类的东西来扩展自定义 groupby 的架构

我有一个 table,只有很少的字段,例如 id, country, ip, created_at。 然后我试图让他们成群结队。例如,根据日期、日期的每小时或根据国家/地区以及具有 DISTINCT ip 的国家/地区对数据进行分组。

老实说,我对 SQL 零。但我试着玩弄并得到我想要的。这是 example.

 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. 如何将日期设置为变量?我的意思是,如果我想针对特定日期范围/或今天的每小时数据或每季度间隔(更多可配置)对它们进行分组,我该如何在 Hasura 的 Raw SQL?
  2. 中添加变量
  3. 对于这种方法,我还必须为它们中的每一个添加模式吗?像这样
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=
   and created_at between  and 
   ${domainFilter}
   ${urlFilter}
   group by 1
   order by 2 desc
   `,
   params,
 );

在这种情况下,根据我发送的任何字段和 where 子句,一个查询就可以解决问题。可以在 hasura 中做类似的事情吗?

非常感谢您。

  1. How do I make the date as variables? I mean, if I want to group them for a particular date range/ or today's data hourly, or per quarter gap (more of configurable), how do I add the variables in Hasura's Raw SQL?

我的第一个想法是这个。例如,如果您正在考虑通过 GraphQL 传递变量,GraphQL 将类似于:

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

基础 view/query 将遵循您详细说明的分组依据和排序依据。然后,您就可以提交 graphql 查询的查询,并在 raqQuery 调用中传入相关参数,如 $1、$2 和 $3。

  1. Also for this approach I have to add schema for each one of them?

架构?风景?我不认为特别需要视图,如果多级 select 或类似查询可以处理它并执行,那么就不会特别需要视图。

这是我第一次尝试解决这个问题。我将尝试在几个小时内通过 Twitch 流@ HasuraHQ 解决这个问题,如果你能加入,很高兴现场直播。