题
我对Google的BigQuery很陌生
我想解析时间戳(yyyy/mm/dd:hh:mm:ss
)根据一天和一个月希望把几天变成几周。我没有找到任何这样做的BigQuery函数。
因此,我想知道是否有一种方法,我可以写一个 UDF
然后在BigQuery查询中访问它
解决方案
这里有两个问题,所以两个答案:
大查询 是否 支持UDFs: 文件.(它没有当我第一次回答这个。)
即使没有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
(即星期一)可能会更有意义。
以防万一你需要它, 关于时间戳函数的部分 在文档中是有帮助的。
其他提示
udf在bigquery中的支持现在在这里! https://cloud.google.com/bigquery/user-defined-functions
以下是一些代码,它将将字符串时间说明符转换为JavaScript日期对象,并从中提取一些属性;查看 https://developer.mozilla.org/en-US / DOCS / Web / JavaScript / Reference / Global_Objects /日期有关JS日期可用的属性的信息。
查询(用您的表替换嵌套选择):
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
);
.