大查询 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 支持的主要内容,如果未能解决你的问题,请参考以下文章

雪花不支持的子查询类型无法在 UDF 标量中评估

雪花标量 UDF 返回 无法评估不支持的子查询类型

BigQuery 中使用引用另一个表的 UDF 的相关子查询错误

SQL 用户定义函数是不是支持 SELECT 子句?

使用来自 PHP 的 UDF MySQL 查询

用于 TOP 功能的 Hive Udf