2016-12-11 6 views
4

Ich habe Firebase-Ereignisse nach BigQuery exportiert und jetzt versuche ich, zwei Parameter von einem bestimmten Ereignis auszuwählen. Hier ist die Abfrage zum Auswählen eines Parameter:Wie können mehrere benutzerdefinierte Firebase-Ereignisparameter in BigQuery ausgewählt werden?

select event_dim.params.value.int_value as level_id 
from [com_company_appname_ANDROID.app_events_20161210] 
where event_dim.name = "level_replays_until_first_victory" and event_dim.params.key = "level_id" 

Beide Parameter sind Werte int, der Name des ersten Parameters ist level_id, und der zweite Parameter ist count. Was ich gerne zeigen möchte, ist level_id in der ersten Spalte und count in der zweiten Spalte.

Antwort

6

Im Folgenden wird mit BigQuery Standard SQL

SELECT 
    (SELECT params.value.int_value FROM x.params 
           WHERE params.key = 'level_id') AS level_id, 
    (SELECT params.value.int_value FROM x.params 
           WHERE params.key = 'count') AS count 
FROM `com_company_appname_ANDROID.app_events_20161210`, UNNEST(event_dim) AS x 
WHERE x.name = 'level_replays_until_first_victory' 

Siehe auch Migrating from legacy SQL im Fall funktionieren, wenn Sie mit Legacy-SQL

+0

Dank nutzen! Das hat perfekt funktioniert. –

+0

Nun sagen wir, ich möchte nur die Zeilen anzeigen, wo die "count = 5", wie würden Sie das in diesem Fall formulieren? –

+0

gibt es viele Möglichkeiten. um meine Antwort in den Kommentar einzufügen - füge einfach bis zum Ende der Abfrage die nächste hervorgehobene Anweisung hinzu UND (SELECT params.value.int_value FROM x.params WHERE params.key = 'count') = 5'. Wenn Sie weitere Fragen haben - bitte benutzen Sie keine Kommentare für Fragen - lieber bitte neue Frage und wir helfen Ihnen gerne –

1

ich die vorherige Lösung lieben stecken! Hier ist eine alternative Lösung für das gleiche Problem, das ich gefunden habe. Ich würde mich über Kommentare freuen, welche Lösung effizienter/billiger ist und warum.

SELECT event_param1.value.int_value AS level_id, 
event_param2.value.int_value AS count 
FROM `com_company_appname_ANDROID.app_events_20161210`, 
UNNEST(event_dim) event, 
UNNEST(event.params) as event_param1, 
UNNEST(event.params) as event_param2 
WHERE event.name = 'level_replays_until_first_victory' 
AND event_param1.key = 'level_id' 
AND event_param2.key = 'count' 
1

Eine andere Lösung, die ich sehr praktisch finde, ist User Defined Functions to analyze user properties and event parameters

#Standard-SQL 

#UDF for event parameters 
CREATE TEMP FUNCTION paramValueByKey(k STRING, params ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, double_value FLOAT64 >>>) AS (
    (SELECT x.value FROM UNNEST(params) x WHERE x.key=k) 
); 

#UDF for user properties 
CREATE TEMP FUNCTION propertyValueByKey(k STRING, properties ARRAY<STRUCT<key STRING, value STRUCT<value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, double_value FLOAT64>, set_timestamp_usec INT64, index INT64 > >>) AS (
    (SELECT x.value.value FROM UNNEST(properties) x WHERE x.key=k) 
); 

#Query the sample dataset, unnesting the events and turn 'api_version', 'round' and 'type_of_game' into columns 
SELECT 
    user_dim.user_id, 
    event.name, 
    propertyValueByKey('api_version', user_dim.user_properties).string_value AS api_version, 
paramValueByKey('round', event.params).int_value as round, 
paramValueByKey('type_of_game', event.params).string_value as type_of_game 
FROM `firebase-analytics-sample-data.android_dataset.app_events_20160607`, 
UNNEST(event_dim) as event 
WHERE event.name = 'round_completed' 
LIMIT 10; 
Verwandte Themen