如何使用 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;
现在我正在为两件事而苦恼。
- 如何将日期设置为变量?我的意思是,如果我想针对特定日期范围/或今天的每小时数据或每季度间隔(更多可配置)对它们进行分组,我该如何在 Hasura 的
Raw SQL
? 中添加变量
- 对于这种方法,我还必须为它们中的每一个添加模式吗?像这样
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 中做类似的事情吗?
非常感谢您。
- 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。
- Also for this approach I have to add schema for each one of them?
架构?风景?我不认为特别需要视图,如果多级 select 或类似查询可以处理它并执行,那么就不会特别需要视图。
这是我第一次尝试解决这个问题。我将尝试在几个小时内通过 Twitch 流@ HasuraHQ 解决这个问题,如果你能加入,很高兴现场直播。
所以我尝试并努力了几天,使用 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;
现在我正在为两件事而苦恼。
- 如何将日期设置为变量?我的意思是,如果我想针对特定日期范围/或今天的每小时数据或每季度间隔(更多可配置)对它们进行分组,我该如何在 Hasura 的
Raw SQL
? 中添加变量
- 对于这种方法,我还必须为它们中的每一个添加模式吗?像这样
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 中做类似的事情吗?
非常感谢您。
- 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。
- Also for this approach I have to add schema for each one of them?
架构?风景?我不认为特别需要视图,如果多级 select 或类似查询可以处理它并执行,那么就不会特别需要视图。
这是我第一次尝试解决这个问题。我将尝试在几个小时内通过 Twitch 流@ HasuraHQ 解决这个问题,如果你能加入,很高兴现场直播。