我是谷歌BigQuery的新手
我想解析基于日期和月份的时间戳(yyyy/mm/dd:hh:mm:ss
),希望将天存储为周。我没有找到任何这样做的BigQuery函数。
因此,我想知道是否有一种方法可以编写UDF
,然后在BigQuery查询中访问它
发布于 2012-07-27 14:12:46
这里有两个问题,所以有两个答案:
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,SELECTr"\1-\2-\3 \4:\5:\6")),0)作为mytable中的周)逐周分组;
请注意,这里的0
是用来表示一周中哪一天作为“开始”的参数;我用的是星期天,但对于“业务”,使用1
(即星期一)来做事情可能更有意义。
如果您需要的话,文档中的section on timestamp functions是很有用的。
发布于 2015-09-24 05:33:24
现在支持BigQuery中的自定义函数了!https://cloud.google.com/bigquery/user-defined-functions
下面是将字符串时间说明符转换为JavaScript Date对象并从中提取一些属性的代码;有关JS Date可用的属性的信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date。
查询(将嵌套的select替换为您的表):
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
);
https://stackoverflow.com/questions/11664449
复制相似问题