当前位置: 首页 > 知识库问答 >
问题:

如何从tarantool中选择有限数量的记录,如SQL中的SELECT LIMIT?

臧彭亮
2023-03-14

我想在Tarantool空间上执行选择,使用过滤和限制结果,就像我可以使用一个简单的SQL查询一样,比如"SELECT*OF用户WHERE age


共有1个答案

司寇旺
2023-03-14

它可以使用Lua和SQL来完成。

1) 下面是Lua中的一个示例。假设我们有一个名为“users”的空间,其中包含“name”、“姓氏”、“age”字段。首先,让我们创建并填充空间:

$ tarantool
Tarantool 2.1.1-465-gbd1a43fbc
type 'help' for interactive help
tarantool> box.cfg({})
...
2019-06-10 14:51:33.827 [47393] main/102/interactive I> ready to accept requests
...
2019-06-10 14:51:33.827 [47393] main/104/checkpoint_daemon I> scheduled next checkpoint for Mon Jun 10 16:14:44 2019
---
...

tarantool> s = box.schema.space.create('users', {temporary=true})
---
...

tarantool> box.space.users:format({{'id','unsigned'},{'name','string'},{'surname','string'},{'age','unsigned'}})
---
...

tarantool> s:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
---
- unique: true
  parts:
  - type: unsigned
    is_nullable: false
    fieldno: 1
  id: 0
  space_id: 512
  name: primary
  type: TREE
...

tarantool> s:insert({1,'Pasha','Yudin',33})
---
- [1, 'Pasha', 'Yudin', 33]
...

tarantool> s:insert({3,'Kostya','Nazarov',34})
---
- [2, 'Kostya', 'Nazarov', 34]
...

tarantool> s:insert({2,'Oleg','Babin',23})
---
- [3, 'Oleg', 'Babin', 23]
...

tarantool> s:insert({4,'Roma','Babaev',34})
---
- [4, 'Roma', 'Babaev', 34]
...

让我们从空间中选择所有记录:

tarantool> s:select()
---
- - [1, 'Pasha', 'Yudin', 33]
  - [2, 'Kostya', 'Nazarov', 23]
  - [3, 'Oleg', 'Babin', 34]
  - [4, 'Roma', 'Babaev', 34]
...

接下来,让我们选择所有年龄超过33岁的用户。卢浮宫图书馆可用于:

tarantool> fun = require('fun')
---
...

tarantool> fun.iter(s:select()):filter(function (tuple) return tuple.age > 33 end):totable()
---
- - [3, 'Oleg', 'Babin', 34]
  - [4, 'Roma', 'Babaev', 34]
...

但正如@AlexanderTurenko在下面提到的,最好使用迭代器,以避免将额外的元组加载到内存中:

tarantool> s:pairs():filter(function (tuple) return tuple.age > 33 end):totable()
---
- - [3, 'Oleg', 'Babin', 34]
  - [4, 'Roma', 'Babaev', 34]
...

此外,此变体更短,可读性更强。

最后,让我们只选择一个符合条件的用户,这相当于SQL查询“select*FROM users WHERE age”

tarantool> s:pairs():filter(function (tuple) return tuple.age > 33 end):take_n(1):totable()
---
- - [3, 'Oleg', 'Babin', 34]
...

2)从Tarantool 2.0开始,可以使用SQL(前提是您有空间格式):

box.execute('select * from users where age > 33 limit 1;')

 类似资料:
  • 本文向大家介绍如何从MySQL数据库中选择随机记录?,包括了如何从MySQL数据库中选择随机记录?的使用技巧和注意事项,需要的朋友参考一下 为此,您可以使用ORDER BY RAND LIMIT。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是从MySQL数据库中选择随机记录的查询- 这将产生以下输出-

  • 问题内容: 假设我有两个表,“父母”和“孩子”。父子关系是一个多对多关系,可通过标准的交叉引用表来实现。 我想查找使用SQL(特别是MS SQL Server的T-SQL; 2005语法可以接受)的给定子集的所有成员所引用的所有Parent记录。 例如,假设我有: List item Parent Alice Parent Bob Child Charlie references Alice, B

  • 问题内容: 请考虑下表: 实际上,该表具有600,000条记录,但是如示例表中所示,某些已被删除(因此最高的> 600,000)。 可以是,或。 我需要 随机选择 1200条Tweet,每条400条。这可能与一个查询有关吗? 问题答案: 如果(3)的可能值数量有限,则可以通过一组各自具有和的查询轻松完成此操作: 为了将应用于每个组,必须将组括在中。

  • 问题内容: 有没有一种方法可以选择特定数量的行而不创建表。例如,如果我使用以下内容: 它将给我10个,我想要10个新行。 谢谢 问题答案: 您可以使用递归CTE在T- SQL中生成任意数字序列,如下所示:

  • 问题内容: 在MongoDB中,执行类似的操作将返回集合中的所有文档。 当使用包 **labix.org/v2/mgo** 在GoLang中工作时,例如,我这样做: 它抱怨它需要以接口形式输入。我需要做的就是检索所有文档并遍历它们,并立即显示每个文档。如何达到此效果?我所看到的所有示例似乎都已安装了过滤器。 问题答案: 找到了解决方案:

  • 问题内容: 我将对各种rpc调用的响应存储在具有以下字段的mysql表中: 为和的所有现有组合选择最新响应的最佳方法是什么? 对于每个日期,对于给定的方法/ ID,只能有一个响应。 并非所有呼叫组合在给定日期都必须存在。 有数十种方法,数千个ID和至少365个不同的日期 样本数据: 所需结果: (我不认为这是同一个问题-它不会给我最新的信息) 问题答案: 自我回答,但是随着表的增长,我不确定这是否