BigQuery WORM可以解决更新后的数据问题

时间:2015-06-17 16:40:38

标签: java google-app-engine google-bigquery

几年前使用Google的“电表”示例,我们会:

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

假设我们收到更新的信息(说,校准/破坏仪表等)并放入一个具有相同MeterID和MeterDate的新行,使用窗口函数来获取每个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(读取)”会导致窗口函数返回下一行,还是什么都没有? (然后我们可以使用NaN来表示“已删除”。)

1 个答案:

答案 0 :(得分:1)

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