如何从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_1
列File_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