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) 我在Hive中寻找内置的String拆分功能?例如,如果是
A | B | C | d |电子
那么我想要一个像数组拆分的功能(字符串输入,字符分隔符)
所以我回来了[A,B,C,D,E].
Hive中是否存在这样的内置拆分功能.我只能看到regexp_extract和regexp_replace.我很想看到indexOf()和split()字符串函数.
谢谢
阿贾伊
这是下面的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)
任何人都可以帮我解决我的错误吗?任何建议将不胜感激.
我正在尝试构建hive-0.13.
使用时-Dmaven.test.skip=true,它不会构建测试jar,但会检查测试依赖性.
使用时-DskipTests,它不会构建测试jar,也不会检查测试依赖性.
-DskipTests和之间有什么区别-Dmaven.test.skip=true?
我用java代码运行hive查询.例:
"SELECT*FROM table WHERE id> 100"
如何将结果导出到hdfs文件.
有可能做一个
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中的以下技巧从表中获取列名:
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原则.
有没有办法将重复项保存在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) 我尝试在树莓派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合作的帮助或任何解释将不胜感激!
因为这是来自新手......
我为我设置了Hadoop和Hive,因此我可以在计算机上运行Hive查询来访问AWS集群上的数据.我可以使用存储在计算机上的.csv数据运行Hive查询,就像我使用MS SQL Server一样吗?
如何将.csv数据加载到Hive中呢?它与Hadoop有什么关系以及我应该运行哪种模式?
我应该关注什么设置,这样如果我做错了什么我总是可以回去在亚马逊上运行查询而不会影响之前为我设置的内容?