「hivejava查询」java查询hive数据
今天给各位分享hivejava查询的知识,其中也会对java查询hive数据进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、hive是sql还是java语言
- 2、java.sql.SQLException: Failed to execute session hooks: over max connections.
- 3、查询hive中有哪些自定义函数
- 4、如何在Java中执行Hive命令或HiveQL
- 5、java中怎么实现查询出hive下所有数据库下表名
- 6、如何将hive查询结果导出成txt文件
hive是sql还是java语言
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行
java.sql.SQLException: Failed to execute session hooks: over max connections.
over max connections.!这个是具体的异常,你是不是打开连接用完之后都不关闭的?
查询hive中有哪些自定义函数
如何在HIVE中使用自己定义的函数,可以有几种方式:
1.在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数
2.在进入HIVE会话之前先自动执行创建function,不用用户手工创建
3.把自定义的函数写到系统函数中,使之成为HIVE的一个默认函数,这样就不需要create temporary function
--------------------------------------------------------------------------------
1.在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数
hive ADD JAR /home/hugh.wangp/UDFMd5.jar;
Added /home/hugh.wangp/UDFMd5.jar to class path
hive CREATE TEMPORARY FUNCTION udfmd5 AS 'udf.UDFMd5';
OK
Time taken: 0.014 seconds
hive select udfmd5('a') from dual;
OK
0cc175b9c0f1b6a831c399e269772661
这种方式的弊端是:每次打开新的会话,就要重新执行一遍如上的add jar和create temporary function的命令。对普通的业务分析人员未免要求太高。第二种方法可以把业务人员释放出来
--------------------------------------------------------------------------------
2.在进入HIVE会话之前先自动执行创建function
HIVE命令有个参数-i:在进入会话,待用户输入自己的HQL之前,先执行-i的参数。我们只需要把add jar和create temporary function的命令写到一个文件中,并把这个文件传到-i的参数,如此一来省去了每次要手工创建的工作。
但是这种方式也有个弊端,当我增添HIVE的gateway,就要拷贝一份这个文件,有时候遗漏真是不可避免的。第三种方法应该就是一个终极方案,只要HIVE本身代码不做修改,或者不删除特定的功能,这个函数就能一直用,而且可以把他作为HIVE的默认函数那样使用
--------------------------------------------------------------------------------
3.把自定义的函数写到系统函数中,使之成为HIVE的一个默认函数
a.编写自己的UDF/UDAF/UDTF,并把代码放到$HIVE_HOME/src/ql/src/java/org/apache/Hadoop/hive/ql/udf/路径下
b.修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
以HIVE自带函数Trim()举例,自定义函数操作一样。
第一步:
写UDF代码UDFTrim.java并放到$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFTrim.java
第二步:
修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java文件
a.import org.apache.hadoop.hive.ql.udf.UDFTrim;
b.registerUDF("trim", UDFTrim.class, false);
虽然这种方法是一劳永逸的方法,但是一旦错了,对整个HIVE使用都是灾难性的,所以不是特别通用的自定义函数还是采用前两种,一旦通用的自定义函数累计到一定程度,再去采用第三种方法。
更多相关内容可参考
如何在Java中执行Hive命令或HiveQL
String sql="show tables; select * from test_tb limit 10";
ListString command = new ArrayListString();
command.add("hive");
command.add("-e");
command.add(sql);
ListString results = new ArrayListString();
ProcessBuilder hiveProcessBuilder = new ProcessBuilder(command);
hiveProcess = hiveProcessBuilder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(
hiveProcess.getInputStream()));
String data = null;
while ((data = br.readLine()) != null) {
results.add(data);
}
java中怎么实现查询出hive下所有数据库下表名
try {
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
String selectSql = "select * from db.data where address = '11111111'";
Connection connect = DriverManager.getConnection("jdbc:hive://192.168.xx.xx:10000/db", "xxx", "xxx");
PreparedStatement state = null;
state = connect.prepareStatement(selectSql);
ResultSet resultSet = state.executeQuery();
while (resultSet != null resultSet.next()) {
System.out.println(resultSet.getString(1) + " " + resultSet.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
}
如何将hive查询结果导出成txt文件
最近在使用hive时,需要将hive查询的数据导出到本地文件系统,HQL语法如下:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
查询结果导出到本地文件后,试图使用excel加载时遇上了麻烦:不知道hive导出文件时使用的分隔符,
使用文本编辑器打开也显示乱码。
最后在官方文档上找了半天才发现,hive使用 ^A 符号作为域的分隔符,原文如下:
Data written to the filesystem is serialized as text with columns separated by ^A
在python中可以使用line.split('\x01')来进行切分,也可以使用line.split('\001'),注意其中是单引号
在java中可以使用split("\\u0001")来进行切分
如果确实需要将查询结果导出到本地文件,最好使用hive的命令:
[sql] view plaincopy在CODE上查看代码片派生到我的代码片
bin/hive -e "select * from test" res.csv
或者是:
bin/hive -f sql.q res.csv
其中文件sql.q写入你想要执行的查询语句
这问题在使用hive hql streaming时也会遇到,当你使用hql strreaming 将输出直接写入到hdfs目录,然后你在该目录上创建hive 外部表时,hive的输出结果会将streaming 的key和value之间的分隔符修改为 \001,所以,在hql streaming和输出为hive 外部表时,最好将streaming的最后输出的分隔符修改为\001,并且hive外部表的分隔符应该设置为\001,注意:不要使用^A和\x01,如:
[html] view plaincopy在CODE上查看代码片派生到我的代码片
create external table site_user_mapping_info_month(uid String,tag string,project_ids string,site_interests string) PARTITIONED BY(year String, month String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LOCATION '/project/site_grouping/site_user_mapping_info_month';
关于hivejava查询和java查询hive数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2023-03-22,除非注明,否则均为
原创文章,转载请注明出处。