根据时间戳删除 BQ 中旧的重复行
Remove old duplicate rows in BQ based on timestamp
我有一个 BQ table,其中包含相同 ad_id.
的重复(x2 次)行
我想删除 ts > 120 分钟的旧行,其中有一个具有相同 ad_id 的较新行(架构包含 timestamp, ad_id, value. But there is not rowId
)。
这是我的尝试,有更好的方法吗?
DELETE FROM {table_full_name} o
WHERE timestamp < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 120 MINUTE) AND timestamp in (
SELECT MIN(timestamp)
FROM {table_full_name} i
WHERE i.ad_id=o.ad_id
GROUP BY ad_id)
数据示例:
`ad-id` | `ts` | `value` |
`1` | Sep-1-2021 12:01 | `Scanned` |
`2` | Sep-1-2021 12:02 | `Error` |
`1` | Sep-1-2021 12:03 | `Removed` |
我想将其清理为:
`ad-id` | `ts` | `value` |
`2` | Sep-1-2021 12:02 | `Error` |
`1` | Sep-1-2021 12:03 | `Removed` |
我看到了这个post,但是BQ不支持row-id
的自动递增。
我看到了这个。但是我如何在没有 ts 间隔的情况下修改它(因为它是未知的)。
你可以试试这个脚本。使用 COUNT() with HAVING
使用 TIMESTAMP_DIFF
.
提取时间戳比当前时间早于 120 分钟的重复记录
DELETE
FROM `table_full_name`
WHERE ad_id in (SELECT ad_id
FROM `table_full_name`
GROUP BY ad_id
HAVING COUNT(ad_id) > 1)
AND TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), timestamp, MINUTE) > 120
之前:
之后:
我有一个 BQ table,其中包含相同 ad_id.
的重复(x2 次)行我想删除 ts > 120 分钟的旧行,其中有一个具有相同 ad_id 的较新行(架构包含 timestamp, ad_id, value. But there is not rowId
)。
这是我的尝试,有更好的方法吗?
DELETE FROM {table_full_name} o
WHERE timestamp < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 120 MINUTE) AND timestamp in (
SELECT MIN(timestamp)
FROM {table_full_name} i
WHERE i.ad_id=o.ad_id
GROUP BY ad_id)
数据示例:
`ad-id` | `ts` | `value` |
`1` | Sep-1-2021 12:01 | `Scanned` |
`2` | Sep-1-2021 12:02 | `Error` |
`1` | Sep-1-2021 12:03 | `Removed` |
我想将其清理为:
`ad-id` | `ts` | `value` |
`2` | Sep-1-2021 12:02 | `Error` |
`1` | Sep-1-2021 12:03 | `Removed` |
我看到了这个post,但是BQ不支持row-id
的自动递增。
我看到了这个
你可以试试这个脚本。使用 COUNT() with HAVING
使用 TIMESTAMP_DIFF
.
DELETE
FROM `table_full_name`
WHERE ad_id in (SELECT ad_id
FROM `table_full_name`
GROUP BY ad_id
HAVING COUNT(ad_id) > 1)
AND TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), timestamp, MINUTE) > 120
之前:
之后: