标签: hive-udf

如何在HIVE中将日期字符串从UTC转换为特定的TimeZone?

我的Hive表有一个带有UTC日期字符串的日期列.我想得到特定EST日期的所有行.

我想尝试做类似下面的事情:

Select * 
from TableName T
where TO_DATE(ConvertToESTTimeZone(T.date))  = "2014-01-12" 
Run Code Online (Sandbox Code Playgroud)

我想知道ConvertToESTTimeZone是否有函数,或者我是如何实现的?

我尝试了以下但它不起作用(我的默认时区是CST):

TO_DATE(from_utc_timestamp(T.Date) = "2014-01-12" 
TO_DATE( from_utc_timestamp(to_utc_timestamp (unix_timestamp (T.date), 'CST'),'EST'))
Run Code Online (Sandbox Code Playgroud)

提前致谢.

更新:

Strange behavior. When I do this:

select "2014-01-12T15:53:00.000Z", TO_DATE(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP("2014-01-12T15:53:00.000Z", "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"), 'EST')) 
from TABLE_NAME T1
limit 3
Run Code Online (Sandbox Code Playgroud)

我明白了

    _c0                          _c1
0   2014-01-12T15:53:00.000Z    1970-01-16
1   2014-01-12T15:53:00.000Z    1970-01-16
2   2014-01-12T15:53:00.000Z    1970-01-16
Run Code Online (Sandbox Code Playgroud)

timezone hadoop hive bigdata hive-udf

7
推荐指数
1
解决办法
3万
查看次数

在多个双数据类型列中查找spark SQL的中位数

我需要找到多个双数据类型列的中位数.请求建议找到正确的方法.

下面是我的一个列的示例数据集.我期待我的样本中值返回为1.

  scala> sqlContext.sql("select num from test").show();
+---+
|num|
+---+
|0.0|
|0.0|
|1.0|
|1.0|
|1.0|
|1.0|
+---+
Run Code Online (Sandbox Code Playgroud)

我尝试了以下选项

1)Hive UDAF百分位数,它仅适用于BigInt.

2)Hive UDAT percentile_approx,但它不能按预期工作(返回0.25 vs 1).

sqlContext.sql("从test中选择percentile_approx(num,0.5)".show();

+----+
| _c0|
+----+
|0.25|
+----+
Run Code Online (Sandbox Code Playgroud)

3)Spark窗口函数percent_rank-找到中位数我看到的方法是查找高于0.5的所有percent_rank并选择max percent_rank的相应num值.但它并不适用于所有情况,特别是当我有记录计数时,在这种情况下,中位数是排序分布中的中间值的平均值.

同样在percent_rank中,因为我必须找到多列的中位数,我必须在不同的数据帧中计算它,这对我来说是一个很复杂的方法.如果我的理解不对,请纠正我.

+---+-------------+
|num|percent_rank |
+---+-------------+
|0.0|0.0|
|0.0|0.0|
|1.0|0.4|
|1.0|0.4|
|1.0|0.4|
|1.0|0.4|
+---+---+
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-sql hive-udf

6
推荐指数
1
解决办法
3070
查看次数

选择Hive Struct的所有列

我需要从hive结构中的所有列中选择*.

Hive创建表脚本如下所示

创建表脚本

从表中选择*将每个结构显示为从表中选择*

我的要求是将结构集合的所有字段显示为配置单元中的列.

用户不必单独编写列名.有没有人有UDF这样做?

struct hive hive-udf udf apache-hive

6
推荐指数
2
解决办法
7267
查看次数

Hive collect_list()不收集NULL值

我试图收集一个带有NULLs 的列以及该列中的一些值...但collect_list忽略NULLs并仅收集其中包含值的值.有没有办法检索NULLs和其他值?

SELECT col1, col2, collect_list(col3) as col3
FROM (SELECT * FROM table_1 ORDER BY col1, col2, col3)
GROUP BY col1, col2;
Run Code Online (Sandbox Code Playgroud)

实际col3值

0.9
NULL
NULL
0.7
0.6 
Run Code Online (Sandbox Code Playgroud)

产生的col3值

[0.9, 0.7, 0.6]
Run Code Online (Sandbox Code Playgroud)

我希望[0.9, NULL, NULL, 0.7, 0.6]在应用collect_list之后有一个hive解决方案看起来像这样.

hadoop hive hive-udf

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

用于合并数组的 Hive 聚合函数

我需要在 HiveSQL 中合并 GROUP BY 中的数组。表架构是这样的:

key int,
value ARRAY<int>
Run Code Online (Sandbox Code Playgroud)

现在这是我想要运行的 SQL:

SELECT key, array_merge(value)
FROM table_above
GROUP BY key
Run Code Online (Sandbox Code Playgroud)

如果这个 array_merge 函数只保留唯一值,那就更好了,但不是必须的。

干杯,K

hiveql hive-udf

5
推荐指数
1
解决办法
8125
查看次数