Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 如何在蜂巢中使用weekofyear生成唯一的weekid_Hive_Hiveql - Fatal编程技术网

Hive 如何在蜂巢中使用weekofyear生成唯一的weekid

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日)结束时的年份之间

我有一张表,我只是在重复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日)结束时的年份之间存在分割,并且周数将过渡到下一年。如果我们为这种情况设置条件,那么我们将得到您期望的结果

右函数与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)