在Hive生成文件通过kettle往关系型数据库导数据时,Hive默认将null转为\n,kettle读取文件并导入数据库时会出现问题,本来在hive中是null,在数据库中变成\n,特别是数字类型,\n会提示类型不能转换,直接报错,想到hive的集群处理能力,所以在hive端先将数据处理好。如果每个表每个字段处理太麻烦,下面这个脚本传入表名,生成select语句直接供hive查询。
#! /bin/sh
sql_select_col="SELECT "
get_sql_select_col(){
select_hive_table_name=$1
echo "DEBUG: table name is: "${select_hive_table_name}
desc_table_cols=$(hive -e "
use pad_hdp;
set mapred.job.queue.name=queue02;
desc ${select_hive_table_name};")
#删除第一行和注释行
desc_table_cols=$(echo "${desc_table_cols}" | grep -Ev "^$|^#.*$|^col_name.*$")
#不能通过管道来操作,while 循环中赋值会有问题
temp_file=`mktemp -u temp.XXXXXX.$$`
echo "$desc_table_cols" > ${temp_file}
while read line
do
lgt=$(expr length "${line}")
if [ ${lgt} -eq 0 ];
then
b