返回首页

gbase数据、南大通用产品文档:GBase8aCREATE 8a TABLE

更新日期:2024年09月11日

GBase UP 通过CREATE TABLE 语句可以创建8a 引擎的表格,
CREATE TABLE 以
用户给定的名字在当前数据库创建一个表。用户必须有创建表的权限。
语法格式
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [database_name.]table_name
(column_definition [,column_definition], ... [, key_options])
[table_options]
[NOCOPIES];
column_definition:
column_name data_type [NOT NULL
| NULL] [DEFAULT default_value] [COMMENT
comment_value] [URI]
key_options:
KEY key_name ('column_name') [key_dc_size = dc_value USING HASH GLOBAL]
table_options:
[REPLICATED | DISTRIBUTED BY ('column_name') ]
[COMMENT 'comment_value']
参数说明

TEMPORARY:该参数为可选参数,创建临时表需要使用此关键字。临时表的
创建请参见“5.4.7.2.1.3 CREATE TEMPORARY TABLE”的内容。

IF NOT EXISTS:该参数为可选参数,
用户可以使用关键字IF NOT EXISTS 创
建表,如果表已经存在,系统将报告WARNING 信息。

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

database_name:该参数为可选参数,指定数据库后,在此数据库下创建表。如
果没有显示指定database_name 参数,创建的表隶属于USE database_name 后
的数据中的表。

table_name:表命名规则请参见
“5.8.1.1 数据库、
表、
列和别名”

默认情况下,
在当前数据库中创建表。如果没有指定当前数据库或表已经存在,则报告错误
信息。

column_name:指定表中的数据列。

data_type:指定数据列的数据类型。数据类型参见“错误!未找到引用源。 数
据类型”中的内容。

NOT NULL | NULL:指定数据列的值,是否允许为NULL。如果既没有指定
NULL 也没有指定NOT NULL,列被视为指定了NULL。

default_value:指定数据列的默认值。默认值必须是一个常数,而不能是一个
函数或者一个表达式。举例来说,用户不能将一个数据列的默认值设置为
NOW()或者CURRENT_DATE()之类的函数。对于给定的一个表,可以使用
SHOW CREATE TABLE 语句来查看哪些列有显式DEFAULT 子句。

comment_value:指定数据列的备注说明。例如:stu_no id COMMENT '学号'。


key_options:指定表中的hash 列。同时可以使用key_dc_size 参数指定创建分段
Hash INDEX。
表 5-1 dc_value 值
最小值
最大值
备注
0
2147483646
默认为0(即在整列上创建HASH)

table_options:默认为随机分布表。

REPLICATED:指定是否是复制表。

在创建一个表时,
用户可以使用关键词REPLICATED 来指定是否创建复制表。
如果指定了关键词REPLICATED,那么创建的复制表在GBase UP 的各个节点
上存放的是完整数据。
注意:复制表表名尾部不允许是_n{number}编号,例如,mytable_n1,
mytable_n12 是不允许使用的。

DISTRIBUTED BY column_name:
指定创建表中的物理列column_name 是哈希
列,这样创建的表,称为哈希分布表。哈希列必须是INT 或者VARCHAR 类
型。

key_dc_size = dc_value USING HASH GLOBAL:
配合DISTRIBUTED BY 使用,
指定分段HASH 列,同时创建多个分段HASH 列。

COMMENT:指定表的备注说明。可以用SHOW CREATE TABLE table_name
和SHOW FULL COLUMNS FROM table_name 语句来显示备注信息。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 607
示例
示例1:创建一张随机分布表。
gbase> CREATE TABLE t1(a int, b int) ;
Query OK, 1 row affected
示例2:创建一张复制表。
gbase> CREATE TABLE t2(a int, b int) REPLICATED;
Query OK, 1 row affected
gbase> SHOW CREATE TABLE t2;
+-------+-----------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------+
| t2 | CREATE TABLE "t2" (
"a" int(11) DEFAULT NULL,
"b" int(11) DEFAULT NULL
) ENGINE=EXPRESS REPLICATED DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'|
+-------+-----------------------------------------------------------------+
1 row in set
gbase> DESC t2;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| b | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set
示例3:创建带有列注释信息的表。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 608
gbase> CREATE TABLE t1 (f_username varchar(10) comment 'name' ) ;
Query OK, 0 rows affected
gbase> DESC t1;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| f_username | varchar(10) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
1 row in set
gbase> SHOW CREATE TABLE t1;
+-------+--------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------+
| t1 | CREATE TABLE "t1" (
"f_username" varchar(10) DEFAULT NULL COMMENT 'name'
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'|
+-------+--------------------------------------------------------+
1 row in set

在8.6.11.0 版本中增加了Oracle 源的一张表对多张表的增量同步。此功
能可以将同一张源表中的指定列的数据分发到多张目标表中。多源端对多目标
端增量同步也可以实现该功能,但是多个数据源会分多次进行数据挖掘。
下面通过示例进行说明:
同步环境信息如下:
源数据库信息:IP 为192.168.5.6;数据库用户名为test,密码为test;
Schema 为TEST。需要注意的是,Oracle 数据在建表时需要指定小写的表名及
列名,即在建表语句中用双引号包围小写的表名及列名。
源表为T1,
目标表分别为t1 和t2。
T1 同步到t1 时,
只同步COL1 和COL3
列到t1 的a 列和c 列中; T1 同步到t2 时,只同步COL1 和COL2 列到t2 的a
列和b 列中。

GBase RTSync 同步工具手册
南大通用数据技术股份有限公司
- 155 -
config_task.xml 配置如下:


...

...

sourcePkColName="" targetTableName="t1" targetPkColName="" >




...


...

sourcePkColName="" targetTableName="t2" targetPkColName="" >




...

...

需要注意的是,这里与多源端到多目标端同步的配置不同,多个
source-target 中的id 不同但是groupName 必须一致。groupName 相同的数据
源中的配置也必须相同。

库级别增量同步要求源数据库与目标数据库下的所有表的表名及列名完全
一致。如果有部分表不需要同步,可以使用排除表功能排除掉这些表。
在目标库为GBase 8t 数据库时,同步工具支持断点续传。为了保证断点续
传功能,同步工具在目标库中创建了table_lsn 表用于保存lsn 信息。该表会
导致源库与目标库中的表个数不一致,因此,在库级同步时,需要目标端配置
排除table_lsn 表。如果不需要排除表,可以删除配置文件中的tables 标签。
下面按照步骤详细介绍:
修改任务文件config_task.xml,该文件在读端,写端,管理端各有一份,

GBase RTSync 同步工具手册
- 110 -
南大通用数据技术股份有限公司
如果同步工具安装后再修改该文件请确保三处配置文件一致。


id="server1"
mqType="kafka" queueName="8ttooraMQ" dataRecoveryMode="auto"
isHighAvailable="false">
httpPort="8080" isTableHotPatch="true"/>
readParseAdapter="adapter" user="root" password="root" queueSize="10000"
openMonitor="true" monitorInterval="300" rpcPort="9191" sshPort="22"/>
writeDataAdapter="adapter" user="root" password="root"
errorishandle="true" sendDataBySocket="false" sshPort="22" rpcPort="9191"
monitorInterval="300"/>

id="ora_8t_5.1_5.2">

charset="utf8"
type="GBASE8T"
startLSN="0"
fetchSize="500"
oracleScnStep="50000"
timestampWithFraction="false"
maxRecordsPerRead="200"
maxSizeOfPerRecord="1024"
timeOut="1"
driver="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://192.168.5.4:31267/syscdcv1:informixserver=
ol_informix1210"
user="informix"
password="1"
catalog="testdb">


GBase RTSync 同步工具手册
南大通用数据技术股份有限公司
- 111 -
charset="UTF8"
type="ORACLE"
commitSize="100"
queueSize="20000"
user="test"
password="test"
driver="oracle.jdbc.driver.OracleDriver"
catalog="TEST"
timeOut="2"
url="jdbc:oracle:thin:test/test@//192.168.5.6:1521/orcl"
>




sourcePkColName="" targetTableName="" targetPkColName="" />

sourcePkColName="" targetTableName="T2" targetPkColName="" />

sourcePkColName="" targetTableName="TABLE_LSN" targetPkColName="" />






修改消息队列配置文件:config_kafka_8ttooraMQ.properties。

GBase RTSync 同步工具手册
- 112 -
南大通用数据技术股份有限公司
#kafka 主题
topic.name=8ttoora
#producer conf
#kafka集群ip及服务端口
bootstrap.servers=192.168.5.11:9092,192.168.5.12:9092
#批量发送数据到kafka的批次数
kafka.batch.commit.count=400
#批量发送数据到kafka等待的超时时间,单位毫秒
kafka.batch.commit.time=100
#kafka 发送数据到kafka异常重发的次数,超过该次数仍然未成功同步工具将退出服务
kafka.resend.max.retries=3
#kafka 接收数据的应答机制。
0代表立即返回,
无论数据是否成功写入kafka;1代表leader
节点成功写入磁盘后才返回结果;all代表所有节点都要写入磁盘才返回结果。根据数据安
全性要求可以实际配置。
kafka.acks=all
#kafka生产者其他必要参数配置,参数信息为标准的kafka生产者参数。
kafka.producer.paramers=request.timeout.ms=30000;metadata.fetch.timeout.
ms=30000
#consumer conf
#kafka所使用zookeeper信息
zookeeper.connect=192.168.5.21:2181,192.168.5.22:2181,192.168.5.23:2181
#kafka消费者组名称
group.id=test
#自动提交时间间隔,一般不用修改
auto.commit.interval.ms=1000
#zookeeper follower能落后leader多久还被认为是活着的
zookeeper.sync.time.ms=2000
#zookeeper session超时时间,如果这段时间没有收到zk的心跳,则认为kafka服务异常
zookeeper.session.timeout.ms=4000
#发送数据到kafka单条数据的最大值,单位字节,超过该大小经进行分包发送
send.data.max.size=1000000
#从kafka获取单条数据的最大值,单位字节,该值应该大于等于send.data.max.size
fetch.message.max.bytes=1000000
完成后,既可启动同步工具。使用root 用户登录192.168.5.3,执行如下
命令启动同步工具组件:

GBase RTSync 同步工具手册
南大通用数据技术股份有限公司
- 113 -
# cd /opt/RTSync /
# sh RTSyncManagerServer.sh start
启动后,同步工具将开始同步数据工作。
可以使用如下命令监控同步工具运行状况。
# tail -f logs/sync.log