이 테이블이 있습니다. 내가 싶어하는 각 행에 대해입니다하이브에서 2 행 중에서 계산하는 방법은 무엇입니까?
+------------------------------------------------------------+
| ks | time | val1 | val2 |
+-------------+---------------+---------------+--------------+
| A | 1 | 1 | 1 |
| B | 1 | 3 | 5 |
| A | 2 | 6 | 7 |
| B | 2 | 10 | 12 |
| A | 4 | 6 | 7 |
| B | 4 | 20 | 26 |
+------------------------------------------------------------+
,
ks | time | val1 | val1 of next ts of same ks |
가 명확하게하려면, 위의 예제의 결과는
+------------------------------------------------------------+
| ks | time | val1 | next.val1 |
+-------------+---------------+---------------+--------------+
| A | 1 | 1 | 6 |
| B | 1 | 3 | 10 |
| A | 2 | 6 | 6 |
| B | 2 | 10 | 20 |
| A | 4 | 6 | null |
| B | 4 | 20 | null |
+------------------------------------------------------------+
(나는 값 2에 대해 동일한 다음을 필요로해야한다 뿐만 아니라)
나는 이것에 대한 하이브 쿼리를 내놓기 위해 많은 노력을했지만 여전히 운이 없다. 내가 쿼리 here (Quassnoi의 대답) 언급 한 바와 같이 SQL에 대한 쿼리를 작성할 수 있지만 하이브가 하위 쿼리를 지원하지 않기 때문에 하이브에 상응하는 항목을 만들 수 없습니다.
누군가가 도와 드릴 수 있습니까?
미리 감사드립니다.
편집 : 나는 시도
쿼리
SELECT ks, time, val1, next[0] as next.val1 from
(SELECT ks, time, val1
COALESCE(
(
SELECT Val1, time
FROM myTable mi
WHERE mi.val1 > m.val1 AND mi.ks = m.ks
ORDER BY time
LIMIT 1
), CAST(0 AS BIGINT)) AS next
FROM myTable m
ORDER BY time) t2;
내게 귀하의 질의를 표시 –
질문이 업데이트되었습니다. 감사. – Bee
아래에 언급 된 추가 요구 사항을 반영하여 질문과 예제를 업데이트하십시오. 감사. –