我正在尝试运行复制命令,根据csv的连接填充数据库。
db列名称是:
col1,col2,col3
csv内容是(只是数字,名称是db列名称):
1234,5678,5436
我需要的是一种插入数据的方式,如下所示: 基于我的例子:
我想放入db:
col1, col2, col3
1234, 5678 "1234_XX_5678"
我应该使用FILLERS吗? 如果是这样的命令是什么?
我的出发点是:
COPY SAMPLE.MYTABLE (col1,col2,col3)
FROM LOCAL
'c:\\1\\test.CSV'
UNCOMPRESSED DELIMITER ',' NULL AS 'NULL' ESCAPE AS '\' RECORD TERMINATOR '
' ENCLOSED BY '"' DIRECT STREAM NAME 'Identifier_0' EXCEPTIONS 'c:\\1\\test.exceptions'
REJECTED DATA 'c:\\1\\test.rejections' ABORT ON ERROR NO COMMIT;
你能帮忙如何加载这些列(基本上是col3)
感谢
答案 0 :(得分:1)
有不同的方法可以做到这一点。
1 - 将数据传输到vsql并使用linux动态进行数据编辑
<强>例如强>
cat file.csv |sed 's/,/ , /g' | awk {'print $1 $2 $3 $4 $1"_XX_"$3'}
|vsql -U user -w passwd -d dbname -c "COPY tbl FROM STDIN DELIMITER ',';"
2 - 使用填充物
copy tbl(
v1 filler int ,
v2 filler int ,
v3 filler int,
col1 as v1,
col2 as v2,
col3 as v1||'_XX_'||v2) from '/tmp/file.csv' delimiter ',' direct;
dbadmin=> select * from tbl;
col1 | col2 | col3
------+------+--------------
1234 | 5678 | 1234_XX_5678
(1 row)
我希望这会有所帮助:)
答案 1 :(得分:0)
您甚至不必制作两个输入列 - 无论如何都按原样加载 - FILLER。这样做:
COPY mytable (
col1
, col2
, col3f FILLER int
, col3 AS col1::CHAR(4)||'_XX_'||col2::CHAR(4)
)
FROM LOCAL 'foo.txt'
DELIMITER ','