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

Sql 如何从CSV中获取文件名并将其插入表的一列中,sql,shell,csv,vertica,Sql,Shell,Csv,Vertica,假设mt表名称为table_1 表的结构类似于: EMP_id, Emp_Name, File_Name_Input_Date (columns) 我正在从CSV文件加载表1。此CSV文件的名称为daily_01122014.CSV 我正在使用垂直复制命令加载此表: ex copy Table_1 from '/location/daily_01122014.csv'delimiter ','; 它将加载表,但列名File\u name\u Input\u Date将留空,我必须硬编码它 我

假设
mt表
名称为
table_1

表的结构类似于:

EMP_id, Emp_Name, File_Name_Input_Date (columns)
我正在从CSV文件加载
表1
。此CSV文件的名称为
daily_01122014.CSV

我正在使用垂直复制命令加载此表:

ex copy Table_1 from '/location/daily_01122014.csv'delimiter ',';
它将加载表,但列名
File\u name\u Input\u Date
将留空,我必须硬编码它

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


i、 e:如果文件名为
每日\u 01122014.csv
,则在加载
表1
文件时,文件名应为
每日\u 01122014.csv
输入日期应为
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
-其中有一个名为file*.csv的文件,我将该文件的名称添加到实际文件中每一行的末尾。 您可以对任意多个文件执行此操作。 我将使用操作系统资源进行此转换,然后尝试使用Vetica的copy命令创建填充程序

您只需在
副本中使用即可:

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 ',';
或者,您可以使用:


已为您的请求提供解决方案!听起来他还想分析一下日期。也许类似于“代码>到日期”(分割部分(分割部分(当前加载源(),“分割”,2),“,”1),“DDMMYYYY”)的东西可以工作。不确定,他在部分问题中引用了一个专栏,然后又引用了两个专栏。@woot我认为你太离谱了,先生。做一个绿色的人不容易,是吗,@Kermit?@woot如果你整天都在woot上购物,那就不容易了
#!/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