用于更新数据的 BigQuery WORM 解决方法

BigQuery WORM work-around for updated data

使用几年前 Google 的 "electric meter" 示例,我们将有:

MeterID (Datastore Key) | MeterDate (Date) | ReceivedDate (Date) | Reading (double)

假设我们收到了更新的信息(比如,calibration/busted 仪表等)并使用相同的 MeterID 和 MeterDate 放入新行,使用 Window 函数获取最新接收到的信息如果该对有多个记录,则每个 ID+MeterDate 对的日期只会花费更多,对吗?

遗憾的是,我们在没有 SQL 专家的情况下飞行,但查询似乎应该如下所示:

SELECT 
  meterDate,
  NTH_VALUE(reading, 1) OVER (PARTITION BY meterDate ORDER BY receivedDate DESC) AS reading
FROM [BogusBQ:TableID]
WHERE meterID = {ID} 
  AND meterDate BETWEEN {startDate} AND {endDate}

我是不是漏掉了其他重要的东西?添加 'AND NOT IS_NAN(reading)' 会导致 Window 函数到 return 下一行,还是什么都没有? (那么我们可以用NaN来表示"deleted"。)

你的 SQL 看起来不错。几个建议: - 我会使用 FIRST_VALUE 更明确一点,但除此之外应该可以工作。 - 如果可以 - 使用 NULL 而不是 NaN。或者更好的是,添加新的 BOOLEAN 列来标记已删除的行。