Hive 如何在蜂巢中使用weekofyear生成唯一的weekid
我有一张表,我只是在重复50年的日期 使用weekofyear(“日期”)->week\u no\u in\u this\u year的值 我想用(week\u no\u in\u this\u year)创建一个列,它在一周内应该是唯一的。将其命名为->week\u id 这应该是年+两位数的周+本年的否+一些数字(使此id在一周内唯一)。我尝试如下:Hive 如何在蜂巢中使用weekofyear生成唯一的weekid,hive,hiveql,Hive,Hiveql,我有一张表,我只是在重复50年的日期 使用weekofyear(“日期”)->week\u no\u in\u this\u year的值 我想用(week\u no\u in\u this\u year)创建一个列,它在一周内应该是唯一的。将其命名为->week\u id 这应该是年+两位数的周+本年的否+一些数字(使此id在一周内唯一)。我尝试如下: concat(concat,YEAR,IF(week_no_in_this_YEAR这种情况只发生在给定年份(即12月31日)结束时的年份之间
concat(concat,YEAR,IF(week_no_in_this_YEAR这种情况只发生在给定年份(即12月31日)结束时的年份之间存在分割,并且周数将过渡到下一年。如果我们为这种情况设置条件,那么我们将得到您期望的结果 右函数与substr(,-n)相同
一种方法是使用UDF mypy.py
import sys
import datetime
for line in sys.stdin:
line = line.strip()
(y,m,d) = line.split("-")
d = datetime.date(int(y),int(m),int(d)).isocalendar()
print str(d[0])+str(d[1])
蜂房
add file hdfs:/user/cloudera/mypy.py;
select transform("2019-1-1") using "python mypy.py" as (week_id);
INFO : OK
+----------+--+
| week_id |
+----------+--+
| 20191 |
+----------+--+
select transform("2019-12-30") using "python mypy.py" as (week_id)
+----------+--+
| week_id |
+----------+--+
| 20201 |
+----------+--+
1 row selected (33.413 seconds)
感谢您的回复,但问题没有得到解决。例如:2019-12-31、2019-01-01日期的结果仍然是-2019012我更新了我的答案以处理年底的问题。谢谢。我想向您澄清我的确切问题,在hive中,如何查找从周开始的年份(日期)结果?Ex1:“2019-01-01”属于2019年第一周,Ex2:“2019-12-30”“属于2020年第1周。因此,我将结合这两个结果创建一个专栏。上述场景所需的结果(示例)-Ex1:201901 Ex2:202001。感谢Bala的回答。但是,我正在生成日历数据,而不是查询现有的表。我不能在生成日历表时使用udf。我计划在月=12&weekofyear=1增量年+1其他年时尝试一个案例陈述。我希望通过一些小的更改简化我的问题,下面的示例如下s-在hive中如何从weekofyear(date)结果中查找年份?>Ex1:“2019-01-01”属于2019年第1周,>Ex2:“2019-12-30”属于2020年第1周。因此,我将通过合并这两个结果创建一列。上述场景所需的结果(示例)-Ex1:201901 Ex2:202001。检查我的更新答案。@jeevankishore你无法从weekofyear中获取年份。weekofyear只是一个介于1-53之间的数字。为什么不使用year(date)?@Bala:我知道没有这样的预定义方法来从weekofyear中获取年份。因此,我尝试了任何可能的方法。2)year(date)如果你清楚地回答了我的问题,我不会给出预期的结果。
import sys
import datetime
for line in sys.stdin:
line = line.strip()
(y,m,d) = line.split("-")
d = datetime.date(int(y),int(m),int(d)).isocalendar()
print str(d[0])+str(d[1])
add file hdfs:/user/cloudera/mypy.py;
select transform("2019-1-1") using "python mypy.py" as (week_id);
INFO : OK
+----------+--+
| week_id |
+----------+--+
| 20191 |
+----------+--+
select transform("2019-12-30") using "python mypy.py" as (week_id)
+----------+--+
| week_id |
+----------+--+
| 20201 |
+----------+--+
1 row selected (33.413 seconds)