如何在加载到Oracle表之前相应地格式化csv文件

时间:2017-09-06 12:45:44

标签: oracle csv unix sql-loader

我有以下csv文件:

xxxx@xxx:~/Prod/Jcs/BIN/Dash_PPLP/load/test$ cat extraction_LIA.csv
PPL_LIABILITY,2468705,Fri Sep 01 06:56:41 2017,Fri Sep 01 06:58:33 2017

它包含表名,行成功,start_time和end_time。 (从unix日志解析)

我想相应地对其进行格式化,以便可以加载到这样的Oracle表中:

enter image description here

我怎么格式化?我怎样才能相应地编辑日期以便加载?

例如,期望的结果将是:

 echo "$Table_name,$Success_rows,$DAY/$MONTH/$YEAR $TIME_START,$DAY/$MONTH/$YEAR $TIME_END">> load.txt

非常感谢你!

2 个答案:

答案 0 :(得分:1)

使用awk以DAY/MONTH/YEAR格式替换Unix日期。

awk 'BEGIN { OFS=","; FS=","} {split($3,a," ");split($4,b," ")}
{$3=a[3]"/"a[2]"/"a[5]" "a[4];$4=b[3]"/"b[2]"/"b[5]" "b[4]}
{print}' extraction_LIA.csv >load.txt

格式化记录

PPL_LIABILITY,2468705,01/Sep/2017 06:56:41,01/Sep/2017 06:58:33

注意:此处使用awk的split函数将第3列和第4列拆分为数组,并提取特定元素。

答案 1 :(得分:1)

无需预处理。假设您将使用sqlldr,并且START_TIME和END_TIME列是DATETIME数据类型(如果不是,它们应该是),使用正确的日期数据格式模型构建sqlldr的控制文件:

...
start_time  date "to_date(start_time, 'DY MON DD HH24:MI:SS YYYY')",
end_time    date "to_date(end_time, 'DY MON DD HH24:MI:SS YYYY')"
...

More info on format models