标签: hiveql

在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万
查看次数

java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.metastore.HiveMetaStoreClient

我已经在链接上配置了我的Hive:http://www.youtube.com/watch?v = Dqo1ahdBK_A,但是在Hive中创建表时出现以下错误.我使用hadoop-1.2.1和hive-0.12.0.

hive> create table employee(emp_id int,name string,salary double);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
Run Code Online (Sandbox Code Playgroud)

hive hiveql hive-metastore

33
推荐指数
3
解决办法
8万
查看次数

PySpark:withColumn()有两个条件和三个结果

我正在使用Spark和PySpark.我试图实现相当于以下伪代码的结果:

df = df.withColumn('new_column', 
    IF fruit1 == fruit2 THEN 1, ELSE 0. IF fruit1 IS NULL OR fruit2 IS NULL 3.)
Run Code Online (Sandbox Code Playgroud)

我试图在PySpark中这样做,但我不确定语法.有什么指针吗?我调查expr()但无法让它工作.

请注意,这df是一个pyspark.sql.dataframe.DataFrame.

hive hiveql apache-spark apache-spark-sql pyspark

29
推荐指数
3
解决办法
9万
查看次数

如何计算Hive的中位数

我有一个蜂巢桌,

name    age     sal
A       45      1222
B       50      4555
c       44      8888
D       78      1222
E       12      7888
F       23      4555
Run Code Online (Sandbox Code Playgroud)

我想计算年龄栏的中位数.

以下是我的方法

select min(age) as HMIN,max(age) as HMAX,count(age) as HCount,
IF(count(age)%2=0,'even','Odd') as PCOUNT 
from v_act_subjects_bh;
Run Code Online (Sandbox Code Playgroud)

感谢任何查询建议

hive hiveql

28
推荐指数
1
解决办法
4万
查看次数

在hive表中加载时跳过第一行csv

你好朋友,

我借助以下命令在hive中创建了表 -

CREATE TABLE db.test 
  ( 
     fname STRING, 
     lname STRING, 
     age   STRING, 
     mob   BIGINT 
  ) row format delimited fields terminated BY '\t' stored AS textfile; 
Run Code Online (Sandbox Code Playgroud)

现在从文件加载表中的数据,我使用以下命令 -

load data local inpath '/home/cluster/TestHive.csv' into table db.test;
Run Code Online (Sandbox Code Playgroud)

问题是,所有行都插入了,我不想要第一行,因为它只包含列名.

请建议我跳过第一行的方法.

提前致谢.

hadoop hive hiveql

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

将hive表从一个数据库传输到另一个数据库

我需要将一个hive表从一个数据库移动到另一个数据库.我怎样才能做到这一点?

hive hiveql

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

在HIVE QL的表格中添加一列

我在HIVE中编写代码来创建一个包含1300行和6列的表:

create table test1 as SELECT cd_screen_function,
     SUM(access_count) AS max_count,
     MIN(response_time_min) as response_time_min,
     AVG(response_time_avg) as response_time_avg,
     MAX(response_time_max) as response_time_max,
     SUM(response_time_tot) as response_time_tot,
     COUNT(*) as row_count
     FROM sheet WHERE  ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
     unix_timestamp('2012-11-30 00:00:00') and cd_office = '016'
     GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一列,access_count1其中包含所有1300行的唯一值,值将是sum(max_count).max_count是我现有表中的一列.我怎么能这样做?我试图通过此代码更改表ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

hadoop hive hiveql

26
推荐指数
1
解决办法
11万
查看次数

-hivevar和-hiveconf有什么区别?

来自hive -h:

--hiveconf <property=value>   Use value for given property
--hivevar <key=value>         Variable subsitution to apply to hive
                                  commands. e.g. --hivevar A=B
Run Code Online (Sandbox Code Playgroud)

hadoop hive hiveql

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

在Hive中选择前2行

我在这里是个noobie.我正在尝试根据hive中的工资(版本0.11)从我的员工列表中检索前2个表.既然它不支持TOP功能,还有其他选择吗?或者我们是否定义了UDF?

hadoop hive hiveql

22
推荐指数
1
解决办法
8万
查看次数

在Spark SQL表中分解(转置?)多个列

我正在使用Spark SQL(我提到它是在Spark中,以防影响SQL语法 - 我还不够熟悉)我有一个表,我试图重新构建,但我是卡住试图同时转置多个列.

基本上我的数据看起来像:

userId    someString      varA     varB
   1      "example1"    [0,2,5]   [1,2,9]
   2      "example2"    [1,20,5]  [9,null,6]
Run Code Online (Sandbox Code Playgroud)

我想同时爆炸varA和varB(长度总是一致的) - 所以最终输出如下所示:

userId    someString      varA     varB
   1      "example1"       0         1
   1      "example1"       2         2
   1      "example1"       5         9
   2      "example2"       1         9
   2      "example2"       20       null
   2      "example2"       5         6
Run Code Online (Sandbox Code Playgroud)

但我似乎只能在一个命令中使用单个explode(var)语句,如果我尝试链接它们(即在第一个explode命令之后创建临时表),那么我显然会得到大量重复,不必要的行.

非常感谢!

sql hiveql apache-spark apache-spark-sql

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