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>&1

FILE_SIZE_LIST=(`cat ${TMP_PATH}_FILE_SIZE_LIST_$$`)
for FILE_SIZE in ${FILE_SIZE_LIST[@]}; do
    if [ ${FILE_SIZE} -eq 0 ]
    then
        log_error "文件size为0。文件:${s3uri_received}${IF_FILE_NAME}"
        exit 1
    fi
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>&1
  if [ $? -ne 0 ]
  then
    log_error "TRUNCATE失败。../sql/${IF_FILE_NAME}_TRUN.sql"
    exit 1
  fi
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_$$.sql

copy.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 
  CSV
  DELIMITER '    ' 
  FORCE NULL
    usr_id
  , usr_name
  , reg_ymdhms
  , upd_ymdhms
  , upd_id
  ENCODING '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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值