我的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) 我需要找到多个双数据类型列的中位数.请求建议找到正确的方法.
下面是我的一个列的示例数据集.我期待我的样本中值返回为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) 我需要从hive结构中的所有列中选择*.
Hive创建表脚本如下所示
从表中选择*将每个结构显示为从表中选择*列
我的要求是将结构集合的所有字段显示为配置单元中的列.
用户不必单独编写列名.有没有人有UDF这样做?
我试图收集一个带有NULL
s 的列以及该列中的一些值...但collect_list
忽略NULL
s并仅收集其中包含值的值.有没有办法检索NULL
s和其他值?
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解决方案看起来像这样.
我需要在 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
hive-udf ×5
hive ×3
hadoop ×2
apache-hive ×1
apache-spark ×1
bigdata ×1
hiveql ×1
struct ×1
timezone ×1
udf ×1