Question

Je suis très nouveau sur BigQuery par Google

Je veux analyser l'horodatage (yyyy/mm/dd:hh:mm:ss) en fonction du jour et du mois, vous souhaitez diviser les jours en semaines.Je n'ai trouvé aucune fonction BigQuery qui fasse cela.

Par conséquent, je me demandais s'il existait un moyen d'écrire un UDF puis accédez-y dans une requête BigQuery

Était-ce utile?

La solution

Il y a deux questions ici, donc deux réponses :

  • BigQuery fait prendre en charge les UDF : documents.(Ce n'était pas le cas lorsque j'ai répondu pour la première fois.)

  • Même sans UDF, le regroupement de dates est toujours réalisable.BigQuery dispose d'une fonction d'analyse unique, PARSE_UTC_USEC, qui attend une entrée sous la forme YYYY-MM-DD hh:mm:ss.Vous devrez utiliser REGEXP_REPLACE pour mettre votre date au bon format.Une fois que tu as fait ça, UTC_USEC_TO_WEEK bloquera les choses en semaines, et vous pourrez regrouper en fonction de cela.Donc, relier tout cela ensemble, si votre table a une colonne appelée timestamp, vous pouvez obtenir des décomptes par semaine via quelque chose comme

    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;
    

    Notez que le 0 voici l'argument pour quel jour de la semaine utiliser comme « début » ;J'ai utilisé le dimanche, mais pour des choses "professionnelles", j'utilise 1 (c'est à dire.Lundi) aurait probablement plus de sens.

Juste au cas où vous en auriez besoin, le section sur les fonctions d'horodatage dans la documentation est utile.

Autres conseils

Support UDF à BigQuery est maintenant ici! https://cloud.google.com/bigquerery/user-defined-fonctions

Voici quelques codes qui convertiront un spécificateur de temps de chaîne en un objet de date JavaScript et extraire des propriétés de celui-ci;Voir https://developer.mozilla.org/fr-US / DOCS / Web / JavaScript / Référence / Global_Objects / Date Pour plus d'informations sur les propriétés disponibles pour JS Dates.

Query (remplacez la sélection imbriquée avec votre table):

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top