从BigQuery中的GA日期中提取月份

时间:2018-01-04 13:32:09

标签: sql google-bigquery

我正在尝试将旧版SQL查询转换为标准SQL。我的问题是用标准中的合适函数替换MONTH()。我阅读了文档和EXTRACT()似乎是解决方案,但我认为BigQuery中的日期字段是一个字符串,这使得它无法正常工作。

这是我的遗产代码:

SELECT month(date) AS Mon, hits.eventInfo.eventAction, ROUND(AVG(hits.product.productPrice/1000000),2) AS avg_price
FROM (TABLE_DATE_RANGE([xxx.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
WHERE hits.eventInfo.eventCategory = "Ecommerce"
AND hits.eventInfo.eventAction = "Add to Basket PDP"
OR hits.eventInfo.eventAction = "Add to Basket PLP"
GROUP BY Mon_of_year, hits.eventInfo.eventAction

这是我的标准代码,我试图解决此问题:

SELECT extract(YEAR from PARSE_DATE('%y%m%d',date)) AS Mon, hits.eventInfo.eventAction, ROUND(AVG(hits_product.productPrice/1000000),2) AS avg_price
FROM 
`xxx.ga_sessions_20*` AS t
CROSS JOIN UNNEST(hits) AS hits
CROSS JOIN UNNEST(hits.product) AS hits_product
WHERE
  parse_DATE('%y%m%d',
    _table_suffix) BETWEEN DATE_sub(CURRENT_DATE(),
    interval 7 day)
  AND DATE_sub(CURRENT_DATE(),
    interval 1 day)
AND hits.eventInfo.eventCategory = "Ecommerce"
AND hits.eventInfo.eventAction = "Add to Basket PDP"
OR hits.eventInfo.eventAction = "Add to Basket PLP"
GROUP BY mon, hits.eventInfo.eventAction

但是这给了我错误: Error: Failed to parse input string "20170304"

有关如何使其正常工作的任何建议吗?

1 个答案:

答案 0 :(得分:4)

看起来你很接近,但你需要使用大写Y而不是小写y作为年份部分,即:

PARSE_DATE('%Y%m%d', date)

如果您想获取月份编号,可以使用EXTRACT(MONTH FROM ...),或者如果您只想将日期截断为月份边界,则可以使用DATE_TRUNC(..., MONTH)