SQL QUALIFY 等效 HIVE 查询

SQL QUALIFY equivalent HIVE query

我正在尝试从 Oracle SQL query 创建 HIVE query。本质上我想要 select 第一条记录,按 UPDATED_TM, DATETIME, ID_NUM.

排序 descending
SELECT 
  tbl1.NUM AS ID,
  tbl1.UNIT AS UNIT,  
  tbl2.VALUE AS VALUE,
  tbl1.CONTACT AS CONTACT_NAME,
  'FILE' AS SOURCE,
  CURDATE() AS DATE
FROM
  DB1.TBL1 tbl1
  LEFT JOIN DB1.TBL2 tbl2 ON tbl1.USR_ID = tbl2.USR_ID
WHERE
  tbl1.UNIT IS NOT NULL
  AND tbl1.TYPE = 'Generic'
QUALIFY 
  ROW_NUMBER() OVER (PARTITION BY tbl1.ROW_ID ORDER BY tbl1.UPDATED_TM DESC, tbl1.DATETIME DESC, tbl1.ID_NUM DESC) = 1

以及我对等效 Hive query(但也 sql 兼容)的尝试:

SELECT 
  tbl1.NUM AS ID,
  tbl1.UNIT AS UNIT,  
  tbl2.VALUE AS VALUE,
  tbl1.CONTACT AS CONTACT_NAME,
  'FILE' AS SOURCE,
  CURDATE() AS DATE
FROM (
  SELECT 
    USR_ID, TYPE, NUM, UNIT, ROW_NUMBER() OVER (PARTITION BY tbl1.ROW_ID ORDER BY tbl1.UPDATED_TM DESC, tbl1.DATETIME DESC, tbl1.ID_NUM DESC) AS RNUM
  FROM 
    DB1.TBL1
  ) tbl1
  LEFT JOIN DB1.TBL2 tbl2 ON tbl1.USR_ID = tbl2.USR_ID
WHERE
  tbl1.RNUM = 1
  AND tbl1.UNIT IS NOT NULL
  AND tbl1.TYPE = 'Generic'

这看起来正确吗?有什么办法可以优化查询吗?我正在使用的表非常大,我想尽可能提高效率。

谢谢。

    SELECT 
  tbl1.NUM AS ID,
  tbl1.UNIT AS UNIT,  
  tbl2.VALUE AS VALUE,
  tbl1.CONTACT AS CONTACT_NAME,
  'FILE' AS SOURCE,
  CURDATE() AS DATE
FROM
(
SELECT 
    USR_ID, TYPE, NUM, UNIT, ROW_NUMBER() OVER (PARTITION BY tbl.ROW_ID ORDER BY tbl.UPDATED_TM DESC, tbl.DATETIME DESC, tbl.ID_NUM DESC) AS RNUM
FROM
    (
        SELECT 
                USR_ID,TYPE,NUM,UNIT,ROW_ID,UPDATED_TM,DATETIME,ID_NUM 
            FROM DB1.TBL1
        WHERE UNIT IS NOT NULL 
        AND TYPE = 'Generic'
    )tbl
)tbl1
LEFT OUTER JOIN
DB1.TBL2 tbl2
ON tbl1.USR_ID = tbl2.USR_ID
WHERE tbl1.RNUM = 1;