2016-07-29 39 views
4

在與第三方共享BigQuery中的Firebase Analyics表之前,我需要刪除顯示少於5行的城市的行。我怎樣才能做到這一點,而不會丟失表結構?刪除Firebase Analytics中的行導出爲BigQuery,但不受歡迎的值

挑戰:

  • 火力地堡分析BigQuery中的數據已經嵌套行了,我不想失去嵌套結構。
  • 不同地區的一些城市有相同的名稱。這意味着我需要在計數時至少使用兩個字段(城市,地區)。
  • 有時城市和/或地區可能爲空。我不想失去那些行。

回答

3

快速查詢:

SELECT *, 
    IFNULL(user_dim.geo_info.city,'_')+IFNULL(user_dim.geo_info.region,'_') cityregion, 
FROM [dataset.app_events_20160607] 
HAVING cityregion NOT IN (
    SELECT cityregion FROM (
    SELECT COUNT(*) c, IFNULL(user_dim.geo_info.city,'_')+IFNULL(user_dim.geo_info.region,'_') cityregion 
    FROM [dataset.app_events_20160607] 
    GROUP BY 2 
    HAVING c<6 
) 
) 

你必須設置選項:

  • 允許較大的結果
  • 不變平結果

快速的解釋:

  • SELECT *, [...] cityregion帶來了所有結果,而不會丟失結構並添加一個新列cityregion
  • IFNULL(..., '_') replaces null values with _`,所以我們可以結合城市和地區,以防萬一。
  • HAVING cityregion NOT IN查看新的cityregion列,檢查它是否不存在於子查詢中。
  • 子查詢將統計城市地區的每個組合,並且只列出出現少於6次的組合。
2

有時你不能「買得起」在你的公開數據額外的冗餘列
沒有測試,但是下面應該這樣做 - 你只需要在Standard SQL

SELECT * 
FROM `dataset.app_events_20160607` 
WHERE CONCAT(IFNULL(user_dim.geo_info.city,'_'), IFNULL(user_dim.geo_info.region,'_')) NOT IN (
    SELECT cityregion FROM (
    SELECT COUNT(*) c, CONCAT(IFNULL(user_dim.geo_info.city,'_'), IFNULL(user_dim.geo_info.region,'_')) cityregion 
    FROM `dataset.app_events_20160607` 
    GROUP BY 2 
    HAVING c<6 
) 
) 
運行