我想从程序的输出加载数据,但不是现有的数据文件。这就是我想要的:
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
方法。还有另一种方法吗?
答案 0 :(得分:0)
我过去使用的是Hadoop HDFS Rest Api (http://hadoop.apache.org/docs/r1.0.4/webhdfs.html)。我从shell运行我的程序(.py),然后通过Api将数据推送到HDFS / Hive。如果已设置Hive表,则可以覆盖现有的Hive文件。
我使用的另一种方法是程序(.py,.sh等)将数据创建为临时文件,然后您可以使用Hive命令添加该文件,然后删除临时文件。
修改强>:
为了回应您的评论,说您无法访问shell,您可以尝试利用Hive中的自定义Map / Reduce功能(https://cwiki.apache.org/confluence/display/Hive/Tutorial滚动到底部的'自定义地图/ Reduce Scripts')并传入map - 减少一些要忽略的虚拟数据,并以reduce的形式编写.py脚本,然后让它发出所需的数据。