如何在 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 中获取可用的日期时间字段