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

人大金仓数据库KingbaseES COPY命令介绍之COPY FROM

原创 数据猿 2024-01-16
1395


金仓数据库KingbaseES COPY命令介绍之COPY FROM

关键字:

KingbaseES、COPY、COPY FROM;人大金仓;KingbaseES

COPY语句介绍

在KingbaseES数据库中,支持移动表和文件系统数据的COPY命令。COPY命令分为COPY TO和COPY FROM命令。COPY TO用于移动一个表中的数据到文件中。COPY FROM支持从文件中复制数据到表中。

COPY 命令支持设置输入输出文件选项,支持选项如下:

可选选项

说明

FORMAT

输出文件格式

PROGRAM

要执行的命令,命令输入输出将被捕获

FREEZE

复制完成行冻结的数据

DELIMITER

列分隔符

TERMINATOR

换行字符

NULL

空字符串

HEADER

是否输出列名

FORCE_NOT_NULL

不匹配空字符串

FORCE_NULL

指定列值置空

ENCODING

文件编码格式

COPY FROM的语法

COPY FROM命令支持获取文件系统的信息复制到表中。需要注意的是,COPY FROM命令可以被用于普通表、外部表、分区表和具有instead of insert触发器的视图。

COPY FROM语法如下:

COPY table_name [ ( column_name [, ...] ) ]

FROM { 'filename' | PROGRAM 'command' | STDIN }

[ [ WITH ] ( option [, ...] ) ]

[ WHERE condition ]

COPY FROM的使用

示例1:对文件进行复制

--将表中数据复制到文件中

Create table timezone_table as select * from pg_timezone_names;

--copy to的目标文件只能以绝对路径的方式指定

copy timezone_table to 'timezone.csv' with (format 'csv',header 'true');

copy timezone_table to '/opt/timezone.csv' with (format 'csv',header 'true');

--创建获取数据的表

create table timezone_copy(name text,abbrev text,utc_offset pg_catalog.interval,is_dst boolean);

copy timezone_copy from '/opt/ timezone.csv' with (format 'csv',header 'true');

-- timezone_copy表可以获取相应数据

Select * from timezone_copy;

示例2:从当前客户端输入进行copy

--创建获取数据的表

create table copy_from_stdin(a int, b int, c text);

--执行copy from

Copy copy_from_stdin from stdin;

--输入以下数据,需要注意列与列之间使用TAB进行切换,新行输入\.开始执行copy

--列与列之间使用空格无法识别

--使用DELIMITER选项可以指定列分隔符

Copy copy_from_stdin from stdin with(DELIMITER '|');

示例3:通过程序对日志信息进行copy

在data目录下执行下面命令可以对日志信息进行分割

cat current_logfiles | awk {'print $2'} | xargs cat | grep -e ERROR -e LOG -e DETAIL | grep -v '|' | awk '{printf("%s %s|%s|", $1,$2,$4); for (i=5;i<=NF;i++) printf("%s ",$i); print ""}'

在KingbaseES中使用copy复制上述命令输出

--创建获取数据的表

create table copyLog_from_program(logtime text, CST text, INFO text);

--进行copy

copy copyLog_from_program from PROGRAM E'cat current_logfiles | awk {\'print $2\'} | xargs cat | grep -e ERROR -e LOG -e DETAIL | grep -v \'|\' | awk \'{printf("%s %s|%s|", $1,$2,$4); for (i=5;i<=NF;i++) printf("%s ",$i); print ""}\'' with(DELIMITER '|');

--查询表中的日志信息

Select * from copyLog_from_program;

示例4:使用where子句筛选符合条件的数据进行copy

--创建获取数据的表

create table copy_from_where(a int, b int, c text);

--执行copy from,可以发现只copy了符合where条件的数据

Copy copy_from_where from stdin where a>4;

--查询表copy_from_where数据

Select * from copy_from_where;

示例5:使用FORCE_NULL和FORCE_NOT_NULL选项(需要在csv模式下)

--创建获取数据的表

create table copy_from_FORCE_NULL (a text, b text, c text);

--非csv模式将报错

Copy copy_from_FORCE_NULL from stdin with(FORCE_NULL (a));

--执行copy from,FORCE_NULL列的空值将被置为NULL,而FORCE_NOT_NULL列的空值将被视为空字符串

Copy copy_from_FORCE_NULL(a,b,c) from stdin with(format csv,FORCE_NULL (c),FORCE_NOT_NULL(b));

Select * from copy_from_FORCE_NULL;

总结

在KingbaseES中提供了COPY命令进行KingbaseES表与文件系统之间的数据移动。本文主要介绍了COPY命令中的COPY FROM。COPY FROM命令将数据从文件、程序输出和客户端输入拷贝到数据库中。与COPY TO不同,在使用COPY FROM命令时可以提供WHERE子句对数据源进行过滤。

参考资料

《KingbaseES产品手册》

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

评论