如何在一个查询中从具有非null值和前500条记录的两列中检索配置单元表中的数据



我有一个单元单元表(my_table(,它是ORC格式的,有30列。其中两列(col_us、col_ds(存储的数值可以是0、null或某个整数。这张表是按天和小时划分的。该表在一天的分区中有大约800万x 96条记录,我指的是15个每天的分区

目前,我正在运行单独的查询,以使用秩函数检索值大于0的前500条记录。一个查询检索col_us,另一个查询用于col_ds

clo_US可能有一个数值,而col_DS为0或空

问题:我想从一个查询中的每一列中检索前500个非null和非0记录。

我的查询:

From(
SELECT D.COL_US, D.DATESTAMP,
ROW_NUMBER() OVER (PARTITION BY D.ID,D.SUB_ID ORDER BY CONCAT (D.DATESTAMP,D.HOURSTAMP,D.TIMESTAMP) DESC) AS RNK
FROM ${wf_table_name} D
WHERE DATESTAMP >= '${datestamp_15}' AND DATESTAMP < '${datestamp}' 
AND COL_US > 0)T
INSERT OVERWRITE TABLE ${wf_us_table}
SELECT T.COL_US, T.DATESTAMP, T.RNK WHERE T.RNK < 500;

根据您的查询,我可以猜测您正试图根据日期/时间从表中获取前500行,这意味着最新的500行,其中col_us和col_ds的值都大于0,但不是每列的前500行。根据您的问题,您的表格可能有两种类型的值。例如

col_us

0

10
5

col_ds

5

10

0

或者两列的值都可以大于0。因此,在WHERE子句下使用"AND(COL_US>0和COL_ds>0("而不是"AND COL_US>0"但在这种情况下,您将不会从上述4行中获得任何值。因此,如果你想从col_us中得到10,5和5,10col_ds,那么我应该说,使用单个查询是不可能的。

同样,根据您的问题所述,"我想从一个查询中的每一列中检索前500个非null和非0记录。",我猜你想从col_us中获得前500条记录,col_ds取决于col_us/col_ds的值,那么你必须在rank子句中使用这些列,而不是日期/时间。

您想要检索的内容可能会根据其他可用列通过UPDATE查询获得,但在此之前,我想请求您与您的基表和目标表结构一起分享您想要的内容(基于col_us/col_ds或最新的500(。

相关内容

最新更新