返回首页

gbase数据、南大通用产品文档:GBase8s使用 FIRST 子句选择特定行

更新日期:2024年09月11日

可以在 SELECT 语句的 Projection 子句中包含 FIRST max 规范(其中 max 具有整数值)
来构建查询,
使其仅返回匹配 SELECT 语句条件的最初max 行。

(且仅在)
此上下文中,
也可以使用关键字 LIMIT 作为 FIRST 的同义词。执行具有FIRST 子句的 SELECT 语句
时返回的行可能会不同,这取决于该语句是否还包含 ORDER BY 子句。
在 Projection 子句中,
后面跟无符号整数的关键字 SKIP 可用在 FIRST 或 LIMIT 关键字
前面。
SKIP offset 子句指示数据库服务器在返回 FIRST 子句指定的行数之前,
从查询结果
集中排除最初 offset 行满足条件的行。在 SPL 例程中,SKIP 、FIRST 或 LIMIT 的参数
可以是字面值整数或局部 SPL 变量。如果 Projection 子句包含 SKIP offset 但不包含
FIRST 或 LIMIT 规范,那么查询返回除最初 offset 行以外所有满足条件的行。
Projection 子句在下列上下文中不能包含 SKIP 、FIRST 或 LIMIT 关键字:

当 SELECT 语句是视图定义的一部分

在子查询中,除了外部查询的 FROM 子句

在跨服务器分发的查询中,其中参与的数据库服务器不支持 SKIP 、FIRST 或
LIMIT 关键字。
有关使用 FIRST 子句的限制的信息,请参阅《GBase 8s SQL 指南:语法》中 SELECT 语
句的 Projection 子句的描述。

不具有 ORDER BY 子句的 FIRST 子句
如果具有 FIRST 子句的 SELECT 语句中没有 ORDER BY 子句,那么可能返回符合
SELECT 语句条件的任何行。换言之,数据库服务器确定返回哪些限定行,并且查询结果
可能会不同,这取决于优化器选择的查询计划。
以下查询使用 FIRST 子句来返回 state 表中的前五行。
图: 查询

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 48 -
SELECT FIRST 5 * FROM state;
图: 查询结果
code sname

AK Alaska
HI Hawaii
CA California
OR Oregon
WA Washington
当只想知道表包含的所有列的名称和数据的类型,或者测试可能会返回许多行的查询时,
可以使用 FIRST 子句。以下查询显示了如何使用 FIRST 子句来返回表的第一行的列值。

图: 查询
SELECT FIRST 1 * FROM orders;
图: 查询结果
order_num 1001
order_date 05/20/1998
customer_num 104
ship_instruct express
backlog n
po_num B77836
ship_date 06/01/1998
ship_weight 20.40
ship_charge $10.00
paid_date 07/22/1998

具有 ORDER BY 子句的 FIRST 子句
可以在具有 FIRST 子句的 SELECT 语句中包括 ORDER BY 子句,以返回包含指定列的
最高值或最低值的行。以下查询显示了包含 ORDER BY 子句以(按字母顺序)返回包含
在 state 表中的前五个州的查询。该查询,(除 ORDER BY 子句以外,它与图 1相同)返
回不同于图 1的一组行。
图: 查询
SELECT FIRST 5 * FROM state ORDER BY sname;
图: 查询结果
code sname


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 49 -
AL Alabama
AK Alaska
AZ Arizona
AR Arkansas
CA California
以下查询显示如何在具有 ORDER BY 子句的查询中使用 FIRST 子句来查找 stock 表中
列出的 10 中最贵的商品。
图: 查询
SELECT FIRST 10 description, unit_price
FROM stock ORDER BY unit_price DESC;
图: 查询结果
description unit_price

