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