【问题标题】:Hive SQL Cross Join Question on conditionHive SQL 交叉连接问题的条件
【发布时间】:2020-10-11 00:44:13
【问题描述】:

宇宙的奇妙编码员,我有一个问题:

我正在编写一个 HIVE SQL 脚本,我想知道是否可以在一个条件下交叉连接(下面的条件是星期几是星期五),或者是否有一个性能轻的替代方案我在下面做。 我只需要在周五的日期中添加 2 行,这只是周六和周日的周五日期数据的持久性。我在连接条件上收到错误,但我想知道是否有可能以某种方式绕过它。

为了清楚起见,下面编写查询的方式给了我一个错误(特别是 DAYOFWEEK(performance_end_date) = 6)。只是想知道是否有一种方法可以在语法被接受的地方写这个。

请指教。

  select 
portfolio_name
,Cast(Date_add(a.performance_end_date, crs.crs) AS TIMESTAMP) AS performance_end_date 
,return
,nav
,nav_id
,row_no

from
(
SELECT portfolio_name, performance_end_date, return, cast(cast(nav as decimal(20,2))as string) as nav, nav_id
,row_number() over (partition by a.portfolio_code,a.performance_end_date order by a.nav_id desc) as row_no
FROM carsales a
WHERE  
portfolio_code IN ('1994','2078','2155','2365','2367')
and
year=2020 and month=09


) a
      
CROSS JOIN (SELECT stack(2, 1,2) as crs) crs     and DAYOFWEEK(performance_end_date) = 6
           where a.row_no = 1

【问题讨论】:

    标签: sql postgresql optimization hive hiveql


    【解决方案1】:

    CROSS JOIN 没有“加入条件”,因此将您的条件移至 where 子句

    CROSS JOIN (SELECT stack(2, 1,2) as crs) crs
               where a.row_no = 1 and DAYOFWEEK(performance_end_date) = 6
    

    【讨论】:

    • 如果我只希望交叉联接在 day of week = 6 时适用,否则只在原始表中生成正常数量的行,这不可能吗?如果我将它添加到 where 子句中,这只会带来周五的
    • 然后尝试一些技巧:LEFT JOIN (SELECT stack(2, 1,2) as crs, 6 as myday) crs ON DAYOFWEEK(performance_end_date) = crs.myday where a.row_no = 1
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2020-08-20
    • 2013-05-24
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多