vertica copy命令,基于csv的内容

时间:2017-01-15 15:14:22

标签: vertica

我正在尝试运行复制命令,根据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)

感谢

2 个答案:

答案 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 ','