football $960.00
volleyball $840.00
baseball gloves $800.00
18-spd, assmbld $685.90
irons/wedge $670.00
basketball $600.00
12-spd, assmbld $549.00
10-spd, assmbld $499.99
football $480.00
bicycle brakes $480.00
应用程序可以将 Projection 子句的 SKIP 和 FIRST 关键字与 ORDER BY 子句相结合使
用,以执行连续查询,对某些固定大小(例如,最大行数可在一屏显示,无需滚动)的子
集中所有满足条件的行进行增量检索。通过在每次查询后使用 FIRST 子句的 max 参数增
大 SKIP 子句的 offset 参数值可实现上述操作。通过对满足条件的行施加唯一的命令,
ORDER BY 子句确保每次查询返回满足条件行的不同子集。
以下查询显示了包含 SKIP 、
FIRST 和 ORDER BY 规范以
(按字母顺序)
返回 state 表的
10 个州中的第六个州,而不是前五个州的查询。该查询类似于图 1,但 SKIP 5 规范指示
数据库服务器返回不同于图 1的行集。
图: 查询
SELECT SKIP 5 FIRST 5 * FROM state ORDER BY sname;
图: 查询结果
code sname

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 50 -

CO Colorado
CT Connecticut
DE Delaware
FL Florida
GA Georgia
如果使用 SKIP 、FIRST 和 ORDER BY 关键字,必须指定对应于应用程序设计目标的参
数,如果 SKIP 的 offset 参数大于满足条件的行数,那么任何 FIRST 或 LIMIT 规范都无
效,并且查询不会返回任何结果。

功能说明
执行rebalance instance 命令,将数据重分布到使用freenode 新建的distribution 上。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
304
注意

本次数据重分布将进行实际数据的重分布;

重分布的所需时间需要根据数据量、系统CPU、磁盘、网络等综合情况进
行评估。
操作步骤
步骤1:执行rebalance instance 命令,将数据重分布到新建的distribution
(Distribution=4)上。
$ gccli
GBase client 9.5.3.17.117651. Copyright (c) 2004-2020, GBase.
All Rights
Reserved.
gbase> use vc vc1;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> rebalance instance;
Query OK, 3 rows affected (Elapsed: 00:00:01.20)
gbase> select * from gclusterdb.rebalancing_status;
+------------+---------+------------+----------+----------------------------+-------------------
---------+-----------+------------+----------+---------------+-----------------+
| index_name | db_name | table_name | tmptable | start_time
| end_time
| status
| percentage | priority | host
| distribution_id |
+------------+---------+------------+----------+----------------------------+-------------------
---------+-----------+------------+----------+---------------+-----------------+
| demo.t
| demo
| t
|
| 2020-07-29 18:31:39.332
000 | 2020-07-29 18:31:41.392000 | COMPLETED |
100 |
5
| 172.168.83.11 |
4 |
| demo.ttt
| demo
| ttt
|
| 2020-07-29 18:31:39.33600
0 | 2020-07-29 18:31:41.389000 | COMPLETED |
100 |
5 |

可查询系统目录表,以确定外部表的状态。
每次创建外部表时,GBase 8s 都会更新 sysexternal 和 sysextdfiles 系统目录表。指定外
部格式类型 (fmttype) FIXED 时,将更新 sysextcols 系统目录表。
表 1. 外部表系统目录条目
表名
描述
sysexternal
存储有关每个外部表的信息。
sysextdfiles
存储有关外部表数据文件的信息
sysextcols
存储有关类型为 FIXED 的外部表的信息
请参阅《GBase 8s SQL 指南:参考》以获取更多信息。
创建外部表时,将在 systables 系统目录中插入行;但是,除非在创建外部表时指定了
NUMROWS 子句,否则 nrows(行数)和 npused(所用数据页数)列可能无法精确反映
外部表所用行数和数据页数。
创建外部表时如果没有为 NUMROWS 子句指定值,GBase 8s 就无法确定外部表中的行
数,因为数据位于数据库外的数据文件中。GBase 8s 通过插入较大值 (MAXINT – 1) 来

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 269 -
更新 systables 系统目录中的 nrows 列,并根据 nrows 的值计算所用数据页数。优化器
稍后将使用 npused 和 nrows 中存储的值来确定最有效的执行计划。尽管无需精确指定
NUMROWS 子句,但是指定得越准确,nrows 和 npused 的值就越准确。