Domanda
Sono molto nuovo a BigQuery di Google
Voglio analizzare il timbro del tempo (yyyy/mm/dd:hh:mm:ss
) in base al giorno e il mese desiderare di secchio in settimane.
Non ho trovato alcuna funzione BigQuery che fa questo.
Quindi, mi stavo chiedendo se c'era un modo in cui posso scrivere un UDF
e quindi accedervi in una query bigquery
Soluzione
Ci sono due domande qui, quindi due risposte:
- .
-
BigQuery è Supporto UDFS: Docs < / a>. (Non ha quando ho risposto per la prima volta.)
-
Anche senza UDFS, la data bucating è ancora fattibile. BigQuery ha una funzione di analisi della volta,
PARSE_UTC_USEC
, che si aspetta input nel moduloYYYY-MM-DD hh:mm:ss
. Dovrai usareREGEXP_REPLACE
per ottenere la tua data nel formato giusto. Una volta fatto ciò,UTC_USEC_TO_WEEK
bloccherà le cose in settimane e puoi raggrupparsi. Quindi legando tutto ciò insieme, se il tuo tavolo ha una colonna chiamatatimestamp
, potresti ottenere conta per settimana tramite qualcosa come
.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;
Si noti che il
0
qui è l'argomento per il giorno della settimana da utilizzare come "inizio"; Ho usato domenica, ma per "business" -y cose che usano1
(cioè lunedì) probabilmente avrebbero avuto più senso.Nel caso in cui ne hai bisogno, Sezione sulle funzioni TimeStamp Nei documenti è utile.
Altri suggerimenti
Il supporto UDF in BigQuery è ora qui! https://cloud.google.com/bigquery/user-defined-functions
Ecco alcuni codici che convertiranno un specificatore di tempo stringa in un oggetto Data JavaScript ed estrarre alcune proprietà da esso;Vedi https://developer.mozilla.org/en-US / Docs / Web / JavaScript / Riferimento / Global_Objects / Data per informazioni su Proprietà disponibili per le date JS.
Query (Sostituisci la selezione annidata con la tabella):
SELECT day_of_week, month_date
FROM parseDate(select '2015/08/01 12:00:00' as date_string);
.
Codice:
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
);
.