-
场景一:仅添加新元数据 用户的数据库中新增的数据表,采集任务仅采集新增的表。 例如新增table4的情况下: 采集前的数据表元数据:table1,table2,table3 采集后的数据表元数据:table1,table2,table3,table4 按照下面的配置,采集任务仅会采集table4。(前提:table1-table3已经在数据目录中) 进入
DataArts Studio 控制台首页的数据目录模块。 单击左侧导航的“任务管理”,进入任务管理页面。 在任务管理页面单击“新建”,新建一个元数据采集任务。 配置任务信息,如下图所示。 图1 配置任务信息 单击“下一步”,配置调度属性如下图所示。 图2 配置调度属性 单击“提交”,完成采集任务的创建。 单击任务管理列表中的“运行”或“启动调度”,跳转到任务监控页面并查看任务状态。
-
场景四:更新数据目录中的元数据,添加新元数据 ,并从数据目录中删除元数据 用户的数据库中数据表有删除的情况,采集任务能够删除数据目录中对应的数据表。 例如数据库删除table1的情况下: 采集前的数据表元数据:table1,table2,table3 采集后的数据表元数据:table2,table3 按照如下配置,采集任务会删除数据目录中的table1。 进入DataArts Studio控制台首页的数据目录模块。 单击左侧导航的“任务管理”,进入任务管理页面。 在任务管理页面单击“新建”,新建一个元数据采集任务。 配置任务信息,如下图所示。 图7 配置任务信息 单击“下一步”,配置调度属性如下图所示。 图8 配置调度属性 单击“提交”,完成采集任务的创建。 单击任务管理列表中的“运行”或“启动调度”,跳转到任务监控页面并查看任务状态。
-
场景二:更新数据目录中的元数据,添加新元数据 用户的数据库中新增了数据表,采集数据源中指定的所有表。 例如新增table4的情况下: 采集前的数据表元数据:table1,table2,table3 采集后的数据表元数据:table1,table2,table3,table4 按照如下配置,采集任务会采集default下所有的表(table1-table4)。 进入DataArts Studio控制台首页的数据目录模块。 单击左侧导航的“任务管理”,进入任务管理页面。 在任务管理页面单击“新建”,新建一个元数据采集任务。 配置任务信息,如下图所示。 图3 配置任务信息 单击“下一步”,配置调度属性如下图所示。 图4 配置调度属性 单击“提交”,完成采集任务的创建。 单击任务管理列表中的“运行”或“启动调度”,跳转到任务监控页面并查看任务状态。
-
场景三:仅更新数据目录中的元数据 用户的数据库中数据表有新增的情况,采集任务仅采集数据目录中已经存在的表。 例如新增table4的情况下: 采集前的数据表元数据:table1,table2,table3 采集后的数据表元数据:table1,table2,table3 按照如下配置,采集任务仅采集table1,table2和table3。 进入DataArts Studio控制台首页的数据目录模块。 单击左侧导航的“任务管理”,进入任务管理页面。 在任务管理页面单击“新建”,新建一个元数据采集任务。 配置任务信息,如下图所示。 图5 配置任务信息 单击“下一步”,配置调度属性如下图所示。 图6 配置调度属性 单击“提交”,完成采集任务的创建。 单击任务管理列表中的“运行”或“启动调度”,跳转到任务监控页面并查看任务状态。
-
前提条件 在创建数据连接前,请确保您已创建所要连接的
数据湖 (如DataArts Studio所支持的数据库、云服务等)。 在创建DWS类型的数据连接前,您需要先在DWS服务中创建集群,并且具有KMS密钥的查看权限。 在创建
MRS HBase、MRS Hive等MRS类型的数据连接前,需确保您已购买MRS集群,集群的“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”,并且集群中包含所需要的组件。 在创建数据连接前,请确保您已具备连接所需的Agent代理(即
CDM 集群,如果无可用CDM集群请参考创建CDM集群进行创建),且待连接的数据湖与CDM集群之间网络互通。 如果数据湖为云下的数据库,则需要通过公网或者专线打通网络。请确保数据源所在的主机和CDM集群均能访问公网,并且防火墙规则已开放连接端口。 如果数据湖为云上服务(如DWS、MRS等),则网络互通需满足如下条件: CDM集群与云上服务处于不同区域的情况下,需要通过公网或者专线打通网络。 CDM集群与云上服务同区域情况下,同虚拟私有云、同子网、同安全组的不同实例默认网络互通;如果同虚拟私有云但是子网或安全组不同,还需配置路由规则及安全组规则,配置路由规则请参见如何配置路由规则章节,配置安全组规则请参见如何配置安全组规则章节。 此外,您还必须确保该云服务的实例与DataArts Studio工作空间所属的企业项目必须相同,如果不同,您需要修改工作空间的企业项目。 如果使用企业模式,您还需要注意以下事项: 由于企业模式下需要区分开发环境和生产环境,因此您需要分别准备对应生产环境和开发环境的两套数据湖服务,用于隔离开发和生产环境: 对于集群化的数据源(例如MRS、DWS、RDS、MySQL、Oracle、DIS、E
CS ),如果使用两套集群,DataArts Studio通过管理中心的创建数据连接区分开发环境和生产环境的数据湖服务,在开发和生产流程中自动切换对应的数据湖。因此您需要准备两套数据湖服务,且两套数据湖服务的版本、规格、组件、区域、VPC、子网以及相关配置等信息,均应保持一致。创建数据连接的详细操作请参见创建DataArts Studio数据连接。 对于Serverless服务(例如
DLI ),DataArts Studio通过管理中心的环境隔离来配置生产环境和开发环境数据湖服务的对应关系,在开发和生产流程中自动切换对应的数据湖。因此您需要在Serverless数据湖服务中准备两套队列、数据库资源,建议通过名称后缀进行区分,详细操作请参见配置DataArts Studio企业模式环境隔离。 对于DWS、MRS Hive和MRS Spark这三种数据源,如果在创建数据连接时选择同一个集群,则需要配置数据源资源映射的DB数据库映射关系进行开发生产环境隔离,详细操作请参见DB配置。 离线处理集成作业不支持在企业模式下运行。 例如,当您的数据湖服务为MRS集群时,需要准备两套MRS集群,且版本、规格、组件、区域、VPC、子网等保持一致。如果某个MRS集群修改了某些配置,也需要同步到另一套MRS集群上。
-
参考 为什么在创建数据连接的界面上MRS Hive集群不显示? 出现该问题的可能原因有: 创建MRS集群时未选择Hive/HBase组件。 创建MRS集群时所选择的企业项目与工作空间的企业项目不同。 创建MRS数据连接时所选择的CDM集群和MRS集群网络不互通。 CDM集群作为网络代理,与MRS集群需网络互通才可以成功创建基于MRS的数据连接。 为什么Hive数据连接突然无法获取数据库或表的信息? 可能是由于CDM集群被关闭或者并发冲突导致,您可以通过切换agent代理来临时规避此问题。
-
示例 数据准备。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 gaussdb=# create database db1 encoding='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' dbcompatibility = 'A';
CREATE DATABASE
gaussdb=# \c db1
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db1" as user "omm".
db1=# CREATE TABLE test_copy(id int, name text);
CREATE TABLE
db1=# insert into test_copy values(1, 'aaa');
INSERT 0 1
db1=# insert into test_copy values(2, 'bb"b');
INSERT 0 1
db1=# insert into test_copy values(3, 'cc c');
INSERT 0 1
db1=# insert into test_copy values('', e'dd\td');
INSERT 0 1
db1=# insert into test_copy values('5', e'ee\e');
INSERT 0 1
db1=# select * from test_copy;
id | name
----+-----------
1 | aaa
2 | bb"b
3 | cc c
| dd d
5 | eee
(5 rows)
数据导出。 1
2 db1=# COPY test_copy TO '/home/xy/test.fixed' encoding 'UTF-8' FIXED FORMATTER(id(0,1), name(1,5));
COPY 5
导出数据文件内容如下所示: 1
2
3
4
5 1 aaa
2 bb"b
3cc c
dd d
5 eee
数据导入。 db1=# truncate test_copy;
TRUNCATE TABLE
db1=# copy test_copy from '/home/xy/test.fixed' encoding 'UTF-8' FIXED FORMATTER(id(0,1), name(1,5));
COPY 5
-
GaussDB 导出之后自行解析数据文件的场景 该场景下一般不希望导出的TEXT文件中有GaussDB独有的转义行为,此时需要按如下方式进行处理: 首先确认字段数据中是否存在行结束符或分隔符; 如果包含,需要使用EOL或delimiter参数改用其他字符。需要确保指定的新EOL或delimiter不会在字段数据中存在,建议从不可见字符(0x01 ~ 0x1F)中选取; 可以通过NULL选项指定对数据中的NULL值在导出时的表示方法。 最后添加without escaping参数,禁止转义输出。 建议导出命令: 1
2
3 copy {data_source} to '/path/export.txt' without escaping eol e'\x1E' delimiter e'\x1F' null '\N' encoding '{server_encoding}';
--data_source 可以是一个表名称,也可以是一个select语句
--server_encoding 可以通过show server_encoding获得
-
GaussDB导出并导入到GaussDB场景 建议导出命令: 1
2
3 copy {data_source} to '/path/export.txt' eol e'\n' delimiter e'\t' encoding '{server_encoding}';
--data_source 可以是一个表名称,也可以是一个select语句
--server_encoding 可以通过show server_encoding获得
对应导入命令: 1
2
3 copy {data_destination} from '/path/export.txt' eol e'\n' delimiter e'\t' encoding '{file_encoding}';
--data_destination 只能是一个表名称
--file_encoding 为该二进制文件导出时指定的编码格式
-
示例 数据准备。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 gaussdb=# create database db1 encoding='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' dbcompatibility = 'A';
CREATE DATABASE
gaussdb=# \c db1
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db1" as user "omm".
db1=# CREATE TABLE test_copy(id int, name text);
CREATE TABLE
db1=# insert into test_copy values(1, 'aaa');
INSERT 0 1
db1=# insert into test_copy values(2, e'bb\nb');
INSERT 0 1
db1=# insert into test_copy values(3, e'cc\tc');
INSERT 0 1
db1=# insert into test_copy(name) values('ddd');
INSERT 0 1
db1=# insert into test_copy values(5, e'ee\\e');
INSERT 0 1
db1=# insert into test_copy values(6, ',');
INSERT 0 1
db1=# insert into test_copy values(7, '"');
INSERT 0 1
db1=# SELECT * FROM test_copy;
id | name
----+-----------
1 | aaa
2 | bb +
| b
3 | cc c
| ddd
5 | ee\e
6 | ,
7 | "
(7 rows)
整表数据导出。 1
2 db1=# copy test_copy to '/home/xy/test.csv' delimiter ',' quote '"' escape '"' encoding 'UTF-8' csv;
COPY 7
导出的CSV文件内容如下所示: 1
2
3
4
5
6
7
8 1,aaa
2,"bb
b"
3,cc c
,ddd
5,ee\e
6,","
7,""""
数据导入。 db1=# truncate test_copy;
TRUNCATE TABLE
db1=# copy test_copy from '/home/xy/test.csv' delimiter ',' quote '"' escape '"' encoding 'UTF-8' csv;
COPY 7 自定义数据集导出:导出test_copy中id不为空所有行的name列。 1
2 db1=# copy (select name from test_copy where id is not null) to '/home/xy/test.csv' delimiter ',' quote '"' escape '"' encoding 'UTF-8' csv;
COPY 6
导出的CSV文件内容如下所示: 1
2
3
4
5
6
7 aaa
"bb
b"
cc c
ee\e
","
""""
-
并行导入命令示例 1
2
3
4
5
6
7
8
9 --CSV格式的导入命令
\COPY {data_destination} from '/path/export.txt' encoding {file_encoding} parallel {parallel_num} csv;
--FIXED格式的导入命令
\COPY {data_destination} from '/path/export.txt' encoding {file_encoding} parallel {parallel_num} fixed;
--TEXT格式的导入命令
\COPY {data_destination} from '/path/export.txt' encoding {file_encoding} parallel {parallel_num};
--data_destination 只能是一个表名称
--file_encoding 表示该二进制文件导出时指定的编码格式
--parallel_num 表示数据导入时的客户端数量,在集群资源较为充足时建议此值为8。
-
\COPY命令示例 \COPY的导出命令与COPY命令的区别为把命令中的COPY换成\COPY即可,此处提供一个简单的CSV格式COPY导出命令转换为\COPY导出命令的示例: 1
2
3
4
5
6 --COPY命令
COPY {data_source} to '/path/export.csv' encoding {server_encoding} csv;
COPY {data_source} from '/path/export.csv' encoding {server_encoding} csv;
--对应的\COPY命令
\COPY {data_source} to '/path/export.csv' encoding {server_encoding} csv;
\COPY {data_source} from '/path/export.csv' encoding {server_encoding} csv;
-
数据存在错误时需要支持容错的导入场景 当使用COPY或 \COPY命令执行数据导入时,若检测到数据异常,系统将默认终止导入任务。为此,GaussDB提供了两种容错机制:智能修正模式与严格校验模式。建议优先采用严格校验模式(Level1容错等级),该模式可在保证数据完整性的前提下跳过异常记录并且不会对导入性能影响造成太大的影响。详细信息可参考数据存在错误时的导入操作指南。 以下是严格校验模式Level1容错等级的导入命令: 1
2
3
4
5
6
7
8
9
10
11 --CSV格式
\COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding} CSV;
--BINARY格式
\COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding} BINARY;
--FIXED格式
\COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding} FIXED;
--TEXT格式
\COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding};
--data_destination 只能是一个表名称
--file_encoding 表示该二进制文件导出时指定的编码格式
--limit_num 表示数据导入时容错行数的上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。
如果是普通用户期望使用该特性时,需要对该用户赋权容错特性两张系统表的相关权限,具体SQL如下: 1
2 GRANT INSERT,SELECT,DELETE ON Pgxc_copy_error_log TO {user_name};
GRANT INSERT,SELECT,DELETE ON gs_copy_summary TO {user_name};
父主题: 典型场景
-
示例 数据准备。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 gaussdb=# CREATE DATABASE db1 ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' DBCOMPATIBILITY = 'ORA';
CREATE DATABASE
gaussdb=# \c db1
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db1" as user "omm".
db1=# CREATE TABLE test_copy(id int, name text);
NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
CREATE TABLE
db1=# INSERT INTO test_copy VALUES(1, 'aaa');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(2, e'bb\nb');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(3, e'cc\tc');
INSERT 0 1
db1=# INSERT INTO test_copy(name) VALUES('ddd');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(5, e'ee\\e');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(6, ',');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(7, '"');
INSERT 0 1
db1=# SELECT * FROM test_copy;
id | name
----+-----------
1 | aaa
2 | bb +
| b
3 | cc c
| ddd
5 | ee\e
6 | ,
7 | "
(7 rows)
整表数据导出。 1
2
3
4
5
6
7 db1=# COPY test_copy TO '/home/xy/test.csv'
DELIMITER ','
QUOTE '"'
ESCAPE '"'
ENCODING 'UTF-8'
CSV;
COPY 7
导出的CSV文件内容如下所示: 1
2
3
4
5
6
7
8 1,aaa
2,"bb
b"
3,cc c
,ddd
5,ee\e
6,","
7,""""
数据导入。 db1=# TRUNCATE test_copy;
TRUNCATE TABLE
db1=# COPY test_copy FROM '/home/xy/test.csv'
DELIMITER ','
QUOTE '"'
ESCAPE '"'
ENCODING 'UTF-8'
CSV;
COPY 7 自定义数据集导出:导出test_copy中id不为空所有行的name列。 1
2
3
4
5
6
7
8 db1=# COPY (SELECT name FROM test_copy WHERE id IS NOT NULL)
TO '/home/xy/test.csv'
DELIMITER ','
QUOTE '"'
ESCAPE '"'
ENCODING 'UTF-8'
CSV;
COPY 6
导出的CSV文件内容如下所示: 1
2
3
4
5
6
7 aaa
"bb
b"
cc c
ee\e
","
""""
-
示例 数据准备。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 gaussdb=# CREATE DATABASE db1 ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' DBCOMPATIBILITY = 'ORA';
CREATE DATABASE
gaussdb=# \c db1
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db1" as user "omm".
db1=# CREATE TABLE test_copy(id int, name text);
NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
CREATE TABLE
db1=# INSERT INTO test_copy VALUES(1, 'aaa');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(2, 'bb"b');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES(3, 'cc c');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES('', e'dd\td');
INSERT 0 1
db1=# INSERT INTO test_copy VALUES('5', e'ee\e');
INSERT 0 1
db1=# SELECT * FROM test_copy;
id | name
----+-----------
1 | aaa
2 | bb"b
3 | cc c
| dd d
5 | eee
(5 rows)
数据导出。 1
2 db1=# COPY test_copy TO '/home/xy/test.fixed' encoding 'UTF-8' FIXED FORMATTER(id(0,1), name(1,5));
COPY 5
导出数据文件内容如下所示: 1
2
3
4
5 1 aaa
2 bb"b
3cc c
dd d
5 eee
数据导入。 db1=# TRUNCATE test_copy;
TRUNCATE TABLE
db1=# COPY test_copy FROM '/home/xy/test.fixed' ENCODING 'UTF-8' FIXED FORMATTER(id(0,1), name(1,5));
COPY 5