大查询 UDF 支持
Posted
技术标签:
【中文标题】大查询 UDF 支持【英文标题】:bigquery UDF support 【发布时间】:2012-07-26 07:30:03 【问题描述】:我对 Google 的 BigQuery 非常陌生
我想根据日期和月份解析时间戳 (yyyy/mm/dd:hh:mm:ss
),希望将天分成几周。
我没有找到任何这样做的 BigQuery 函数。
因此,我想知道是否有一种方法可以编写 UDF
,然后在 BigQuery 查询中访问它
【问题讨论】:
UDF 现在可用:cloud.google.com/bigquery/user-defined-functions 【参考方案1】:这里有两个问题,所以两个答案:
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"(\d4)/(\d2)/(\d2):(\d2):(\d2):(\d2)",
r"\1-\2-\3 \4:\5:\6")), 0) AS week
FROM mytable)
GROUP BY week;
请注意,这里的0
是使用一周中的哪一天作为“开始”的参数;我使用了星期日,但对于“商务”-y 使用 1
(即星期一)可能更有意义。
以防万一,文档中的section on timestamp functions 很有帮助。
【讨论】:
感谢@Craig,刚刚完成了我对 Bigquery 的第一次分析,并且查询它的速度非常快。只是很少担心 a) 缺乏 UDF 支持 b) 连接限制 c) 加载时间问题 BigQuery 现在支持 UDF:cloud.google.com/bigquery/user-defined-functions【参考方案2】: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
);
【讨论】:
虽然此链接可能会有所帮助,但您能否在问题中添加一些相关信息,以便如果链接失效,信息仍然存在? 谢谢,用查询和代码示例更新评论。以上是关于大查询 UDF 支持的主要内容,如果未能解决你的问题,请参考以下文章