标签: hive

如何通过Python访问Hive?

https://cwiki.apache.org/confluence/display/Hive/HiveClient#HiveClient-Python似乎已过时.

当我将其添加到/ etc/profile时:

export PYTHONPATH=$PYTHONPATH:/usr/lib/hive/lib/py
Run Code Online (Sandbox Code Playgroud)

然后,我可以执行链接中列出的导入,from hive import ThriftHive但实际需要的除外:

from hive_service import ThriftHive
Run Code Online (Sandbox Code Playgroud)

接下来示例中的端口是10000,当我尝试时导致程序挂起.默认的Hive Thrift端口是9083,它停止了悬挂.

所以我这样设置:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
    transport = TSocket.TSocket('<node-with-metastore>', 9083)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = ThriftHive.Client(protocol)
    transport.open()
    client.execute("CREATE TABLE test(c1 int)")

    transport.close()
except Thrift.TException, tx:
    print '%s' % (tx.message)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 68, in execute …
Run Code Online (Sandbox Code Playgroud)

python hadoop hive

44
推荐指数
7
解决办法
15万
查看次数

Hive是否具有String拆分功能?

我在Hive中寻找内置的String拆分功能?例如,如果是

A | B | C | d |电子

那么我想要一个像数组拆分的功能(字符串输入,字符分隔符)

所以我回来了[A,B,C,D,E].

Hive中是否存在这样的内置拆分功能.我只能看到regexp_extract和regexp_replace.我很想看到indexOf()和split()字符串函数.

谢谢

阿贾伊

hadoop hive

41
推荐指数
3
解决办法
10万
查看次数

在Hive中分解Struct数组

这是下面的Hive表

CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable
(
USER_ID BIGINT,
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
Run Code Online (Sandbox Code Playgroud)

这是上表中的数据 -

1015826235     [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}]
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在爆炸阵列后从HiveQL获得以下输出吗?

**USER_ID**  |  **PRODUCT_ID**  |   **TIMESTAMPS**
 ------------+------------------+----------------
1015826235      220003038067       1340321132000
1015826235      300003861266       1340271857000
Run Code Online (Sandbox Code Playgroud)

更新

我写了这个查询以获得上述格式的输出,但它并没有按照我想要的方式给出结果.

SELECT myTable1.myCol1,myTable2.myCol2 FROM sampletable st LATERAL VIEW 
explode(st.purchased_item.product_id) myTable1 AS myCol1 LATERAL VIEW 
explode(st.purchased_item.timestamps) myTable2 AS myCol2;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决我的错误吗?任何建议将不胜感激.

hadoop hive mapreduce hiveql

41
推荐指数
2
解决办法
8万
查看次数

-DskipTests和-Dmaven.test.skip = true之间有什么区别?

我正在尝试构建hive-0.13.

使用时-Dmaven.test.skip=true,它不会构建测试jar,但会检查测试依赖性.

使用时-DskipTests,它不会构建测试jar,也不会检查测试依赖性.

-DskipTests和之间有什么区别-Dmaven.test.skip=true

java hive maven

40
推荐指数
2
解决办法
2万
查看次数

Hive查询输出到文件

我用java代码运行hive查询.例:

"SELECT*FROM table WHERE id> 100"

如何将结果导出到hdfs文件.

hadoop hive

39
推荐指数
3
解决办法
13万
查看次数

使用"as select"或"like"创建配置单元表,并指定分隔符

有可能做一个

create table <mytable> as select <query statement>

运用

row format delimited fields terminated by '|';
Run Code Online (Sandbox Code Playgroud)

或做一个

create table <mytable> like <other_table> row format delimited fields terminated by '|';

语言手册似乎表明没有......但是我曾经在过去做过这件事.

hive create-table sql-like

39
推荐指数
2
解决办法
10万
查看次数

只需从hive表中获取列名

我知道你可以通过hive中的以下技巧从表中获取列名:

hive> set hive.cli.print.header=true;
hive> select * from tablename;
Run Code Online (Sandbox Code Playgroud)

是不是也有可能只是得到从表中的列名?

我不喜欢改变一个我只需要一次的设置.

我目前的解决方案如下:

hive> set hive.cli.print.header=true;
hive> select * from tablename;
hive> set hive.cli.print.header=false;
Run Code Online (Sandbox Code Playgroud)

这看起来过于冗长,反对DRY原则.

sql hadoop hive

38
推荐指数
2
解决办法
8万
查看次数

在Hive中收集COLLECT_SET(),保留重复项?

有没有办法将重复项保存在Hive中的收集集中,或者模拟Hive使用其他方法提供的聚合集合的类型?我想将列中具有相同键的所有项聚合到一个数组中,并重复.

IE:

hash_id | num_of_cats
=====================
ad3jkfk            4
ad3jkfk            4
ad3jkfk            2
fkjh43f            1
fkjh43f            8
fkjh43f            8
rjkhd93            7
rjkhd93            4
rjkhd93            7
Run Code Online (Sandbox Code Playgroud)

应该返回:

hash_agg | cats_aggregate
===========================
ad3jkfk   Array<int>(4,4,2)
fkjh43f   Array<int>(1,8,8)
rjkhd93   Array<int>(7,4,7)
Run Code Online (Sandbox Code Playgroud)

java hadoop hive user-defined-functions

37
推荐指数
4
解决办法
5万
查看次数

Hive安装问题:未初始化Hive Metastore数据库

我尝试在树莓派2上安装配置单元.我通过解压缩压缩的Hive包安装Hive,并在我创建的hduser用户组下手动配置$ HADOOP_HOME和$ HIVE_HOME.运行配置单元时,我收到以下错误消息:配置单元

错误StatusLogger找不到log4j2配置文件.使用默认配置:仅将错误记录到控制台.

线程"main"中的异常java.lang.RuntimeException:未初始化Hive Metastore数据库.请使用schematool(例如./schematool -initSchema -dbType ...)来创建架构.如果需要,不要忘记在JDBC连接字符串中包含自动创建底层数据库的选项(例如,mysql的createDatabaseIfNotExist = true)

所以我运行了上面错误消息中建议的命令:schematool -dbType derby -initSchema我收到了错误消息:

错误:FUNCTION'NUCLEUS_ASCII'已存在.(state = X0Y68,code = 30000)org.apache.hadoop.hive.metastore.HiveMetaException:架构初始化失败!Metastore状态会不一致!! *schemaTool失败*

当我尝试在线谷歌此错误时似乎没有任何有用的信息.任何有关Hive如何与Derby合作的帮助或任何解释将不胜感激!

installation hadoop hive derby

37
推荐指数
3
解决办法
5万
查看次数

Hadoop/Hive:在本地计算机上从.csv加载数据

因为这是来自新手......

我为我设置了Hadoop和Hive,因此我可以在计算机上运行Hive查询来访问AWS集群上的数据.我可以使用存储在计算机上的.csv数据运行Hive查询,就像我使用MS SQL Server一样吗?

如何将.csv数据加载到Hive中呢?它与Hadoop有什么关系以及我应该运行哪种模式?

我应该关注什么设置,这样如果我做错了什么我总是可以回去在亚马逊上运行查询而不会影响之前为我设置的内容?

sql csv hadoop hive amazon-web-services

35
推荐指数
5
解决办法
11万
查看次数