返回首页

gbase数据、南大通用产品文档:GBase8aINSERT

更新日期:2024年09月11日

语法格式:
INSERT INTO [database_name.]table_name [partition_clause] [col_name_list] VALUES
(...),(...),...

INSERT
INTO
[database_name.]table_name
[partition_clause]
[col_name_list]
SELECT ... FROM [database_name.]table_name ...
partition_clause:

PARTITION (partcol1[=val1] [, partcol2[=val2] ...])
col_name_list:

(col1[,col2 ...])
INSERT 将新行插入到一个已存在的表中。INSERT...VALUES 形式的语句基于明确
的值插入记录行。INSERT ... SELECT 形式的语句从另一个或多个表中选取出值,
并将其插入。
参数说明如下:
table_name:是要被插入数据的表。
col_name_list:指出语句指定的值赋给哪些列。
如果在INSERT...VALUES 或INSERT...SELECT 中没有指定col_name_list,那么所
有列的值必须在VALUES()列表中或由SELECT 提供。
partition_clause: 如果目标表是分区表,则必须使用partition_clause 语法。分区表的
插入分为静态分区INSERT 和动态分区INSERT,见后文详细介绍。
示例1:INSERT INTO...
gbase> CREATE TABLE t0(id int) ENGINE = 'HIVE';
Query OK, 0 rows affected


GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 755
gbase> INSERT INTO t0 VALUES(1),(2),(3),(4),(5),(6),(2),(3),(1);
Query OK, 9 rows affected
Records: 9 Duplicates: 0 Warnings: 0

gbase> SELECT * FROM t0;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 2 |
| 3 |
| 1 |
+------+
9 rows in set


示例2:INSERT INTO...SELECT...
gbase> CREATE TABLE t0(id int) ENGINE = 'HIVE';
Query OK, 0 rows affected

gbase> CREATE TABLE ssbm(lineorder int,name varchar(50)) ENGINE = 'HIVE';
Query OK, 0 rows affected

gbase> INSERT INTO ssbm VALUES(1,'baker'),(2,'hunter'),(3,'carter'),(4,'smith');
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0

gbase> INSERT INTO t0(id) SELECT s.lineorder FROM ssbm s;
Query OK

gbase> SELECT * FROM t0;
+-------+
| id |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 756
+-------+
4 rows in set

示例3:INSERT INTO ... PARTITION(...)
gbase> CREATE TABLE t0(id varchar(64),linked varchar(100)) PARTITIONED BY (dt
varchar(20)) CLUSTERED BY(id) INTO 256 BUCKETS STORED AS ORC ENGINE = 'HIVE';
Query OK, 4 rows affected

gbase> INSERT INTO t0 PARTITION(dt = '2016-03-14') VALUES('gbase','mail.com'),
('hadoop','apache.org') ;
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0

gbase> INSERT INTO t0 PARTITION(dt) VALUES('gbase','mail.com','2016-03-15'),
('hadoop','apache.org','2016-03-16') ;
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0

gbase> SELECT * FROM t0;
+--------+------------+------------+
| id | addr | dt |
+--------+------------+------------+
| gbase | mail.com | 2016-03-14 |
| hadoop | apache.org | 2016-03-14 |
| gbase | mail.com | 2016-03-15 |
| hadoop | apache.org | 2016-03-16 |
+--------+------------+------------+
4 rows in set

列中当被修改的页达到多少百分比时不再强制清除页。
在有些环境下,页清除程序可以在超过特定百分比时继续清除。
如果启用 AUTO_LRU_TUNING 环境变量,则这个值根据需要自动地更
新。
lrus
缺省是 8。如果启用 MULTIPROCESSOR 配置参数,则缺省大于 8 或
CPU VP 的数目。
number_lrus 值是一个正整数,指定缓冲池中 LRU(最近最少使用)
队列的数目。
取值范围依赖于操作系统的位大小:
l 32-bit 平台:8 - 128
l 64-bit 平台:8 - 512
指定 LRU 队列越多,就有越多页清除程序并行工作。然而,设置
lrus 域的值过高,可能导致过度的页清除程序活动。
lrus 域的值与 lru_min_dirty 和 lru_max_dirty 域组合在一起,

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 46 -



控制共享内存缓冲区清空到磁盘的频率。
要了解更多信息,请参阅 BUFFERPOOL 及其对页清除的影响。
max_extend
缺省是 8。
extends 表示数据库服务器可扩展缓冲池的最大次数。extends 的
值时从 0 到段的最大数目,依赖于操作系统和位大小:
l 32 bit = 16
l UNIX 64 bit = 24
l Windows 64 bit = 8
只有设置 buffers 和 extendable=1,max_extend 域才有效。
memory
缺省是 auto。
max_size 表示缓冲池大小的最大值。max_size 取值范围是:
l 一个表示 32
MB
-
4
TB 的整数。您可指定 KB、MB 或 GB 的
大小单位。如果您不指定单位,则缺省单位是 KB。
l auto = 数据库服务器决定分配给缓冲池的共享内存的最大
数量。如果设置,AUTO_TUNE_SERVER_SIZE 配置参数的值
控制缓冲池大小的最大值。
next_extend
缺省是 1000。
number_buffers 值是一个大于等于 1000 的整数,指定数据库服务
器用于扩展缓冲池的共享内存缓冲区数目。number_buffers 的最大
值受虚拟共享内存数量的限制。
每四次扩展,number_buffers 值翻倍。
只有设置 buffers 和 extendable=1,next_extend 域才有效。
size
page_size 值指定缓冲区的页大小,
以 KB 为单位。
页大小必须是 2
-
16
KB 且必须是缺省页大小的倍数。
例如,
如果缺省页大小是 2
KB,
则页大小可是 2、4、6、8、10、12、14 或 16。如果缺省页大小是
4 KB,则页大小可是 4、8、12 或 16。缺省值依赖于系统缺省页大
小:
l 2 KB 缺省页大小:size=2k
l 4 KB 缺省页大小:size=4k
k 是可选的。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 47 -



