Google BigQuery:检索每行的最后版本

2024-05-05

我有一个 Google BigQuery 表,其中包含所有版本的资源。每次创建/更新/删除资源时,都会添加一个新行,并递增版本号(该数字将是添加行时的时间戳)

+-------+------------+--------+-------+-------------+
|  ID   | ResourceID | Action | Count |  Timestamp  |
+-------+------------+--------+-------+-------------+
| ABC_1 | ABC        | CREATE |    10 | {timestamp} |
| ABC_2 | ABC        | UPDATE |     8 | {timestamp} |
| ABC_3 | ABC        | UPDATE |     4 | {timestamp} |
| ABC_4 | ABC        | DELETE |     4 | {timestamp} |
| -     |            |        |       |             |
| DEF_1 | DEF        | CREATE |    10 | {timestamp} |
| DEF_2 | DEF        | DELETE |    10 | {timestamp} |
| -     |            |        |       |             |
| GHJ_1 | GHJ        | CREATE |    10 | {timestamp} |
| -     |            |        |       |             |
| KLM_1 | KLM        | CREATE |    10 | {timestamp} |
| KLM_2 | KLM        | UPDATE |     5 | {timestamp} |
+-------+------------+--------+-------+-------------+
  • ID:行的唯一ID,包含ResourceID加上版本标识符
  • 资源ID:发生操作的资源的 ID
  • Action:对资源发生的操作
  • Count:与资源关联的值
  • 时间戳:添加行时的时间戳(与附加到唯一 ID 的时间戳相同)

我需要编写一个查询来检索每个资源的所有最新版本

+-------+------------+--------+-------+-------------+
|  ID   | ResourceID | Action | Count |  Timestamp  |
+-------+------------+--------+-------+-------------+
| ABC_4 | ABC        | DELETE |     4 | {timestamp} |
| DEF_2 | DEF        | DELETE |    10 | {timestamp} |
| GHJ_1 | GHJ        | CREATE |    10 | {timestamp} |
| KLM_2 | KLM        | UPDATE |     5 | {timestamp} |
+-------+------------+--------+-------+-------------+

此外,所有资源都在DELETE状态,需要忽略。 所以这是我正在寻找的最终输出

+-------+------------+--------+-------+-------------+
|  ID   | ResourceID | Action | Count |  Timestamp  |
+-------+------------+--------+-------+-------------+
| GHJ_1 | GHJ        | CREATE |    10 | {timestamp} |
| KLM_2 | KLM        | UPDATE |     5 | {timestamp} |
+-------+------------+--------+-------+-------------+

这是我提出的查询

SELECT ResourceId, Count
FROM worklog_*
WHERE ID IN (
    SELECT max(ID)
    FROM worklog_*
    GROUP BY WorklogID
) AND Action != DELETE

它不是真正的 BigQuery 查询,但足以理解其行为。 如果可以比较 ID 列的值,这个查询就可以正常工作,这就是为什么我选择加入 ResourceId 和 Timestamp,MAX()value 将始终提供最后的状态

这是最好的方法吗?有人对进行这种提取的更好方法有建议吗?


对于 BigQuery 标准 SQL

#standardSQL
WITH worklog AS (
  SELECT 'ABC_1' AS ID, 'ABC' AS ResourceID, 'CREATE' AS Action, 10 AS COUNT UNION ALL
  SELECT 'ABC_2', 'ABC', 'UPDATE', 8 UNION ALL
  SELECT 'ABC_3', 'ABC', 'UPDATE', 4 UNION ALL
  SELECT 'ABC_4', 'ABC', 'DELETE', 4 UNION ALL
  SELECT 'DEF_1', 'DEF', 'CREATE', 10 UNION ALL
  SELECT 'DEF_2', 'DEF', 'DELETE', 10 UNION ALL
  SELECT 'GHJ_1', 'GHJ', 'CREATE', 10 UNION ALL
  SELECT 'KLM_1', 'KLM', 'CREATE', 10 UNION ALL
  SELECT 'KLM_2', 'KLM', 'UPDATE', 5 
)
SELECT * EXCEPT(Last)
FROM (
  SELECT *,
    ROW_NUMBER() OVER(PARTITION BY ResourceID ORDER BY ID DESC) AS Last
  FROM worklog
  WHERE Action != 'DELETE'
)
WHERE Last = 1
-- ORDER BY ID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google BigQuery:检索每行的最后版本 的相关文章

