prise en charge de la fonction UDF bigquery
-
11-12-2019 - |
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
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 formeYYYY-MM-DD hh:mm:ss
.Vous devrez utiliserREGEXP_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éetimestamp
, vous pouvez obtenir des décomptes par semaine via quelque chose commeSELECT 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'utilise1
(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
);