set hivevar:start_date=2019-01-01;
set hivevar:end_date=2019-10-31;
with date_range as
(--this query generates date range with order number, max i=303 for this range
select date_add ('${hivevar:start_date}',s.i) as dt, i
from ( select posexplode(split(space(datediff('${hivevar:end_date}','${hivevar:start_date}')),' ')) as (i,x) ) s
)
--join range generated with random number 0..303(check max in date_range)
select d.dt from date_range d inner join (select floor(RAND()*100.0)%304 as i) r on d.i=r.i;
1条答案
按热度按时间sqyvllje1#
使用
floor(rand*100)%N+1
您可以生成范围为1..的随机自然数。。n。如果随机数是一位数,则使用lpad将前导0加上两个gigigits字符串,如01、02。演示:
结果:
添加date()函数以解决不同月份中28、30-31天的问题。date()将无效日期转换为最接近的有效日期:例如,date('2019-02-31')返回2019-03-03
总之:
结果:
另一个选项是用订单号生成所需的日期范围,并用随机数连接:
结果:
都是在Hive里测试的。