簡體   English   中英

如何使用 Hasura 和 Postgres 中的視圖擴展動態模式?

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

因此,我正在嘗試並努力使用類似這樣的東西來擴展自定義 groupby 的架構

我有一個表,其中包含幾個字段,例如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. 如何將日期設為變量? 我的意思是,如果我想將它們分組為特定日期范圍/或今天的數據每小時或每季度間隔(更多可配置),我如何在 Hasura 的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 子句,一個查詢就可以解決問題。 可以在哈蘇拉做類似的事情嗎?

非常感謝你。

  1. 如何將日期設為變量? 我的意思是,如果我想將它們分組為特定日期范圍/或今天的數據每小時或每季度間隔(更多可配置),我如何在 Hasura 的原始 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...>
    }   
}

基礎視圖/查詢將遵循您詳細說明的分組依據和排序依據。 然后,您可以提交 graphql 查詢的查詢,並在 raqQuery 調用中傳入相關參數,例如 $1、$2 和 $3。

  1. 同樣對於這種方法,我必須為它們中的每一個添加架構?

架構? 風景? 我認為不需要專門的視圖,如果多級 select 或類似查詢可以處理並執行它,則不需要特別需要視圖。

這是我第一次嘗試解決這個問題。 我將嘗試在幾個小時內通過 Twitch ZF7B44CFFAFD5C52223D5498196C8A2E7BZ @ HasuraHQ解決這個問題,如果你能加入的話,很高興能現場直播。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM