返回首页

gbase数据、南大通用产品文档:GBase8a使用通配符加载S3 服务器文件

更新日期:2024年09月11日

以文本方式加载位于S3 服务器上的一组文件,使用默认行分隔符和默认列分隔
符,使用通配符方式加载。
示例
LOAD DATA INFILE
's3n://GPCQN6HKP2BI3N6NKZGY:Nkf5ad6WD2MbWF6F6GDobB8N
udwC58ist%2FJNJwY0@127.0.0.1:9050/us-east-1/loaddata/test/*.tbl' INTO
TABLE test.t;

指定转义标识符
示例
示例1:指定单个转义标识符为“c”。
示例中所用的表及数据:
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(20) DEFAULT
NULL);
INSERT INTO gs values(1,'qwer'),(2,'asdf');
导出SQL 语句:
gbase> SELECT * FROM gs INTO OUTFILE '/home/gbase/temp/gs_e.txt'
FIELDS ESCAPED BY 'c';
Query OK, 2 rows affected
查看导出文件:
$ cat gs_e.txt
1
qwer
2
asdf
示例2:指定转义标识符为多个字符时报错。
示例中所用的表及数据:

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1233
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(20) DEFAULT
NULL);
INSERT INTO gs values(1,'qwer'),(2,'asdf');
导出SQL 语句:
gbase> SELECT * FROM gs INTO OUTFILE '/home/gbase/temp/gs_e.txt'
FIELDS ESCAPED BY '6c@#';
ERROR 1149 (42000): FIELDS ESCAPED STRING must be only one character

功能说明
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列
之间的关系来描述。通过每个节点的父节点,就可以确定整个树的结构。在
SELECT 命令中使用START WITH...CONNECT BY 可以查询表中的树形结构关
系。
分层查询通过CONNECT BY 进行递归,
若探测到cycle,
GBase 8a MPP Cluster
默认会报错退出;
若用户指定NOCYCLE,
GBase 8a MPP Cluster 会返回发生cycle
之前的已查询记录。
语法格式
START WITH...CONNECT BY 语法形式:

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1087
SELECT column_list|[LEVEL]
FROM [[vc_name.]database_name.]single_table
[WHERE …]
[hierarchical_clause]
[GROUP BY …]
[ORDER [SIBLINGS] BY …]
hierarchical_clause :
[START WITH ] CONNECT BY
| CONNECT BY [START WITH ]
[ORDER SIBLINGS BY {col_name | expr | position} [ASC | DESC] , ...]
connect_condition:
PRIOR expr1 op expr2
| expr1 op PRIOR expr2
| expr op connect_condition
| expr
表5- 102 参数说明
参数名称


LEVEL
伪列,由GBase 8a MPP Cluster 自动维
护;用于标识分层查询结果所在层级,
从1 开始。
START WITH

START WITH 后面的condition 标识分
层查询的所有root rows,
START WITH
子句可以省略。
CONNECT BY

CONNECT BY 后面的condition 标识
parent row 和child row 之间的连接
condition;condition 中的表达式中需要
通过PRIOR 指定该表达式涉及的列出
自parent row 还是child row。如:
... PRIOR expr_left = expr_right
//左表
达式中涉及的列出自parent row;
... expr_left = PRIOR expr_right
//右表
达式中涉及的列出自parent row;
PRIOR
一元操作符,仅用于CONNECT BY 后
面的condition,
用于标识紧接在后面的
表达式中涉及的列出自parent row。
PRIOR 只对于紧接在后面的表达式生
效,如下例:
expr_1 = expr_2 AND expr_3 = PRIOR
expr_4
//PRIOR 只对于expr_4 生效。
PRIOR 不能嵌套使用,如下例会报错:

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1088
参数名称


PRIOR (expr_1 + PRIOR expr2)
CONNECT_BY_ROOT
一元操作符,
用于获取结果集中每一条
记录对应根记录的某一列值。
参数可以
指定多列、表达式或函数。不能出现在
connect_condition 和join_condition 中。
connect_by_isleaf
伪列,由GBase 8a 自动维护;用于表
示当前层已经是最后一层。0 表示非最
后一层;1 表示最后一层。不能出现在
connect_condition 和join_conditions 中。
connect_by_iscycle
伪列,由GBase 8a 自动维护。用于表
示当前层是否发生cycle。
0 表示未发生
cycle ;1 表示发生cycle 。只有
NOCYCLE 存在才能使用,否则报错。
SYS_CONNECT_BY_PATH(column,char)
函数,
可通过使用指定的字符作为连接
符,
将分层查询结果的某一列按照分层
路径输出。不能出现在
connect_condition 和join_conditions 中。
Where
Where 子句中所有连接条件均在
hierarchical_clause 之前执行,
所有过滤
条件均在hierarchical_clause 之后执行

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1089
说明

分级查询子句connect by 与start with 不允许出现外层表的列;

分级查询from 子句必须是表,且必须是复制表;

分级查询可以作为子查询出现,但分级查询中不允许出现子查询;

connect by 关联条件不能包含or 操作,并且必须包含父子节点间的等值条
件,等号的两边必须是不同的维度(一边包含prior,一边不包含prior);

prior 是一元操作符,优先级同正负号,只能用在connect by 子句中;prior
后面不可以接伪列(level、rowid 等)、不可以接包含伪列的表达式、不
可以嵌套使用prior、不可以接聚合函数;

order siblings by 只能用在分级查询语句中,
并且不能同聚合、
OLAP 函数、
ORDER BY 同时存在;

不支持实时环路判断,
只能保证最终能够检测出环路,
如果数据量太大
(如
超过十万),会耗时很长才能检测出;

最大节点数为MAX_INT(2147483647)(所有节点数);

新增三个保留字:start、level、prior;

CONNECT BY 后面的condition 不允许包含subquery;
示例
示例1:level 使用在CONNECT BY 位置。
USE test;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a int, b int, c char(10), d varchar(20), e varchar(5), f
datetime, g decimal(6,2)) REPLICATED;
INSERT INTO t1 VALUES(0,1,'DMD','kds','dmd','2013-4-1 10:23:01',1.1);
INSERT INTO t1 VALUES(0,3,'DMD','cj','dmd','2013-4-1 10:23:01',2.1);
INSERT INTO t1 VALUES (1,3,'DMD','lm','dmd1','2013-4-1 10:23:01',2.2);
INSERT INTO t1 VALUES (1,4,'DMD','zx','dmd2','2013-4-1 10:23:01',2.3);
DROP TABLE IF EXISTS t2;
CREATE TABLE t2 REPLICATED AS SELECT * FROM t1;
gbase> SELECT level, t1.* FROM t1 CONNECT BY NOCYCLE PRIOR b =
level START WITH a = 0;
+-------+------+------+------------+------+------+---------------------+------+
| level | a
| b
| c
| d
| e
| f
| g
|
+-------+------+------+------------+------+------+---------------------+------+
|
1 |
0 |
1 | DMD
| kds
| dmd
| 2013-04-01 10:23:01 |