簡體   English   中英

按 Firebase Analytics BigQuery 數據庫中相同 ARRAY 或 STRUCT 中的兩個值過濾查詢

[英]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:可以訪問值;
  • value.int_value:可以訪問值;
  • ETC..

所以我的想法是,因為我設法訪問了 value.string_value = 'Restaurant profile',所以訪問另一個您可以在示例中看到的名為“restaurant_id”的值應該沒問題,所以我添加了更多的 AND 語句:

  ep.key = 'restaurant_id' AND
  ep.value.int_value = 2045881 AND

但是正如您可以想象的那樣,自從我發布它以來,結果並不完全是預期的,即使從技術上講 BigQuery 確實接受了我的解決方案:

空結果

知道我的初始查詢有什么問題以及如何解決嗎?

知道我的初始查詢有什么問題以及如何解決嗎?

問題是ep.key不能同時是firebase_screenrestaurant_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM