暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8c实践 之导入最佳实践

李雨晴 2022-07-26
476

使用COPY命令导入数据

COPY命令从本地或其它数据库的多个数据源并行导入数据。COPY导入大量数据的效率要比INSERT语句高很多,而且存储数据也更有效率。

使用gsql元命令导入数据

\copy命令在任何psql客户端登录数据库成功后可以执行导入数据。与COPY命令相比较,\copy命令不是读取或写入指定文件的服务器,而是直接读取或写入文件。

这个操作不如COPY命令有效,因为所有的数据必须通过客户端/服务器的连接来传递。对于大量的数据来说COPY命令可能会更好。

\COPY只适合小批量,格式良好的数据导入,不会对非法字符做预处理,也无容错能力,无法适用于含有异常数据的场景。导入数据应优先选择COPY

使用INSERT多行插入

插入如果不能使用copy命令,而您需要进行sql插入,可以根据情况使用多行插入。如果您使用的是列存表,一次只插入一行或几行,则数据压缩效率低下。

多行插入是通过批量进行一系列插入而提高性能。下面的示例使用一条insert语句向一个三列表插入三行。这仍属于少量插入,只是用来说明多行插入的语法。

向表customer_t1中插入多行数据:

gbase=# insert into customer_t1 values (68, 'a1', 'zhou','wang'),

(43, 'b1', 'wu', 'zhao'),

(95, 'c1', 'zheng', 'qian');


使用INSERT批量插入

带SELECT子句使用批量插入操作来实现高性能数据插入。

如果需要将数据或数据子集从一个表移动到另一个表,可以使用CREATE TABLE AS命令。

如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。

gbase=# CREATE TABLE customer_t2 (
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);


gbase=# INSERT INTO customer_t2 SELECT * FROM customer_t1;

上面的示例等价于:

gbase=# CREATE TABLE customer_t2 AS SELECT * FROM customer_t1;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论