【问题标题】:How to select multiple custom Firebase event parameters in BigQuery?如何在 BigQuery 中选择多个自定义 Firebase 事件参数?
【发布时间】:2017-04-26 16:50:27
【问题描述】:

我将 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

【问题讨论】:

    标签: firebase google-bigquery firebase-analytics


    【解决方案1】:

    下面将与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'
    

    如果您遇到旧版 SQL,另请参阅 Migrating from legacy SQL

    【讨论】:

    • 现在假设我只想显示“count = 5”的行,在这种情况下您将如何制定?
    • 有很多方法。使我的回复适合评论 - 只需在查询的最后添加下一个突出显示的语句AND (SELECT params.value.int_value FROM x.params WHERE params.key = 'count') = 5。如果您有更多问题 - 请不要使用 cmets 提问 - 请发布新问题,我们很乐意为您提供帮助
    【解决方案2】:

    我喜欢以前的解决方案!这是我提出的相同问题的替代解决方案。我欢迎 cmets 关于哪种解决方案更有效/更便宜以及为什么。

    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'
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        第二个解决方案的更新

        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_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'
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2017-02-21
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        相关资源
        最近更新 更多