如何从CSV中获取文件名并将其插入到表格的一列中

假设mt table名是Table_1

表的结构是这样的:

EMP_id, Emp_Name, File_Name_Input_Date (columns)

我从CSV文件加载Table_1 。 该CSV文件的名称是daily_01122014.csv

我正在使用vertical copy命令来加载这个表格:

ex copy Table_1 from '/location/daily_01122014.csv'delimiter ',';

它将加载表,但列名File_Name_Input_Date将留空,我必须对其进行硬编码。

我想要的是编写一个shell脚本,它将动态读取文件名并将其加载到column File_Name ,并从文件名中提取日期。

即:如果文件名是daily_01122014.csv ,则加载Table_1File_Name时应为daily_01122014.csv并且Input_Date应为2014-12-01 。 由于我有50-60个文件,我不能手动完成。


在将数据加载到Vertica之前,可以执行的操作是将该字符串添加到文件中请参阅此处的示例:

[dbadmin@DCXLG001 tmp]$ cat file001.csv
1,Adrian
[dbadmin@DCXLG001 tmp]$ ls -1 file*.csv|xargs -I% sed -i 's/$/,%/' %
[dbadmin@DCXLG001 tmp]$ cat file001.csv
1,Adrian,file001.csv

- 其中我有一个名为文件* .csv的文件,并将文件的名称添加到实际文件中每行的末尾。 你可以对多于一个文件进行此操作。 我会使用操作系统资源来完成这种转换,然后尝试使用Vetica的复制命令创建填充


您可以在COPY使用CURRENT_LOAD_SOURCE()

COPY t (c1, c2, c3 AS CURRENT_LOAD_SOURCE()) 
FROM '/home/load_file_1' ON exampledb_node02, '/home/load_file_2' ON exampledb_node03 
DELIMITER ',';

或者,您可以使用shell脚本:

#!/bin/bash
for INPUT_FILE in /path/to/file*.dat; do
vsql -c "copy test_file_name_insert
(
input_file_name as '$INPUT_FILE',
id,
name
)
from '/home/test_input_file.txt'
delimiter '|' ;"
done
链接地址: http://www.djcxy.com/p/84559.html

上一篇: How to fetch the filename from CSV and insert it into one of columns of a table

下一篇: Algorithm to return all combinations of k elements from n