【问题标题】:How to Calculate avg no of records added per day in BigQuery.?如何计算 BigQuery 中每天添加的平均记录数。?
【发布时间】:2019-11-19 11:53:28
【问题描述】:

我在BigQuery 中有一个表,其中有一列Published_date 的数据类型为“时间戳”。我想计算该表中每天(特定月份)添加的平均行数。我有以下查询

SELECT AVG(Num_Rows) 
FROM (SELECT [Day]=DAY( Published_Date ), Num_Rows=COUNT(*)
FROM `mytable`
WHERE Published_Date BETWEEN '20190729' AND '20190729 '
GROUP BY DAY( Published_Date ) ) AS Z

但它会产生以下错误

无法将文字“20190729”转换为类型 TIMESTAMP

我应该如何处理时间戳,因为我只需要 timestamp 列中的日期?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    我想计算该表中每天(特定月份)添加的平均行数

    以下 BigQuery 标准 SQL 示例

    #standardSQL
    SELECT AVG(Num_Rows) AS avg_rows_per_day
    FROM (
      SELECT DATE(Published_Date) AS day, COUNT(*) AS Num_Rows
      FROM `project.dataset.mytable`
      WHERE DATE(Published_Date) BETWEEN '2019-07-01' AND '2019-07-31'
      GROUP BY day
    ) 
    

    【讨论】:

      【解决方案2】:

      使用显式转换:

      WHERE Published_Date BETWEEN TIMESTAMP('2019-07-29') AND TIMESTAMP('2019-07-29')
      

      请注意,您有一个名为“_date”的列,但错误是该值是时间戳。我觉得这很混乱。我们在timestamps 列中使用_ts 的约定(_dt 用于datetime_date 用于date)。

      为什么这很重要?时间戳为 UTC。因此,您可能需要注意时区和时间组件——这在名为 Publish_Date 的列中并不明显。

      【讨论】:

      • 谢谢你......但是我将如何按天分组?......我使用了你提到的显式转换,但现在它产生以下错误......“无法识别的名称:Day”在第 2 行我的查询..我应该如何处理它?
      • "2019-10-21 17:31:00 UTC" 列值的样子....我应该如何按天分组?因为我想要特定月份每天添加的平均行数......
      • @MuhammadAqeel 。 . .使用DATE() 而不是DAY()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多