Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 无法从包含数组和结构的BigQuery表中提取键值对_Arrays_Firebase_Google Bigquery_Firebase Analytics_Unnest - Fatal编程技术网

Arrays 无法从包含数组和结构的BigQuery表中提取键值对

Arrays 无法从包含数组和结构的BigQuery表中提取键值对,arrays,firebase,google-bigquery,firebase-analytics,unnest,Arrays,Firebase,Google Bigquery,Firebase Analytics,Unnest,我将Firebase分析数据与google BigQuery集成在一起,每天都会创建一个带有日期戳的新表 一个示例表是projectd.com_dev_sambhav_ANDROID.app_events_20170821 一个示例表如下所示 我的要求是以下面所需的格式获取事件\ dim.name=通知\接收的结果 为了获得所需的输出,我执行下面的querystandardSQL SELECT event.name (SELECT param.value.string_value FROM

我将Firebase分析数据与google BigQuery集成在一起,每天都会创建一个带有日期戳的新表

一个示例表是projectd.com_dev_sambhav_ANDROID.app_events_20170821

一个示例表如下所示

我的要求是以下面所需的格式获取事件\ dim.name=通知\接收的结果

为了获得所需的输出,我执行下面的querystandardSQL

SELECT event.name
 (SELECT param.value.string_value FROM UNNEST(event_dim.params) AS param WHERE param.key="notification_title") as notification_title,
 (SELECT param.value.string_value FROM UNNEST(event_dim.params) AS param WHERE param.key="item_id") as item_id 
FROM `projectID.com_dev_sambhav_ANDROID.app_events_20*`, UNNEST(event_dim) as event  
WHERE event.name = "notification_received"
但我犯了这个错误

错误:每个函数参数都是表达式,而不是查询。使用 查询作为一个表达式,必须使用其他 括号使其成为标量子查询表达式


有人能帮我解决这个问题吗?问题是逗号和别名。此查询可用于:

#standardSQL
WITH `projectID.com_dev_sambhav_ANDROID.app_events_2017` AS(
  SELECT ARRAY< STRUCT<date STRING, name STRING, params ARRAY< STRUCT<key STRING, value STRUCT<string_value STRING> > > > > [STRUCT('20170814' AS date, 'notification_received' AS name, [STRUCT('notification_title' AS key, STRUCT('Amazing Offers two' AS string_value) AS value ), 
                                                                                                                STRUCT('firebase_screen_class' AS key, STRUCT('RetailerHomeActivity' AS string_value) AS value),
                                                                                                                STRUCT('notification_id' AS key, STRUCT('12345' AS string_value) AS value),
                                                                                                                STRUCT('firebase_screen_id' AS key, STRUCT('app' AS string_value) AS value),
                                                                                                                STRUCT('item_id' AS key, STRUCT('DEMO-02' AS string_value) AS value),
                                                                                                                STRUCT('firebase_screen' AS key, STRUCT('My Order' AS string_value) AS value)] AS params)] event_dim
)

SELECT
 event.name,
 (SELECT param.value.string_value FROM UNNEST(event.params) AS param WHERE param.key="notification_title") as notification_title,
 (SELECT param.value.string_value FROM UNNEST(event.params) AS param WHERE param.key="item_id") as item_id 
FROM `projectID.com_dev_sambhav_ANDROID.app_events_20*`, UNNEST(event_dim) as event  
WHERE event.name = "notification_received"

当处理高达TB的数据时,您可能会发现此查询仍然执行得很好。

请尽可能在问题中使用文本而不是图像,因为谷歌可以索引文本,阅读您的问题的人更容易理解信息。但是,我对另一个已打开的事件通知使用了相同的查询,它抛出了错误。`SELECT date FROM UNNESTevent_dim date,SELECT params.value.string_value FROM UNNESTevent_dim event,UNNESTevent.params params WHERE event.name='notification_opened',params.key='notification_title'作为通知标题,从UNNESTevent_dim事件中选择params.value.string_value,unestevent.params params WHERE event.name='notification_opened'和params.key='item_id'作为shikhar-fa2b7.com_hul_sambhav_ANDROID.app_events_20*中的item_id,其中存在从unestevent_dim中选择1,其中name='notification_opened'`错误:标量子查询生成多个元素当子查询找到多个值时会发生这种情况使用相同的param.value.string_值。解决此问题的一种方法是将结果作为类似ARRAYselect params.value.string_value的数组。。。但这会改变数据的结构。让我知道这是否适用于您。我使用了表AS的第一个建议,它适用于通知。谢谢兄弟
#standardSQL
SELECT
  (SELECT date FROM UNNEST(event_dim)) date,
  (SELECT params.value.string_value FROM UNNEST(event_dim) event, UNNEST(event.params) params WHERE event.name = 'notification_received' AND params.key = 'notification_title') AS notification_title,
  (SELECT params.value.string_value FROM UNNEST(event_dim) event, UNNEST(event.params) params WHERE event.name = 'notification_received' AND params.key = 'item_id') AS item_id
FROM `projectID.com_dev_sambhav_ANDROID.app_events_2017`
WHERE EXISTS(SELECT 1 FROM UNNEST(event_dim) WHERE name = 'notification_received')