使用java在impala表中插入数据

Posted

技术标签:

【中文标题】使用java在impala表中插入数据【英文标题】:Insert data in impala table using java 【发布时间】:2014-05-14 11:30:09 【问题描述】:

我已使用sqoopmysql 表复制到hdfs 中,然后使用“create external table”命令在impala 中创建了同名表。

现在我有更多数据要使用 Impala 的 java api 插入到 impala 表中,即 ImpalaService.jar。请帮我在表格中使用java api 插入数据。

谢谢。

【问题讨论】:

【参考方案1】:

使用 ImpalaService.jar 您可以发送一条插入语句,例如:

# java -cp ../deps/libthrift-0.9.1.jar:../deps/slf4j.api-1.6.1.jar:./deps/slf4j-simple-.6.1.jar:../jar/ImpalaService.jar:./jar/ImpalaConnectTest.jar org.ImpalaConnectTest.ImpalaConnectTest localhost  21050 "insert into foo values (1,'message 1')"
Result size = 0
#

然后,您可以通过以下方式使用 ImpalaService.jar 检查结果:

# java -cp ../deps/libthrift-0.9.1.jar:../deps/slf4j.api-1.6.1.jar:./deps/slf4j-simple-.6.1.jar:../jar/ImpalaService.jar:./jar/ImpalaConnectTest.jar org.ImpalaConnectTest.ImpalaConnectTest localhost  21050 "select * from foo"
Result size = 1
TRow(colVals:[<TColumnValue i32Val:TI32Value(value:1)>, <TColumnValue stringVal:TStringValue(value:message 1)>])
# 

或使用 Impala-shell:

[root@dub-vcd-vms165 ~]# impala-shell
Starting Impala Shell without Kerberos authentication
Connected to XXXXXX
Server version: impalad version cdh5-1.3.0 RELEASE (build 40e1b62cf0b97f666d084d9509bf9639c575068c)
Welcome to the Impala shell. Press TAB twice to see a list of available commands.

Copyright (c) 2012 Cloudera, Inc. All rights reserved.

(Shell build version: Impala Shell vcdh5-1.3.0 (40e1b62) built on Tue Mar 25 13:46:44 PDT 2014)
[XXXXXX:21000] > select * from foo;
Query: select * from foo
+----+-----------+
| id | msg       |
+----+-----------+
| 1  | message 1 |
+----+-----------+
Returned 3 row(s) in 0.62s
[XXXXXX:21000] >

注意:如果要插入多条数据,则可以将 ImpalaService.jar 修改为更精细的解决方案,通过使用参数指定包含要插入的所有记录的数据源来执行多个插入语句.

Ref1:https://github.com/pauldeschacht/impala-java-client

Ref2:https://github.com/pauldeschacht/impala-java-client/blob/master/test/src/org/ImpalaConnectTest.java

【讨论】:

以上是关于使用java在impala表中插入数据的主要内容,如果未能解决你的问题,请参考以下文章

根据数据类型和列名在 impala 表中插入记录

Hive/Impala批量插入数据

如何在 Impala 中插入 Array<Struct> 值?

如何在 Impala 表中插入无穷大

如何在hadoop环境中创建的表中插入多条记录

使用 R JDBC 将数据插入到 Impala