私は_TABLE_SUFFIX
の仕組みを理解しており、より簡単なクエリでこれをうまく使用しています。私は現在、100以上のデータセットからアクティブユーザーを取得するアプリケーションを構築しようとしていますが、リソース制限に達しています。これらのリソース制限をバイパスするために、私はループし、クエリを複数回実行し、どれだけ選択するかを一度に制限します。_TABLE_SUFFIX
。ここで複雑なクエリで_table_suffixを使用してデータセットを制限する方法はありますか?
は私の現在のクエリです:
WITH allTables AS (SELECT
app,
date,
SUM(CASE WHEN period = 30 THEN users END) as days_30
FROM (
SELECT
CONCAT(user_dim.app_info.app_id, ':', user_dim.app_info.app_platform) as app,
dates.date as date,
periods.period as period,
COUNT(DISTINCT user_dim.app_info.app_instance_id) as users
FROM `table.app_events_*` as activity
WHERE _TABLE_SUFFIX BETWEEN '20170101' AND '20170502'
OR _TABLE_SUFFIX BETWEEN 'intraday_20170101' AND 'intraday_20170502'
CROSS JOIN
UNNEST(event_dim) AS event
CROSS JOIN (
SELECT DISTINCT
TIMESTAMP_TRUNC(TIMESTAMP_MICROS(event.timestamp_micros), DAY, 'UTC') as date
FROM `table.app_events_*`
WHERE _TABLE_SUFFIX BETWEEN '20170101' AND '20170502'
OR _TABLE_SUFFIX BETWEEN 'intraday_20170101' AND 'intraday_20170502'
CROSS JOIN
UNNEST(event_dim) as event) as dates
CROSS JOIN (
SELECT
period
FROM (
SELECT 30 as period
)
) as periods
WHERE
dates.date >= TIMESTAMP_TRUNC(TIMESTAMP_MICROS(event.timestamp_micros), DAY, 'UTC')
AND
FLOOR(TIMESTAMP_DIFF(dates.date, TIMESTAMP_MICROS(event.timestamp_micros), DAY)/periods.period) = 0
GROUP BY 1,2,3
)
GROUP BY 1,2)
SELECT
app as target,
UNIX_SECONDS(date) as datapoint_time,
SUM(days_30) as datapoint_value
FROM allTables
WHERE date >= TIMESTAMP_ADD(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP, Day, 'UTC'), INTERVAL -30 DAY)
GROUP BY date,1
ORDER BY date ASC
これは、現在私を与える:
Error: Syntax error: Expected ")" but got keyword CROSS at [14:3]
だから私の質問は、私はこのクエリを使用して引っ張ったデータの量を制限し、_TABLE_SUFFIX
ことができる方法であり、 ?私はここで非常にシンプルなものを逃しているように感じる。どんな助けも素晴らしいだろう、ありがとう!