「hivejava查询」java查询hive数据

博主:adminadmin 2023-03-22 20:10:13 150

今天给各位分享hivejava查询的知识,其中也会对java查询hive数据进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

hive是sql还是java语言

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行

「hivejava查询」java查询hive数据

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数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2023-03-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。