1

BigQueryには、約40Mbのデータを含むある種のアクティビティのテーブルがあります。活動日は、フィールドの1つに保管されます(YYYY-MM-DD HH:MM:SS形式の文字列)。妥当な時間を実行している非アクティブの期間(事前定義されたしきい値を使用)を決定する方法を見つける必要があります。

私が作成したクエリはすでに1時間実行されています。ここにあります:

SELECT t1.date, MIN(PARSE_UTC_USEC(t1.date) - PARSE_UTC_USEC(t2.date)) AS mintime 
FROM logs t1
JOIN (SELECT date, http_error FROM logs) t2 ON t1.http_error = t2.http_error
WHERE PARSE_UTC_USEC(t1.date) > PARSE_UTC_USEC(t2.date)
GROUP BY t1.date
HAVING mintime > 1000;

アイデアは次のとおりです。1。テーブルのデカート乗算をそれ自体で実行します(http_errorは値をほとんど変更しないフィールドであるため、トリックを実行します)2. date1>date23のペアのみを取得します。この最小の差がしきい値を超える場合は、選択を制限してください。

私が使用する実際のクエリは、無効なデータの修正によって少し負担になることを認めます(これにより追加の操作が追加されます)。しかし、私はこれを行うためのより良いアイデアが本当に必要です。他のアイデアを聞いてうれしいです

4

1 に答える 1

0

探している非アクティブの粒度はわかりませんが、タイムスタンプでバケット化してから、各バケット内のアクティビティの相対頻度をカウントしてみてください。

SELECT
  UTC_USEC_TO_HOUR(PARSE_UTC_USEC(timestamp_usec)) AS hour_bucket,
  COUNT(*) as activity_count
GROUP BY
  hour_bucket
ORDER BY
  activity_count ASC;
于 2013-02-08T17:07:16.567 に答える