繁体   English   中英

如何在 Amazon QLDB 中根据年份获取所有记录

[英]How to fetch all records based on year in Amazon QLDB

我需要根据给定的年份从亚马逊 QLDB 中获取所有记录。

这是我在收入表中的数据。

{
  ownerId: "u102john2021",
  transactionId: "tran010101010101",
  timeStamp: 2021-06-11T19:31:31.000Z
}
{
   ownerId: "u102john2021",
      transactionId: "tran010101010101",
      timeStamp: 2020-06-11T19:31:31.000Z
    }

如果我过了 2020 年,我想选择相关记录。

我怎样才能写一个选择查询呢?

要立即回答您的问题,根据 timeStamp 字段的 ION 数据类型,有几种方法可以实现您的目标。

1/ 如果数据类型是时间戳类型,即

{
    'ownerId' : 'A',
    'transactionId' : 't1',
    'timeStamp' : `2021-06-11T19:31:31.000Z`
},
{
    'ownerId' : 'B',
    'transactionId' : 't2',
    'timeStamp' : `2020-06-11T19:31:31.000Z`
}

您可以使用WHERE子句来设置SELECT语句的边界,即

SELECT * FROM revenues WHERE "timeStamp" < `2021T` AND "timeStamp" >= `2020T`

请注意,我已将 timeStamp 字段放在双引号中,因为它是一个保留关键字: https ://docs.aws.amazon.com/qldb/latest/developerguide/ql-reference.reserved.html。

2/ 如果数据类型是字符串类型即

{
    'ownerId' : 'C',
    'transactionId' : 't3',
    'timeStamp' : '2021-06-11T19:31:31.000Z'
},
{
    'ownerId' : 'D',
    'transactionId' : 't4',
    'timeStamp' : '2020-06-11T19:31:31.000Z'
}

您可以使用带有LIKE运算符的WHERE子句来匹配模式,即

SELECT * FROM revenues WHERE "timeStamp" LIKE "2020%"

我想提一下,尽管这些查询会达到您想要的效果,但它们并未针对 QLDB 进行优化,并且随着数据集大小的增长,会出现查询延迟、事务超时等形式的重大性能问题,和并发冲突。 这样做的原因是 QLDB 执行全表扫描,除非提供了对索引字段进行相等检查的谓词,例如

SELECT * FROM revenues WHERE "timeStamp" = `2021-06-11T19:31:31.000Z`

扫描查询面临着随着必须检查的数据量增加而增加的高延迟。 提供的查询将导致扫描以确定要返回的适合范围的正确文档。

随着延迟的增加,另一个必须考虑的方面是 30 秒的 QLDB 事务超时。 QLDB 中的所有查询都是具有可序列化隔离的事务,包括SELECT语句。 随着扫描延迟随着数据集的增加而增加,不可避免地会触发事务超时并且查询会出错。

理想情况下,您应该运行带有WHERE谓词子句的语句,该子句过滤索引字段或文档 ID。 有关 QLDB 最佳查询的更多信息,请参阅: https ://docs.aws.amazon.com/qldb/latest/developerguide/working.optimize.html。

为了运行上述提供的此类扫描,我们建议将数据流式传输到您选择的专门构建的数据库服务,该服务针对分析用例进行了优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM