Windows 中通过sh导入csv、tsv文件到数据库
生活随笔
收集整理的這篇文章主要介紹了
Windows 中通过sh导入csv、tsv文件到数据库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
注意:路徑需要修改。
s3uri_received=文件存放路徑
IF_FILE_NAME=?文件名。帶“ * ”會匹配指定文件名開頭的所有文件。
DL_PATH=中間文件存放路徑
TMP_PATH=中間文件存放路徑/if_copy_tmp?
刪除空行
sed -i '/^$/d' ${s3uri_received}${IF_FILE_NAME}*獲取文件size 生成列表到指定文件
stat -c%s ${s3uri_received}${IF_FILE_NAME}* 1> ${TMP_PATH}_FILE_SIZE_LIST_$$ 2>&1FILE_SIZE_LIST=(`cat ${TMP_PATH}_FILE_SIZE_LIST_$$`) for FILE_SIZE in ${FILE_SIZE_LIST[@]}; doif [ ${FILE_SIZE} -eq 0 ]thenlog_error "文件size為0。文件:${s3uri_received}${IF_FILE_NAME}"exit 1fi done執行sh時可以傳入TruncateFlag
# TRUNCATE if [ ${DEL_FLG} -eq 1 ] then# 執行指定sql 輸出執行結果到指定文件psql -h ${URL} -p ${PORT} -U ${USERNAME} -d ${DATABASE_NAME} -v ON_ERROR_STOP=1 -A -q -t -f ../sql/${IF_FILE_NAME}_TRUN.sql 1> ${TMP_PATH}_TRUN_SQL_RESULT_$$ 2>&1if [ $? -ne 0 ]thenlog_error "TRUNCATE失敗。../sql/${IF_FILE_NAME}_TRUN.sql"exit 1fi fi編碼轉換
# 例:轉換指定文件到utf-8,新文件名帶UTF8,如果執行發生錯誤,輸出到指定_ICONV_RESULT_文件中。 iconv -f ${code} -t UTF-8 ${DL_PATH}${IF_FILE}_$$ > ${DL_PATH}${IF_FILE}_UTF8_$$ 2> ${TMP_PATH}_ICONV_RESULT_$$?將copy.sql中的 's/%INPUT_FILE%/' 替換為轉換后的文件名,生成結果存放到中間文件中。
cat ../sql/${IF_FILE_NAME}_COPY.sql|sed 's/%INPUT_FILE%/'${IF_FILE}_UTF8_$$'/g' > ${TMP_PATH}_COPY_$$.sqlcopy.sql 大概這樣。tsv需要加?DELIMITER '?? ?' (tab),csv不需要。文件路徑需要修改。
\copy "public".test_user (usr_id, usr_name, reg_ymdhms, upd_ymdhms, upd_id ) FROM 'data/work/%INPUT_FILE%'? WITH?CSVDELIMITER '?? ?'?FORCE NULLusr_id, usr_name, reg_ymdhms, upd_ymdhms, upd_idENCODING 'UTF-8' ;執行sql,將文件導入數據庫
psql -h ${URL} -p ${PORT} -U ${USERNAME} -d ${DATABASE_NAME} -v ON_ERROR_STOP=1 -A -q -t -f ${TMP_PATH}_COPY_$$.sql 1> ${TMP_PATH}_COPY_SQL_RESULT_$$ 2>&1總結
以上是生活随笔為你收集整理的Windows 中通过sh导入csv、tsv文件到数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老板该如何选着程序员帮我做开发?
- 下一篇: 数制