首页 文章

如何在BigQuery中选择多个自定义Firebase事件参数?

提问于
浏览
7

我将Firebase事件导出到BigQuery,现在我正在尝试从某个事件中选择两个参数 . 以下是选择一个参数的查询:

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"

两个参数都是int值,第一个参数的名称是 level_id ,第二个参数是 count . 我想要显示的是第一列中的 level_id 和第二列中的 count .

3 回答

  • 7

    以下将适用于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'
    

    如果您遇到Legacy SQL,请参阅Migrating from legacy SQL

  • 1

    我喜欢以前的解决方案!这是我提出的同样问题的替代解决方案 . 我欢迎评论哪种解决方案更有效/更便宜以及为什么 .

    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'
    
  • 10

    我觉得非常方便的另一个解决方案是使用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;
    

相关问题