How to select multiple custom Firebase event parameters in BigQuery?

前端 未结 3 1633
悲&欢浪女
悲&欢浪女 2020-12-31 08:21

I exported Firebase events to BigQuery and now I\'m trying to select two parameters from a certain event. Here is the query for selecting one parameter:

sele         


        
相关标签:
3条回答
  • 2020-12-31 08:32

    Below will work with 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'
    

    See also Migrating from legacy SQL in case if you are stuck with Legacy SQL

    0 讨论(0)
  • 2020-12-31 08:32

    Another solution I find quite handy is to use 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;
    
    0 讨论(0)
  • 2020-12-31 08:33

    I love the previous solution! Here is an alternative solution for the same problem I came up with. I'd welcome comments on which solution is more efficient/cheaper and why.

    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'
    
    0 讨论(0)
提交回复
热议问题