2017-05-27 6 views

Antwort

2

Unten ist für BigQuery Standard SQL und gibt Ihnen alle Zeilen mit mehr als 90 "Chips" und mehr als 1000 "Münzen".

#standardSQL 
SELECT * 
FROM yourTable 
WHERE (
    SELECT COUNTIF((key = 'chips' AND value.int_value > 90) 
       OR (key = 'coins' AND value.int_value > 1000)) 
    FROM UNNEST(event_dim.params) 
) > 1 

Hinweis: obige Abfrage übernimmt Schlüssel Einzigartigkeit innerhalb jeder Reihe - die höchstwahrscheinlich ein Fall ist.

Unter Variation gibt Ihnen alle Ebenen und Anzahl der jeweiligen Reihen mit mehr als 90 „Chips“ und mehr als 1000 „Münzen“

#standardSQL 
SELECT param.value.int_value, COUNT(1) AS cnt 
FROM yourTable, UNNEST(event_dim.params) AS param 
WHERE (
    SELECT COUNTIF((key = 'chips' AND value.int_value > 90) 
       OR (key = 'coins' AND value.int_value > 1000)) 
    FROM UNNEST(event_dim.params) 
) > 1 
AND param.key = 'level' 
GROUP BY 1 
2

Dies könnte Ihnen helfen:

SELECT 
    * 
FROM data 
WHERE ((SELECT COUNTIF((key = 'chips' AND value.int_value > 90)) FROM UNNEST(event_dim.params)) > 0 AND (SELECT countif((key = 'coins' AND value.int_value > 1000)) FROM UNNEST(event_dim.params)) > 0) 

Wo Daten ist Ihre Eingabezeile:

WITH data AS(
SELECT STRUCT<name string, params ARRAY<struct<key string, value STRUCT<string_value string, int_value int64> >>> ('level_up', [STRUCT('level' as key, STRUCT('null' as string_value, 19 as int_value) as value), STRUCT('firebase_event_origin' as key, struct('app' as string_value, null as int_value) as value), struct('chips' as key, STRUCT('null' as string_value, 97 as int_value) as value), STRUCT('coins' as key, struct('null' as string_value, 4085 as int_value) as value), STRUCT('powerups' as key, STRUCT('null' as string_value, 19 as int_value) as value)]) event_dim 
) 

Beachten Sie, dass dies die Standard SQL Version von BigQuery verwenden.

Verwandte Themen