2013-12-12 6 views
5

Ich bin neu in den Spalten-DB-Konzepten und BigQuery im Besonderen. Mir ist aufgefallen, dass es aus Gründen der Performance und Kosteneffizienz empfehlenswert ist, Daten nicht nur logisch, sondern auch zeitlich auf mehrere Tabellen aufzuteilen.BigQuery-Best Practice zum Segmentieren von Tabellen nach Daten

Zum Beispiel - während ich eine Tabelle brauche, um meine Protokolle zu speichern (1 logische Tabelle, die "Protokolle" genannt wird), ist es tatsächlich eine gute Praxis, eine separate Tabelle für verschiedene Zeiträume zu haben, wie "logs_2012", " logs_2013" , etc ... oder sogar "logs_2013_01", "logs_2013_02", etc ...

Meine Fragen:

1) Ist es wirklich die beste Praxis?

2) Wo wäre am besten, die Linie zu zeichnen - eine jährliche Tabelle? Ein monatlicher Tisch? Ein Tagestisch? Sie bekommen den Punkt ...

3) In Bezug auf die Abfrage der Daten über Abfragen - Was ist der beste Ansatz? Sollte ich meine Abfragen dynamisch mit der UNION-Option erstellen? Wenn ich alle meine Protokolle in einer Tabelle hätte, würde ich natürlich die where-Klausel verwenden, um Daten für den gewünschten Zeitbereich zu erhalten, aber wenn Daten über mehrere Tabellen verteilt sind, ist das seltsam. Ich komme aus der Welt der relationalen DB (wenn es bisher nicht offensichtlich war) und ich versuche den Sprung so reibungslos wie möglich zu machen ...

4) Verwendung der verteilten Methode (verschiedene Tabellen für verschiedene Zeiträume) wirft noch die folgende Frage auf: vor dem Abfragen der Daten selbst - ich möchte für einen bestimmten Protokolltyp bestimmen können - was ist der verfügbare Bereich für die Abfrage. Zum Beispiel - für eine bestimmte Maschine möchte ich meinen Benutzern zuerst den relevanten Umfang ihrer verfügbaren Protokolle präsentieren und sie den spezifischen Zeitraum in diesem Bereich wählen lassen, um Einblicke zu erhalten. Die Frage ist: Wie konstruiere ich eine solche Abfrage, wenn meine Daten über mehrere Tabellen verteilt sind (jeweils für einen Zeitraum), von denen ich nicht weiß, welche Tabellen verfügbar sind? Wie kann ich eine Abfrage erstellen, wenn ich nicht weiß, welche Tabellen existieren? Ich könnte versuchen, auf die Tabelle "logs_2012_12" zuzugreifen, wenn diese Tabelle nicht existiert, oder schlimmstenfalls - ich würde nicht wissen, welche Tabellen für meine Abfrage relevant und verfügbar sind.

Hoffnung meine Fragen Sinn machen ...

Amit

Antwort

7

Tabelle

Für die tägliche Tabellen Benennung der vorgeschlagenen Tabellenname Muster ist der spezifische Name Ihrer Tabelle + das Datum wie in "20131225". Zum Beispiel "logs20131225" oder "logs_20131225".

Ideale Aggregation: Tag, Monat, Jahr?

Die Antwort auf diese Frage hängt von Ihren Daten und Ihren Fragen ab.

  • Suchen Sie in der Regel ein oder zwei Tage Daten ab? Dann haben Sie tägliche Tabellen, und Ihre Kosten werden viel niedriger sein, wenn Sie nur die Daten abfragen, die Sie brauchen.
  • Fragen Sie in der Regel alle Ihre Daten ab? Dann haben Sie alle Daten in einer Tabelle. Viele Tabellen in einer Abfrage können langsamer werden, wenn die Anzahl der abzufragenden Tabellen zunimmt.
  • Im Zweifelsfall beides! Sie könnten tägliche, monatliche, jährliche Tabellen haben. Bei geringen Speicherkosten können Sie viel sparen, wenn Sie Abfragen ausführen, die nur auf die beabsichtigten Daten abzielen.

Unions

Fühlen Sie sich frei, Gewerkschaften zu tun.

  • Denken Sie daran, dass es eine Grenze von 1000 Tabellen pro Abfrage gibt. Das heißt, wenn Sie tägliche Tabellen haben, können Sie 3 Jahre Daten nicht abfragen (3 * 365> 1000).
  • Denken Sie daran, dass Unions in BigQuery nicht das Schlüsselwort UNION verwenden, sondern das "," das andere Datenbanken für Joins verwenden. Joins in BigQuery können mit dem expliziten SQL-Schlüsselwort JOIN (oder JOIN EACH für sehr große Joins) durchgeführt werden.

Tabelle Entdeckung

  • API: tables.list werden alle Tabellen in einem Dataset Liste, über die API.
  • SQL: Um die Liste der Tabellen in SQL abzufragen ... bleiben Sie dran.
+0

Erstaunliche Antwort - Douze Pointe! – Amit

Verwandte Themen