SQL BigQuery:选择具有时间基础的查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL BigQuery:选择具有时间基础的查询相关的知识,希望对你有一定的参考价值。

我被要求在时间基础上找到数据库中用户的位置。我想在上午7:00到10:00和下午4:00到10:00之间的特定时间选择3月份的所有预订活动详情。

大查询将timestamp列作为event_timestamp。这样我们就可以在3月份的上午7:00到10:00和下午4:00到10:00之间收到所有预订事件。

如何使用event_timestamp获取特定时间的数据。

  SELECT
  x.value.string_value AS lat,
  y.value.string_value AS lon, EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) as t,
  geo.city
FROM
  `apps.analytics_185684181.*`,
  UNNEST(user_properties) AS x,
  UNNEST(user_properties) AS y
WHERE
  x.key="user_loc_lat"
  AND y.key="user_loc_lon"
  AND event_name='reservation'
  AND (_TABLE_SUFFIX BETWEEN 'events_20190301'
    AND 'events_20190331')

谁有人知道如何这样做?

非常感谢 !

答案

为什么我不能在WHERE子句中使用“小时”

因为在执行SELECT之前会评估WHERE子句,所以在评估WHERE时,hour尚不可用。如果你想简化你的查询并使用hour - 你可以先在内部SELECT中引入hour字段,然后在外部SELECT中使用hour,如下例所示

#standardSQL
SELECT lat, lon, hour FROM (
SELECT
  x.value.string_value AS lat,
  y.value.string_value AS lon, 
  EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) AS hour
FROM `apps.analytics_185684181.*`,
  UNNEST(user_properties) AS x,
  UNNEST(user_properties) AS y
WHERE x.key="user_loc_lat"
  AND y.key="user_loc_lon"
  AND event_name='reservation'
  AND (_TABLE_SUFFIX BETWEEN 'events_20190301' AND 'events_20190331')
)
WHERE hour BETWEEN 7 AND 9 
OR hour BETWEEN 16 AND 21  
另一答案

我使用带有HOUR部分的EXTRACT Date功能得到了结果。它将以24小时数字(0-23)返回事件时间戳小时。

EXTRACT(part FROM date_expression)

SELECT
  x.value.string_value AS lat,
  y.value.string_value AS lon, EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) AS hour
FROM
  `apps.analytics_185684181.*`,
  UNNEST(user_properties) AS x,
  UNNEST(user_properties) AS y
WHERE EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp))>=7 
AND EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp))<=9 AND 
  x.key="user_loc_lat"
  AND y.key="user_loc_lon"
  AND event_name='reservation'
  AND (_TABLE_SUFFIX BETWEEN 'events_20190301'
    AND 'events_20190331')

但是我不能使用列名称小时和where子句一样

enter image description here

哪个投掷错误无法识别的名称:小时

非常感谢任何修复/建议和改进。

以上是关于SQL BigQuery:选择具有时间基础的查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL BigQuery:选择基于时间的查询

需要 SQL 查询帮助以解析 BigQuery 表中的 JSON 数据

使用具有相对日期范围和标准 SQL 的 Bigquery Table 通配符 [重复]

如何在 BigQuery 中最小化每次 SQL 查询执行的成本

如何在标准 SQL 的 BigQuery 中过滤具有 iso 周值的列?

具有集群和分区的表上的 Bigquery SQL 性能问题