【问题标题】:bigquery UDF support大查询 UDF 支持
【发布时间】:2012-07-26 07:30:03
【问题描述】:

我对 Google 的 BigQuery 非常陌生

我想根据日期和月份解析时间戳 (yyyy/mm/dd:hh:mm:ss),希望将天分成几周。 我没有找到任何这样做的 BigQuery 函数。

因此,我想知道是否有一种方法可以编写 UDF,然后在 BigQuery 查询中访问它

【问题讨论】:

标签: google-bigquery


【解决方案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"(\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(即星期一)可能更有意义。

以防万一,文档中的section on timestamp functions 很有帮助。

【讨论】:

  • 感谢@Craig,刚刚完成了我对 Bigquery 的第一次分析,并且查询它的速度非常快。只是很少担心 a) 缺乏 UDF 支持 b) 连接限制 c) 加载时间问题
【解决方案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
);

【讨论】:

  • 虽然此链接可能会有所帮助,但您能否在问题中添加一些相关信息,以便如果链接失效,信息仍然存在?
  • 谢谢,用查询和代码示例更新评论。
猜你喜欢
  • 2023-02-09
  • 2023-01-13
  • 2022-01-11
  • 1970-01-01
  • 2021-11-08
  • 2019-03-07
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多