在Hadoop上向Hive插入数据

3

我正在使用redhat5中的hadoop-1.0.4和hive-0.10.0。服务已成功启动。我可以轻松创建、删除、选择表格,但不知道如何插入数据。

例如,我有两个文本框,当点击按钮时,我想将数据存储在表格(userInfo)中。我不知道如何将文本框的值存储在userInfo(id,password)中。

private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";


try {
          Class.forName(driverName);
        } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          System.exit(1);
        }
        Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/enggheads","", "");
        Statement stmt = con.createStatement();
        String tableName = "testHiveDriverTable";
        stmt.executeQuery("drop table " + tableName);
        ResultSet res = stmt.executeQuery("create table " + tableName + " (key int, value string)");
        // show tables
        String sql = "show tables '" + tableName + "'";
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        if (res.next()) {
          System.out.println(res.getString(1));
        }

这是Java代码,但是我不知道如何插入两个字段的值,因为Hive插入语法与MySQL或其他数据库语法不同。


我认为您可以使用JDBC驱动程序连接到Hive数据库,并插入来自前端的值。 - Balaswamy Vaddeman
是的,我正在使用JDBC驱动程序,也尝试通过前端插入数据。但我找不到插入两个字段的插入查询语句。我还编辑了我的问题并粘贴了代码。 - ruchi
插入到表tblname(columnlist)中选择列列表从双重中可能起作用。其中dual是一个行,一个列的虚拟表。 - Balaswamy Vaddeman
谢谢Balaswamy,但我没有一个虚拟表。在搜索后,我发现只有通过(txt或csv文件)或通过另一个表才能在Hive中进行插入。是否有必要创建虚拟表进行插入? - ruchi
要将数据插入表中,我们可以从文件或选择查询中加载数据。由于这里没有文件可用,所以我们需要从虚拟表中选取数据。因此,插入数据的语句应该类似于“insert into table userinfo select idvalue, pwdvalue from dual”。为此,在Hive数据库中需要有一个虚拟表。 - Balaswamy Vaddeman
显示剩余3条评论
1个回答

1
在Hive中创建一个虚拟表,如下所示:
create table dummy(dummy string) location '/path';

上述路径将有一个包含数据X的文件。

现在像下面这样从jdbc驱动程序运行插入查询。

insert into table tblname select forntendvalue1,frontendvalue2 from dual;

谢谢,它正在工作,但我想知道这些虚拟表是否存在于路径中?因为我无法在给定的路径上看到这个表。 - ruchi
还有一个问题,如果我在不同的表中添加数据,是否也要创建一个新的虚拟表?这些虚拟表会占用空间吗? - ruchi
一个虚拟表可以用于所有,它们不占用太多空间,使用"hadoop fs -dus /path"命令检查空间。 - Balaswamy Vaddeman
我正在使用创建虚拟表的语法 - create table dummy (id int, name string) location '/path'; 那么如何知道虚拟表中的总行数和列数? - ruchi
是的,我知道分区列不是主列的一部分。但你有什么办法解决插入问题(32行同时插入)吗? - ruchi
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接