如何在 Bigquery¿ 中查询自动日期?

Posted

技术标签:

【中文标题】如何在 Bigquery¿ 中查询自动日期?【英文标题】:How to query automatical date in Bigquery¿? 【发布时间】:2017-06-29 10:22:06 【问题描述】:

我在 Bigquery 有不同的查询,但每个月只需要运行一次(包含上个月的所有关闭数据)。 目前我在查询中手动更改日期,但我需要更改它并创建一个函数,为我提供过去的数据。

例如:我在 7 月 1 日或 2 日运行此查询,并且需要查询从 6 月 1 日到 30 日获取数据。 (查询是用标准 SQL 方言编写的)

谢谢。

代码:

SELECT
  hits.contentGroup.contentgroup2 AS CampaignGrouping,
  custd.value AS member_PK,
  PARSE_TIMESTAMP('%Y%m%d',date) AS date,
  'WebMobile' AS Canal,
  'MX' AS country_id,
  SUM(hits.contentGroup.contentGroupUniqueViews2) AS VistasUnicas
FROM
  `bigquery-xxxx-xxxxx.111111.ga_sessions*`,
  UNNEST(customdimensions) custd,
  UNNEST(hits) AS hits
WHERE
  1 = 1
  AND PARSE_TIMESTAMP('%Y%m%d', REGEXP_EXTRACT(_table_suffix, r'.*_(.*)')) BETWEEN TIMESTAMP('2017-06-01') AND TIMESTAMP('2017-06-30')
  AND custd.index=30
  and hits.contentGroup.contentGroup2 <> '(not set)'
  AND custd.value <> 'null'
  AND hits.contentGroup.contentGroupUniqueViews2 IS NOT NULL
 GROUP BY 1, 2, 3, 4, 5

【问题讨论】:

【参考方案1】:

下面是 BigQuery 标准 SQL,假设有一个日期字段 dt 包含日期信息

#standardSQL
SELECT *
FROM yourTable
WHERE DATE_TRUNC(dt, MONTH) = 
  DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH) 

以上假设 dt 字段的数据类型为 DATE

如果 dt 是 STRING 类型 - 请在下面尝试

#standardSQL
WITH yourTableAS (
  SELECT '2017-05-30' AS dt UNION ALL
  SELECT '2017-05-31' UNION ALL  
  SELECT '2017-06-01' UNION ALL  
  SELECT '2017-06-02' UNION ALL  
  SELECT '2017-06-03'  
)
SELECT *
FROM yourTable
WHERE DATE_TRUNC(CAST(dt AS DATE), MONTH) = 
  DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH)   

如果 dt 的格式与 'YYYY-MM-DD' 不同,您可以使用 PARSE_DATE 将字符串转换为日期

【讨论】:

谢谢@Mikhail,但我对匹配的格式有疑问。错误:对于参数类型的函数 DATE_TRUNC 没有匹配的签名:STRING、DATE_TIME_PART。支持的签名:DATE_TRUNC(DATE, DATE_TIME_PART) 在 [13:7] 显示您的数据示例 - 特别是 dt 字段,它是什么数据类型?看起来你这里有字符串,只需要将它转换为 DATE 嗨@Mikhail,我有来自 GA 的不同数据集,我正在查询来自不同数据集的数据。唯一带日期的字段是“日期”并且是字符串类型。我在主要问题处复制代码。

以上是关于如何在 Bigquery¿ 中查询自动日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google Analytics 数据在 Bigquery 中获取可用的日期时间字段

如何在 Google BigQuery 中获取日期名称

BigQuery:无效日期错误

在 BigQuery 中,您将如何使用两个日期列计算每月和每日总计?

如何在 Bigquery 查询中使表可选

如何从 BigQuery 下拉列表中绘制多个日期到 Google Data Studio