随机推荐

  • 如何在 Rails 中每天缓存一个值?

    在 Rails 中每天缓存一个值的最佳方法是什么 我有一个可通过 API 访问的数据库调用 我想每天制作并存储它 做到这一点的最佳方法 做法是什么 假设你有一个widget price您只想每 24 小时更新一次 通常你使用Widget c
  • 从 Dockerfile 写入 docker 卷不起作用

    请考虑以下 Dockerfile FROM phusion baseimage VOLUME data RUN touch data HELLO RUN ls ls data 问题 data 目录不包含 HELLO 文件 此外 任何其他写入
  • 为什么 Redshift 不需要物化视图或索引?

    In the 红移常见问题解答 https aws amazon com redshift faqs under 问 与大多数用于数据仓储和分析的传统数据库相比 Amazon Redshift 的性能如何 它说如下 高级压缩 列式数据存储比
  • Python,将CSV文件转换为SQL表

    我有一个没有标题的 CSV 文件 并尝试从文件中的某些列创建 SQL 表 我尝试了这里给出的解决方案 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2
  • 使用 AspectJ LTW 允许 spring 代理功能自调用非公共方法及相关注意事项

    我见过很多与 Spring 相关的功能示例 Cacheable Transactional Async等等 每次都会重复相同的选项 通过代理对象进行的自调用通过以下任一方式获得ApplicationContext getBean MySer
  • python 2.7 字符 \u2013 [重复]

    这个问题在这里已经有答案了 我有以下代码 coding utf 8 print u William Burges 1827 81 was an English architect and designer 当我尝试从cmd运行它时 我收到以
  • 如何转到材料日历视图中选定的日期?

    我在用着材料日历视图 https github com prolificinteractive material calendarview在我的项目中 我可以使用 setSelectedDate 方法更改日期的选择 我有一个 今天选择 按钮
  • 全局主题目录的 iis 快速路径

    我正在使用 Visual Studio 2010 SP1 ASP NET Webforms Framework NET 3 5 和IIS 快递 也称为 WebMatrix 我在 Visual Studio 中使用我的网站收到以下编译错误 T
  • 当模式在范围内时使用 sed 打印范围?

    我有一个充满查询的日志文件 我只想查看有错误的查询 日志条目类似于 path to file executing query QUERY SIZE ROWS MSG DURATION 我想打印所有这些东西 但只有当MSG 包含一些有趣的内容
  • 在 C# 整数运算中,a/b/c 是否始终等于 a/(b*c)?

    设a b和c为非大正整数 对于 C 整数算术 a b c 是否始终等于 a b c 对我来说 在 C 中它看起来像 int a 5126 b 76 c 14 int x1 a b c int x2 a b c 所以我的问题是 x1 x2对于
  • GWT 和 Web 服务 (wsdl)

    谁能告诉我一种从 GWT 客户端访问 WSDL Web 服务的方法 这可能吗 Thanks 智能网关 http www smartclient com product index jsp支持 WSDL 数据源 除此之外 您始终可以将 WSD
  • JavaScript 和数据库连接

    javascript可以直接访问数据库吗 我觉得我的问题是反问 因为这是一个安全问题 但这有可能吗 有可能的 有了新的html5功能 js可以通过WebSql连接 一个活生生的例子 http html5demos com database
  • 仅打印 drupal field_view_field 值

    我使用下面的代码将节点字段打印到特定区域 效果很好 但有一个例子 我只想打印没有标签的字段值 看起来应该很容易 但我遇到了一些麻烦 我很感激任何帮助 因为我对 drupal 还很陌生 谢谢 field view value 需要一个 dis
  • c# 如何在注册表中写入十六进制值,而不是十进制值?

    如何在注册表中写入 DWORD 十六进制值 而不是像此代码示例中那样的十进制值 RegistryKey key Registry LocalMachine key klase CreateSubKey SYSTEM CurrentContr
  • 是使用多个数据库各有一个架构更好,还是一个数据库有多个架构更好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 After 这条评论 https stackoverflow com questions 1130555 postgresql pitr bac
  • 如何使用 django-haystack 和 elasticsearch 后端进行模糊搜索?

    看起来好像elasticsearch支持模糊查询 http www elasticsearch org guide reference query dsl fuzzy query http www elasticsearch org gui
  • 使用 TFS 2010 的团队是否需要 Active Directory?

    我是 TFS 2010 的新手 希望在一个由 2 3 名远程人员组成的团队的小型项目中公平地尝试一下 是否要求我的所有团队用户都属于 Active Directory 网络设置 或者我可以让我的团队成员松散耦合并能够使用用户名 密码登录吗
  • Android SDK 缺少命令行工具

    我已经安装了flutter但当我跑步时flutter doctor为了验证安装 我得到 Android SDK is missing command line tools 我已经仔细检查了命令行是否已安装 我需要做什么才能消除此错误 我已经
  • 垂直滚动不适用于 Mobile Safari

    由于某些原因 当我在移动 Safari iOS 9 1 iPhone 5 Safari 8 1 上访问我的网站时 垂直滚动无法正常工作 https sleepy anchorage 3222 herokuapp com https slee
  • Google BigQuery:检索每行的最后版本

    我有一个 Google BigQuery 表 其中包含所有版本的资源 每次创建 更新 删除资源时 都会添加一个新行 并递增版本号 该数字将是添加行时的时间戳 ID ResourceID Action Count Timestamp ABC