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

openGauss每日一练第 13 天 | 数据导入操作及课后作业

原创 JiekeXu 2021-12-16
1623

openGauss 每日一练第 13 天学习打卡,巩固 openGauss 数据库数据导入基本操作!

学习目标

学习 openGauss 数据导入管理

前面每日一练链接:

openGauss每日一练第 1 天 | 数据库和表的基本操作(一)
openGauss每日一练第 2 天 | 数据库和表的基本操作(二)
openGauss每日一练第 3 天 | 前三课作业实操练习
openGauss每日一练第 4 天 | 角色管理及课后作业
openGauss每日一练第 5 天 | 用户管理及课后作业
openGauss每日一练第 6 天 | 模式管理及课后作业
openGauss每日一练第 7 天 | 表空间管理及课后作业
openGauss每日一练第 8 天 | 分区表管理及课后作业
openGauss每日一练第 9 天 | 普通表索引管理及课后作业
openGauss每日一练第 10 天 | 分区表索引管理及课后作业
openGauss每日一练第 11 天 | 视图管理及课后作业
openGauss每日一练第 12 天 | 自定义数据类型管理及课后作业

课程学习

openGauss 数据库数据导入基本操作!openGauss 数据库提供了灵活的数据入库方式:INSERT、COPY 以及 gsql 元命令 \copy。各方式具有不同的特点,具体请参见表1。

方式 特点
INSERT 通过 INSER T语句插入一行或多行数据,及从指定表插入数据。
COPY 通过 COPY FROM STDIN 语句直接向 openGauss 数据库写入数据。通过 JDBC 驱动的 CopyManager 接口从其他数据库向openGauss 数据库写入数据时,具有业务数据无需落地成文件的优势。
gsql 工具的元命令 \copy 与直接使用 SQL 语句 COPY 不同,该命令读取/写入的文件只能是 gsql 客户端所在机器上的本地文件。说明:\COPY 只适合小批量、格式良好的数据导入,不会对非法字符做预处理,也无容错能力,无法适用于含有异常数据的场景。导入数据应优先选择 COPY。
gs_restore gs_restore 是 openGauss 数据库提供的与 gs_dump 配套的导入工具。通过该工具,可将 gs_dump 导出的文件导入至数据库。gs_restore 支持导入的文件格式包含自定义归档格式、目录归档格式和 tar 归档格式。

注意:在启动 gsql 的命令行中加上“-E”参数,就可以把 gsql 中各种以“\”开头的命令执行的实际 SQL 语句打印出来.如果在已运行的 gsql 中显示了某个命令实际执行的 SQL 语句后又想关闭此功能,该怎么办?这时可以使用“\set ECHO_HIDDEN on|off”命令。

连接 openGauss

su - omm
gsql -r

gsql -r -h localhost -U user1 -W JiekeXu12 -d postgres

1.通过 INSERT 语句直接写入数据

CREATE TABLE reason_t1
(
r_reason_sk integer,
r_reason_id character(16),
r_reason_desc character(100)
);
insert into reason_t1 values(1, 'AAAAAAAABAAAAAAA', 'reason1');

–没有数值的字段将被填充为字段的缺省值

insert into reason_t1 values(1, 'AAAAAAAABAAAAAAA');

–明确字段为缺省值

insert into reason_t1 values(1, 'AAAAAAAABAAAAAAA', DEFAULT);

–明确整行为缺省值

insert into reason_t1 DEFAULT VALUES;
select * from reason_t1;

图片.png

–指定表插入数据到当前表

CREATE TABLE reason_t2
(
r_reason_sk integer,
r_reason_id character(16),
r_reason_desc character(100)
);

–将查询结果作为插入的数据

INSERT INTO reason_t2 SELECT * FROM reason_t1;
select * from reason_t2;

图片.png

2.使用合并方式更新和插入数据

–创建源表products,并插入数据

