[英]Schedule a query in Bigquery when a table come in Firebase Analytics Partition table
[英]Filtering query by two values in same ARRAY or STRUCTs in Firebase Analytics BigQuery database
這個問題是這個初始問題的后續問題。
在前面的示例中,我們了解了如何從 Firebase 的 Analytics 數據庫中過濾一個結構數組。
現在這是最重要的新挑戰:
我的想法是,因為我們已經這樣做了:
UNNEST(event_params) 作為 ep
這意味着 event_params 現在變平了,這意味着它的值來自以下 ARRAYS:
所以我的想法是,因為我設法訪問了 value.string_value = 'Restaurant profile',所以訪問另一個您可以在示例中看到的名為“restaurant_id”的值應該沒問題,所以我添加了更多的 AND 語句:
ep.key = 'restaurant_id' AND
ep.value.int_value = 2045881 AND
但是正如您可以想象的那樣,自從我發布它以來,結果並不完全是預期的,即使從技術上講 BigQuery 確實接受了我的解決方案:
知道我的初始查詢有什么問題以及如何解決嗎?
知道我的初始查詢有什么問題以及如何解決嗎?
問題是ep.key
不能同時是firebase_screen
和restaurant_id
- 所以不是使用AND
你需要使用OR
如下例
SELECT *
FROM `diningcity-2ad82.analytics_171798853.events_20201222` e, UNNEST(e.event_params) ep
WHERE e.platform = 'IOS' AND (
(ep.key = 'firebase_screen' AND ep.value.string_value = 'Restaurant profile') OR
(ep.key = 'restaurant_id' AND ep.value.int_value = 2045881)
)
LIMIT 1000;
但是,如果我需要這兩個條件都為真怎么辦? ...
我認為在這種情況下您的初始查詢不是最好的開始 - 請嘗試以下
SELECT *
FROM `diningcity-2ad82.analytics_171798853.events_20201222` e
WHERE e.platform = 'IOS' AND (
SELECT COUNT(*)
FROM e.event_params
WHERE
(key = 'firebase_screen' AND value.string_value = 'Restaurant profile') OR
(key = 'restaurant_id' AND value.int_value = 2045881)
) = 2
LIMIT 1000;
您可以按如下方式使用exists
:
SELECT *
FROM `diningcity-2ad82.analytics_171798853.events_20201222` e,
UNNEST(e.event_params) ep
WHERE e.platform = 'IOS'
AND ep.key = 'firebase_screen'
AND ep.value.string_value = 'Restaurant profile'
And exists (select 1 from UNNEST(e.event_params) epp
Where epp.key = 'restaurant_id'
AND epp.value.int_value = 2045881)
LIMIT 1000;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.