2017-05-02 3 views
0

私は_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ことができる方法であり、 ?私はここで非常にシンプルなものを逃しているように感じる。どんな助けも素晴らしいだろう、ありがとう!

答えて

2

CROSS JOIN UNNEST(event_dim) AS event(およびそれに続くクロス結合)は、WHERE句の前に来る必要があります。 query syntax documentationで詳しく読むことができます。

関連する問題