我对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
);
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top