我想从一个程序的输出加载数据,但不是从一个已有的数据文件。我想要的是:
CREATE TABLE MyTable (
X STRING);
INSERT OVERWRITE MyTable
BY PROGRAM "python MyProgram.py"; -- #!/usr/bin/python
-- print 'hello'
-- print 'world'
SELECT X FROM MyTable; -- I will get 2 records:
-- hello
-- world
但Hive似乎不能提供 INSERT ... BY PROGRAM
方法。有别的办法吗?
1条答案
按热度按时间z31licg01#
我过去使用的是hadoop hdfs restapi(http://hadoop.apache.org/docs/r1.0.4/webhdfs.html). 我从shell运行程序(.py),然后它通过api将数据推入hdfs/hive。如果已经设置了配置单元表,则可以覆盖现有的配置单元文件。
我使用的另一种方法是程序(.py、.sh等)将数据创建到临时文件中,然后可以使用hive命令添加该文件,然后删除临时文件。
编辑:
针对你说你无权进入壳牌的评论,您也许可以尝试利用hive中的自定义map/reduce功能(https://cwiki.apache.org/confluence/display/hive/tutorial 滚动到底部到“CustomMap/reduce scripts”),并将一些要忽略的伪数据传递到map reduce中,然后以reduce的形式编写.py脚本,让它发出所需的数据相反。