CREATE TABLE products
( product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO products VALUES
(1502, 'olympus camera', 'electrncs'),
(1601, 'lamaze', 'toys'),
(1666, 'harry potter', 'toys'),
(1700, 'wait interface', 'books');

–创建目标表newproducts,并插入数据

CREATE TABLE newproducts
( product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO newproducts VALUES
(1501, 'vivitar 35mm', 'electrncs'),
(1502, 'olympus ', 'electrncs'),
(1600, 'play gym', 'toys'),
(1601, 'lamaze', 'toys'),
(1666, 'harry potter', 'dvd');

omm=# select * from products;
 product_id |  product_name  | category  
------------+----------------+-----------
       1502 | olympus camera | electrncs
       1601 | lamaze         | toys
       1666 | harry potter   | toys
       1700 | wait interface | books
(4 rows)

omm=# select * from newproducts;
 product_id | product_name | category  
------------+--------------+-----------
       1501 | vivitar 35mm | electrncs
       1502 | olympus      | electrncs
       1600 | play gym     | toys
       1601 | lamaze       | toys
       1666 | harry potter | dvd
(5 rows)

图片.png

–使用MERGE INTO 语句将源表products的数据合并至目标表newproducts

MERGE INTO newproducts np
USING products p
ON (np.product_id = p.product_id )
WHEN MATCHED THEN
UPDATE SET np.product_name = p.product_name, np.category = p.category
WHEN NOT MATCHED THEN
INSERT VALUES (p.product_id, p.product_name, p.category) ;

–查询合并后的目标表newproducts。

SELECT * FROM newproducts;

图片.png

3.使用COPY实现表和文件间的拷贝

–将表数据输出到stdout

copy reason_t1 to stdout;

omm=# copy reason_t1 to stdout;
1       AAAAAAAABAAAAAAA        reason1                                                                                             
1       AAAAAAAABAAAAAAA        \N
1       AAAAAAAABAAAAAAA        \N
\N      \N      \N
omm=# 

–将表数据拷贝到文件

copy reason_t1 to '/home/omm/reason.dat';
CREATE TABLE reason_t3 (LIKE reason_t1);

–将数据从文件拷贝到表

copy reason_t3 from '/home/omm/reason.dat';
select * from reason_t3;

omm=# select * from reason_t3;
 r_reason_sk |   r_reason_id    |                                            r_reason_desc                                             
-------------+------------------+------------------------------------------------------------------------------------------------------
           1 | AAAAAAAABAAAAAAA | reason1                                                                                             
           1 | AAAAAAAABAAAAAAA | 
           1 | AAAAAAAABAAAAAAA | 
             |                  | 
(4 rows)

omm=# \q
omm@modb:~$ ls -l
total 4
-rw------- 1 omm omm 173 Dec 16 20:12 reason.dat

图片.png

课程作业

1.创建表1并在表中插入数据,分别指定字段和整行为缺省值

create database jiekexu;
\c jiekexu

CREATE TABLE product
( product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO product VALUES
(1502, 'olympus camera', 'electrncs'),
(1601, 'lamaze', 'toys'),
(1666, 'harry potter', 'toys'),
(1700, 'wait interface', 'books');

insert into product values(1, 'ABAA');
insert into product DEFAULT VALUES;

图片.png

2.创建表2并将表1的数据全部导入表2中

CREATE TABLE product2
(
r_reason_sk integer,
r_reason_id character(16),
r_reason_desc character(100)
);

INSERT INTO product2 SELECT * FROM product;
select * from product2;

图片.png

3.创建表3和表4,并合并两个表的数据到表3

CREATE TABLE product3
( product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO product3 VALUES
(1502, 'olympus camera', 'electrncs'),
(1601, 'lamaze', 'toys'),
(1666, 'harry potter', 'toys'),
(1700, 'wait interface', 'books');

CREATE TABLE product4
( product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO product4 VALUES
(1501, 'vivitar 35mm', 'electrncs'),
(1502, 'olympus ', 'electrncs'),
(1600, 'play gym', 'toys'),
(1601, 'lamaze', 'toys'),
(1666, 'harry potter', 'dvd');

MERGE INTO product3  p3
USING product4 p4
ON (p3.product_id = p4.product_id )
WHEN MATCHED THEN
UPDATE SET p3.product_name = p4.product_name, p3.category = p4.category
WHEN NOT MATCHED THEN
INSERT VALUES (p4.product_id, p4.product_name, p4.category) ;

图片.png

图片.png

4.将表 3 的数据输出到文件,再将文件中的数据导入到表 5

copy product3  to '/home/omm/product3.dat';

CREATE TABLE product5 (LIKE product4);

copy product5 from '/home/omm/product3.dat';
select * from product5;

图片.png

欧耶,第十三课数据导入管理实操及课后作业练习题完成啦!第十四课见!!!

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

评论