2016-07-29 9 views
4

Bevor ich eine Firebase Analytics-Tabelle in BigQuery mit Dritten teile, muss ich die Zeilen mit Städten entfernen, die in weniger als 5 Zeilen angezeigt werden. Wie kann ich das tun, ohne die Tabellenstruktur zu verlieren?Löschen von Zeilen im Firebase Analytics-Export nach BigQuery mit weniger beliebten Werten

Challenges:

  • Firebase Analytics-Daten in BigQuery hat Zeilen verschachtelt, und ich möchte nicht, die verschachtelte Struktur verlieren.
  • Einige Städte in verschiedenen Regionen haben den gleichen Namen. Das bedeutet, dass ich beim Zählen mindestens zwei Felder (Stadt, Region) benutzen muss.
  • Manchmal können Stadt und/oder Region null sein. Ich möchte diese Zeilen nicht verlieren.

Antwort

3

Schnellanfrage:

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 
) 
) 

werden Sie haben Optionen auf:

  • Lassen Sie große Ergebnisse
  • Nicht Ergebnisse abflachen

Schnell Erklärung:

  • SELECT *, [...] cityregion bringt alle Ergebnisse ohne Struktur zu verlieren und eine neue Spalte hinzufügen cityregion.
  • IFNULL(..., '_') replaces null values with _`, so können wir Stadt und Region miteinander kombinieren, falls einer null ist.
  • HAVING cityregion NOT IN untersucht die neue cityregion Spalte, um zu überprüfen, ob sie in der Unterabfrage nicht existiert.
  • Die Unterabfrage zählt jede Kombination von Stadt-Region und listet nur diejenigen auf, die weniger als 6 Mal erscheinen.
2

Manchmal kann man nicht „leisten“ in Ihrem öffentlichen Daten zusätzliche redundante Spalte mit
nicht getestet, aber unten sollten dies tun - Sie werden es einfach laufen müssen in 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 
) 
) 
Verwandte Themen