2

私はその日、そのユーザーのためのいくつかの集約統計と日あたりの一意の各ユーザーのための行を記録したテーブルを持っている、と私は日ごとに私に語ったレポート、ノーを作成する必要があります。その日を含む過去30日間のユニークユーザー数BigQuery:UDF内で別のクエリを実行することは可能ですか?

例えば、 8月31日のため

  • 、それは8月30日のために8月31日
  • に8月2日からのユニークユーザーをカウントします、それはそうで
  • 8月30日に8月1日からユニークユーザーをカウントします。 ..

私はいくつかの関連する質問を見ましたが、必要なものではありません。過去30日間に複数の日にログインした場合、過去30日間のDAU数を合計するだけです。

Bigquery SQL for sliding window aggregate

BigQuery SQL for 28-day sliding window aggregate (without writing 28 lines of SQL)

これまでのところ、私のアイデアは、どちらかにある:

  • は、該当する日の各
  • 書き込みに別々にBigQueryを実行します簡単なスクリプトを書きます基本的に別のクエリから選択された毎日同じクエリを実行するBigQuery UDF

が、私は、またはそれが可能だ場合は、全く、UDF内の別のBigQueryのクエリを実行する方法上の任意の例を発見していませんでした。

答えて

1

私は毎日のことを伝えるレポートを作成する必要があります。その日を含む過去30日間のユニークユーザー数は 人です。以下は

この

SELECT 
    calendar_day, 
    EXACT_COUNT_DISTINCT(userID) AS unique_users 
FROM (
    SELECT calendar_day, userID 
    FROM YourTable 
    CROSS JOIN (
    SELECT DATE(DATE_ADD('2016-08-08', pos - 1, "DAY")) AS calendar_day 
    FROM (
     SELECT ROW_NUMBER() OVER() AS pos, * 
     FROM (FLATTEN((
     SELECT SPLIT(RPAD('', 1 + DATEDIFF('2016-09-08', '2016-08-08'), '.'),'') AS h 
     FROM (SELECT NULL)),h 
    ))) 
) AS calendar 
    WHERE DATEDIFF(calendar_day, dt) BETWEEN 0 AND 29 
) 
GROUP BY calendar_day 
ORDER BY calendar_day DESC 

を行う必要がありますそれは

dt   userID 
2016-09-08  1 
2016-09-08  2 
... 

YourTableは、(例えば、以下のような)ユーザーIDおよびDTフィールドを持つと仮定しそして、あなたがコントロールすることができます:
を - 報告の日付がして、範囲を変更することにより、アグリゲーションサイズ - それぞれ2016-08-082016-09-08
を変更しますin BETWEEN 0 AND 29

関連する問題