Frage

Ich bin ganz neu bei BigQuery von Google

Ich möchte den Zeitstempel analysieren (yyyy/mm/dd:hh:mm:ss) basierend auf dem Tag und dem Monat, um Tage in Wochen zu unterteilen.Ich habe keine BigQuery-Funktion gefunden, die dies tut.

Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, eine zu schreiben UDF und dann in einer BigQuery-Abfrage darauf zugreifen

War es hilfreich?

Lösung

Hier gibt es zwei Fragen, also zwei Antworten:

  • BigQuery tut UDFs unterstützen: Dokumente.(Das war noch nicht der Fall, als ich darauf zum ersten Mal geantwortet habe.)

  • Auch ohne UDFs ist das Datums-Bucketing noch machbar.BigQuery verfügt über eine einmalige Parsing-Funktion. PARSE_UTC_USEC, das Eingaben im Formular erwartet YYYY-MM-DD hh:mm:ss.Sie müssen verwenden REGEXP_REPLACE um Ihr Datum in das richtige Format zu bringen.Sobald Sie das getan haben, UTC_USEC_TO_WEEK wird die Dinge in Wochen einteilen, und Sie können danach gruppieren.Wenn Ihre Tabelle also eine Spalte mit dem Namen hat, verbinden Sie das alles miteinander timestamp, könnten Sie die Zählungen pro Woche über so etwas wie erhalten

    SELECT week, COUNT(week)
    FROM (SELECT UTC_USEC_TO_WEEK(
                   PARSE_UTC_USEC(
                     REGEXP_REPLACE(
                       timestamp, 
                       r"(\d{4})/(\d{2})/(\d{2}):(\d{2}):(\d{2}):(\d{2})", 
                       r"\1-\2-\3 \4:\5:\6")), 0) AS week
          FROM mytable) 
    GROUP BY week;
    

    Notiere dass der 0 Hier ist das Argument dafür, welcher Wochentag als „Anfang“ verwendet werden soll.Ich habe Sunday verwendet, aber für „geschäftliche“ Dinge 1 (d. h.Montag) wäre wahrscheinlich sinnvoller.

Nur für den Fall, dass Sie es brauchen, das Abschnitt über Zeitstempelfunktionen in den Dokumenten ist hilfreich.

Andere Tipps

UDF-Unterstützung in BigQuery ist jetzt da! https://cloud.google.com/bigquery/user-defined-functions

Hier ist ein Code, der einen String-Zeitspezifizierer in ein JavaScript-Datumsobjekt konvertiert und einige Eigenschaften daraus extrahiert;sehen https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date für Informationen zu den für JS-Termine verfügbaren Unterkünften.

ABFRAGE (ersetzen Sie die verschachtelte Auswahl durch Ihre Tabelle):

SELECT day_of_week, month_date
FROM parseDate(select '2015/08/01 12:00:00' as date_string);

CODE:

function parsedate(row, emit) {
  var d = new Date(row.date_string);
  emit({day_of_week: d.getDay(),
        month_date: d.getDate()});
}

bigquery.defineFunction(
  'parseDate',                           // Name of the function exported to SQL
  ['date_string'],                    // Names of input columns
  [{'name': 'day_of_week', 'type': 'integer'},
   {'name': 'month_date', 'type': 'integer'}],
  parsedate
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top