Hive 通过shell动态生成SQL

本文介绍了如何使用Hive结合Shell脚本动态生成SQL,以解决Hive中null值在导出到关系型数据库时可能出现的问题。通过示例展示了一个脚本,该脚本接受表名作为参数,生成的SQL语句能将Hive表中的null值转换为字符串,避免在导入数据库时因类型不匹配导致的错误。
摘要由CSDN通过智能技术生成

        在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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值