1

I am very new to BigQuery by google

I want to parse time stamp (yyyy/mm/dd:hh:mm:ss) based on the day and the month wish to bucket days into weeks. I didn't find any BigQuery function which does this.

Hence, I was wondering if there was a way in which I can write a UDF and then access it in a BigQuery query

4

2 回答 2

2

这里有两个问题,所以有两个答案:

  • BigQuery确实支持 UDF:docs。(当我第一次回答这个问题时没有。)

  • 即使没有 UDF,日期分桶仍然可行。BigQuery 具有一次性解析函数 ,PARSE_UTC_USEC它期望以 形式输入YYYY-MM-DD hh:mm:ss。您需要使用REGEXP_REPLACE将您的日期转换为正确的格式。完成此操作后,UTC_USEC_TO_WEEK会将事情限制在几周内,并且您可以按此分组。因此,将所有这些联系在一起,如果您的表有一个名为 的列timestamp,您可以通过类似的方式按周计算

    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;
    

    请注意,0这里是使用一周中的哪一天作为“开始”的参数;我已经使用了星期日,但对于“业务”-y 使用1(即星期一)的事情可能更有意义。

以防万一您需要它,文档中有关时间戳功能的部分很有帮助。

于 2012-07-27T06:12:45.730 回答
1

BigQuery 中的 UDF 支持现已推出! https://cloud.google.com/bigquery/user-defined-functions

下面是一些将字符串时间说明符转换为 JavaScript Date 对象并从中提取一些属性的代码;有关 JS 日期可用属性的信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date 。

QUERY(用您的表替换嵌套选择):

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

代码:

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
);
于 2015-09-23T21:33:23.957 回答