Hive:从程序插入数据而不是数据文件?

时间:2014-02-25 09:09:01

标签: hadoop hive

我想从程序的输出加载数据,但不是现有的数据文件。这就是我想要的:

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 个答案:

答案 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脚本,然后让它发出所需的数据。