基于 csv 内容的 vertica 复制命令

vertica copy command with based on the content of the csv

我正在尝试 运行 复制根据 csv 的连接填充数据库的命令。

db 列名称是:

col1,col2,col3

csv 内容是(只是数字,名称是数据库列名称):

1234,5678,5436

我需要的是一种插入数据的方法,如下所示: 基于我的例子:

我想放入数据库:

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)

谢谢

有不同的方法可以做到这一点。

1 - 将数据通过管道传输到 vsql 并使用 linux

即时编辑数据

例如:

cat file.csv |sed 's/,/ , /g' | awk {'print     "_XX_"'} 
|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)

希望对您有所帮助:)

您甚至不必创建两个输入列 - 无论如何您都会加载 as-is - FILLER。这将做:

COPY mytable (
  col1
, col2  
, col3f FILLER int
, col3 AS col1::CHAR(4)||'_XX_'||col2::CHAR(4)
)
FROM LOCAL 'foo.txt'
DELIMITER ','