有没有办法不在select transform()中包含所有列以获取输出中的所有列?
例如: 我在hive表中有列,如:
c1, c2, c3, c4, c5, c6, c7, c8, c9, c10
我正在对列c8, c9, c10
执行转换,并且输出包含c1, c2, c3, c4, c5, c6, c7, co
,其中co
=在对列c8, c9, c10
执行转换后输出
我有办法做到这一点:
select transform (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10)
using 'python udf_name'
as (c1,c2,c3,c4,c5,c6,c7,co)
from table_name;
问题是我不想传递select变换中的所有列,因为我的表中有近900列,并且很难弄清楚UDF在哪些列上工作。
示例:
#temp
c1, c2, c3, c4
a, 1, 0, 5
b, , 8, 9
现在我想从列c2, c3, c4
中找到第一个非零非空值
并用列c1打印它
这是python UDF
test.py:
import sys
for line in sys.stdin:
line=line.strip()
c=line.split()
l=len(c)
for i in range (1,l):
try:
if (int(c[i])==0):
pass
else:
print c[i]
break
except ValueError:
pass
我可以通过传递所有列
来实现这一目标select transform (c1,c2,c3,c4)
using 'python test.py'
as (c1,co)
from temp
输出:
c1, co
a, 1
b, 8
问题: 我不想传递select变换中的所有列,因为我有900列。
基本上我只想传递UDF中涉及的那些列而不是所有列。