基于 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 ','
我正在尝试 运行 复制根据 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 ','