sql loader匯入資料如何把上傳檔案夾名作為一列插入,檔案夾里是需要的txt檔案,怎么用shell實作?
之前在網上看到有把檔案名作為一列插入的,具體怎么實作的不清楚,現在把檔案夾名作為一列插入不知道如何實作?
uj5u.com熱心網友回復:
---欄位名 CONSTANT 'J:\Data\1.txt' 默認路徑直接寫在control檔案里
load data infile 'J:\1.txt' append into table tb fields terminated by ',' trailing nullcols (a,b,c CONSTANT 'HJM' )
uj5u.com熱心網友回復:
//欄位名 CONSTANT 'J:\Data\1.txt' 默認路徑直接寫在control檔案里
load data infile 'J:\1.txt'
append into table tb
fields terminated by ','
trailing nullcols (a,b,c CONSTANT 'HJM' )
uj5u.com熱心網友回復:
這是把新增加的欄位--檔案夾名寫死了吧,如果檔案夾名字是變化的呢,意思就是我要通過shell來自動取這個檔案夾的名稱,然后把他作為要插入表的的一列的值uj5u.com熱心網友回復:
sqlldr匯入的時候肯定是一個檔案一個檔案的匯入啊,你變一個資料檔案,就換一次唄,又不復雜!我覺得他資料檔案應該不會太多的
uj5u.com熱心網友回復:
sqlldr userid=$db_user/$db_pswd@$db_tnsn control=$ctl_path/${column}.ctl data=https://bbs.csdn.net/topics/$data_path/${column}.txt bad=$bad_path/${column}.bad log=$log_path/${column}.log rows=50000 bindsize=2048000 direct=ture
這是sqlload腳本,每個檔案夾下面都有幾百張表,sqlload匯入的時候需要把這些表都匯入進去,如果寫死的話不好實作這個功能,而且具體的檔案夾名稱是隨著日期變化而變化的
uj5u.com熱心網友回復:
load data
characterset UTF8
truncate into table O_HX_KYZB_XJKHDZ
REENABLE DISABLED_CONSTRAINTS
fields terminated by '~@~'
trailing nullcols
(FARENDMA ,
LAOKEHUH ,
XINKEHUH ,
KEHUZWMC ,
KEHUYWMC
)
這是其中的一個CTL檔案,每個檔案夾下大概有三百個這個檔案,現在TXT檔案存在放目錄:/home/weblogic/ods_data/data/hx下,hx這個子目錄名稱是隨時變化的,現在要把這個隨時變化的目錄名稱添加到表的最后一列,具體用shell如何操作?
二樓的朋友給了個思路,如果把
trailing nullcols (a,b,c CONSTANT 'HJM' )中的'HJM'替換為一個可以執行的取值命令呢,不知道可以嗎?
uj5u.com熱心網友回復:
中的'HJM'替換為一個可以執行的取值命令呢,不知道可以嗎?
uj5u.com熱心網友回復:
換成取值命令應該可以,但我沒試過
中的'HJM'替換為一個可以執行的取值命令呢,不知道可以嗎?
我試了下,
test CONSTANT `ls /home/weblogic/ods_data/data`
這一段,用在這里是報錯的,不知道用什么辦法可以把命令加到ctl檔案里進行處理
uj5u.com熱心網友回復:
不是很明白,你是要回圈讀取檔案夾中的檔案,還是傳入引數進去執行sh腳本?uj5u.com熱心網友回復:
load data
characterset UTF8
truncate into table O_HX_KYZB_XJKHDZ
REENABLE DISABLED_CONSTRAINTS
fields terminated by '~@~'
trailing nullcols
(FARENDMA ,
LAOKEHUH ,
XINKEHUH ,
KEHUZWMC ,
KEHUYWMC
)
這是其中的一個CTL檔案,每個檔案夾下大概有三百個這個檔案,現在TXT檔案存在放目錄:/home/weblogic/ods_data/data/hx下,hx這個子目錄名稱是隨時變化的,現在要把這個隨時變化的目錄名稱添加到表的最后一列,具體用shell如何操作?
二樓的朋友給了個思路,如果把trailing nullcols (a,b,c CONSTANT 'HJM' )中的'HJM'替換為一個可以執行的取值命令呢,不知道可以嗎?
#變數賦值
aa = /home/weblogic/ods_data/data/·ls /home/weblogic/ods_data/data/·
呼叫變數 ${aa}
uj5u.com熱心網友回復:
load data
characterset UTF8
truncate into table O_HX_KYZB_XJKHDZ
REENABLE DISABLED_CONSTRAINTS
fields terminated by '~@~'
trailing nullcols
(FARENDMA ,
LAOKEHUH ,
XINKEHUH ,
KEHUZWMC ,
KEHUYWMC
)
這是其中的一個CTL檔案,每個檔案夾下大概有三百個這個檔案,現在TXT檔案存在放目錄:/home/weblogic/ods_data/data/hx下,hx這個子目錄名稱是隨時變化的,現在要把這個隨時變化的目錄名稱添加到表的最后一列,具體用shell如何操作?
二樓的朋友給了個思路,如果把trailing nullcols (a,b,c CONSTANT 'HJM' )中的'HJM'替換為一個可以執行的取值命令呢,不知道可以嗎?
#變數賦值
aa = /home/weblogic/ods_data/data/·ls /home/weblogic/ods_data/data/·
呼叫變數 ${aa}
就是在ctl檔案里,有一個欄位的值是變數,怎么賦值給他,你說的是在ctl檔案添加一個變數賦值么,我這樣試過還是報錯
LOAD DATA
CHARACTERSET UTF8
TRUNCATE INTO TABLE O_HX_KAPP_HUOBCS
REENABLE DISABLED_CONSTRAINTS
FIELDS TERMINATED BY '~@~'
aa=`ls /home/weblogic/ods_data/data`
TRAILING NULLCOLS
(FARENDMA ,
FENHBIOS ,
BZBIEMNG ,
HUOBDAIH ,
HBMCHENG ,
HUOBZMSX ,
HUOBFHAO ,
GUOBIEDM ,
FUBIJINW ,
PJZDWEIS ,
ZUIXHBDW ,
ZUIXJXDW ,
ZUIXJZDW ,
ZJFENWEI ,
XJINQXXE ,
HUOBIDJI ,
JIARUBZZ ,
BIZHONGG ,
YINGLBHB ,
SHENMING ,
WEIHGUIY ,
WEIHJIGO ,
WEIHRIQI ,
WEIHSHIJ ,
SHIJCHUO ,
JILUZTAI ,
test CONSTANT ${aa}
)
uj5u.com熱心網友回復:
可以考慮 動態生成控制檔案;uj5u.com熱心網友回復:
可以考慮 動態生成控制檔案;
不能在控制檔案即ctl檔案里把變數值賦值給欄位嗎,考慮到控制檔案大概在300左右,不知道動態生成控制檔案方便么?
uj5u.com熱心網友回復:
不能在控制檔案即ctl檔案里把變數值賦值給欄位嗎,考慮到控制檔案大概在300左右,不知道動態生成控制檔案方便么?
變數的值,要傳過去才可以,到了控制檔案中,要變成常量;
uj5u.com熱心網友回復:
想了下,你的ctl檔案里面不能用這樣的變數的,這個變數是shell里面的,傳入ctl里面的要是常量,想辦法替換ctl最后一行,這個用shell是可以實作的轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/109234.html
標籤:開發
