hive中transform的标准语法是下面这样的:
- select transform(x, y, z....) using 'xxx.py' as (xx, yy, zz....) from ....
其中,xyz为待处理的字段,xxx.py即为我们的python脚本。
在执行上面这个hiveql语句之前,需要将相应的脚本文件添加到环境中。
使用add file xxx.py即可,这里的文件名不能加引号。
python脚本可以采用下面这个框架:
- def main():
- try:
- for line in sys.stdin:
- n = line.strip()
- #your code here...
- print n
- except:
- return None
- if __name__ == "__main__":
- main()
hive会将每一行数据输出到python程序的标准输入中,处理完毕后,python将结果直接打印到标准输出,整个流程就完毕了。
写完脚本后一定要注意测试,直接在命令行下手动输入数据,看看程序处理是否正常。
这一点很重要,如果python程序本身有bug,则在hive语句执行的时候,会抛出broken piple之类异常,这类问题非常隐蔽,需额外注意。而且
python文件本身一定要加可执行权限chmod +x abc.py
另外,select中的所有字段,最好全部包含在transform中,否则可能会出现莫名其妙的错误。