Pregunta

Soy muy nuevo en BigQuery de google.

Quiero analizar la marca de tiempo (yyyy/mm/dd:hh:mm:ss) según el día y el mes, desea dividir los días en semanas.No encontré ninguna función de BigQuery que haga esto.

Por lo tanto, me preguntaba si había alguna manera de escribir un UDF y luego acceder a él en una consulta de BigQuery

¿Fue útil?

Solución

Hay dos preguntas aquí, entonces dos respuestas:

  • Gran consulta hace UDF de soporte: documentos.(No fue así cuando respondí esto por primera vez).

  • Incluso sin UDF, la agrupación de fechas sigue siendo factible.BigQuery tiene una función de análisis única, PARSE_UTC_USEC, que espera entrada en el formulario YYYY-MM-DD hh:mm:ss.Necesitarás usar REGEXP_REPLACE para que su fecha tenga el formato correcto.Una vez que hayas hecho eso, UTC_USEC_TO_WEEK bloqueará las cosas en semanas y podrás agruparlas según eso.Entonces, uniendo todo eso, si su tabla tiene una columna llamada timestamp, podrías obtener recuentos por semana a través de algo como

    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;
    

    Tenga en cuenta que el 0 aquí está el argumento sobre qué día de la semana usar como "principio";He usado el domingo, pero para cosas "de negocios" usando 1 (es decir.lunes) probablemente tendría más sentido.

En caso de que lo necesites, el sección sobre funciones de marca de tiempo en los documentos es útil.

Otros consejos

¡La compatibilidad con UDF en BigQuery ya está aquí! https://cloud.google.com/bigquery/funciones-definidas por el usuario

Aquí hay un código que convertirá un especificador de tiempo de cadena en un objeto Fecha de JavaScript y extraerá algunas propiedades de él;ver https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date para obtener información sobre propiedades disponibles para fechas JS.

CONSULTA (reemplace la selección anidada con su tabla):

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

CÓDIGO:

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
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top