start_memory
缺省是 32 MB。
start_size 值表示当数据库服务器启动时缓冲池的初始大小:
l 一个表示 32
MB 直到可用共享内存的最大数量的整数。
您可
指定大小单位 KB、MB 或 GB。如果不指定单位,则缺省单
位是 KB。缓冲池的初始大小可以大于 start_size 的值,
因为该大小必须是共享内存段大小的倍数。
l auto = 数据库服务器决定分配给缓冲池的共享内存的初始
数量。
如果您不设置 start_memory 域,则缓冲池的初始大小等于 memory
域的值。
只有设置 memory 域,start_memory 域才有效。

默认情况下,GBase
8s 在安装时会自动根据当前内存大小设置 BUFFERPOOL 值。计算算法
如下:
l
对于 2 KB 缺省页大小的操作系统:
BUFFERPOOL = memorybase * 25000+10000
其中 memorybase =总内存大小/950000。如果计算结果 < 1,则 memorybase = 1
如果 BUFFERPOOL 值的计算结果大于 10000000 则,将其取值为 10000000。
l
对于 16 KB 缺省页大小的操作系统:
BUFFERPOOL = memorybase * 25000
如果 BUFFERPOOL 值的计算结果大于 3000000 则,将其取值为 3000000。
内存格式的缓冲池的大小
如果您使用内存格式,则缺省状态下,缓冲池大小根据需要增长。当平均高速缓存读命中
率低于阈值时,共享内存段添加到缓冲池。您可设置缓冲池的初始大小和大小的最大值,
或允许数据库服务器最优的大小。
如果 extendable 域设置为零,
则缓冲池不增长。
如果设置,
则大小等于 start_memory 域
的值,否则,等于 memory 域的值。
当您重启服务器时,缓冲池的大小重置为 start_memory 域的值。
缓冲区格式的缓冲池大小
如果您使用 buffers 格式,则缺省情况下,缓冲池大小不增长。大小等于 buffers 域的
值。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 48 -

如果您设置 extendable 域为 1,则当平均高速缓存读命中率低于阈值时,共享内存段添
加到缓冲池。您必须在 buffers 域中设置缓冲区的初始数目。您可选择通过设置缓冲区的
数目来扩展缓冲池,以及缓冲池可扩展的最大次数,以及高速缓存命中率。每四次扩展,
添加到缓冲池的缓冲区数目翻倍。
示例:添加一个带 memory 域的 BUFFERPOOL 条目
下列条目创建一个有 10 KB 页大小的缓冲池:
BUFFERPOOL size=10k,start_memory=auto,memory=4gb
缓冲池可扩展到 4 GB。数据库服务器决定缓冲池的初始大小和扩展到缓冲池的大小。
示例:添加一个带有 buffers 域的 BUFFERPOOL 条目
下列条目创建一个有 2 KB 页大小的缓冲池:
BUFFERPOOL
size=2k,extendable=1,buffers=1000,next_buffers=2000,max_extends=8
缓冲池可扩展八次。缓冲池启动时有 1000 个缓冲区。最初三个缓冲池扩展添加 2000 个
缓冲区。第四次到第七次扩展添加 4000 个缓冲区。第八次扩展添加 8000 个缓冲区。
示例:通过添加一个带有不同页大小的 dbspace 来添加一个 BUFFERPOOL 条目
当您用 onspaces 实用程序添加一个带有不同页大小的 dbspace 时,或者当您用
onparams 实用程序添加一个缓冲池时,
在 onconfig 文件中添加一个 BUFFERPOOL 配置参
数条目。下列示例显示一个第三条目:
BUFFERPOOL default,buffers=10000,lrus=8,lru_min_dirty=50.00,lru_max_dirty=60.50
BUFFERPOOL
size=2k,buffers=10000,lrus=8,lru_min_dirty=50,lru_max_dirty=60
BUFFERPOOL size=6k
当您创建一个非缺省页大小的 dbspace 时,如果现有的 BUFFERPOOL 条目存在,则数据库
服务器使用那个条目的页大小。否则,数据库服务器使用来自 BUFFERPOOL 缺省行的值。

可重入触发器指的是其中触发操作可引用触发表的情况。换句话说,也就是触发器事件和
触发操作可作用于同一个表。例如,假设下面的 UPDATE 语句表示触发事件:
UPDATE tab1 SET (col_a, col_b) = (col_a + 1, col_b + 1);
以下触发操作是合法的,因为列 col_c 不是触发事件已更新的列:
UPDATE tab1 SET (col_c) = (col_c + 3);
在前面的示例中,对 col_a 或 col_b 的触发操作可能是非法的,因为触发操作不能是引用触
发事件所更新的列的 UPDATE 语句。
重要: Select 触发器不能是可重入触发器。如果触发事件为 SELECT 语句,那么不能对同一
个表执行触发操作。
有关描述在哪些情况下触发器可为或不可为可重入触发器的规则的列表,
请参阅
《GBase 8s
SQL 指南:语法》中的 CREATE TRIGGER 语句。


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