HiveQL에 해당하는 MySQL 쿼리를 가져 오려고합니다.하이브 쿼리가 작동하지 않습니다.
는 MySQL의에서이 같은 테이블을 가지고 :
CREATE TABLE votes (
user_id INT,
list_id INT,
node_id INT,
direction STRING
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
내가 하이브 테이블에 MySQL의 테이블에서 6 개 행을 복사 :
CREATE TABLE votes(
user_id INT UNSIGNED NOT NULL,
list_id INT UNSIGNED NOT NULL,
node_id INT UNSIGNED NOT NULL,
direction ENUM('UP', 'DOWN') NOT NULL,
PRIMARY KEY (user_id, list_id, node_id)
) ENGINE=innodb;
내가 사용 하이브에서 유사한 테이블을 만들었습니다. 그래서 하이브에서, 나는 가지고 :
hive> SELECT * FROM votes;
OK
28 390 400058 "UP"
28 390 400059 "DOWN"
90113 390 400058 "DOWN"
90113 390 400059 "UP"
323694 390 400058 "UP"
323694 390 400059 "UP"
Time taken: 0.059 seconds, Fetched: 6 row(s)
다음 문은 MySQL의에서 잘 작동 : 같은 문에 정확한 수를 제공하지 않습니다 그러나
390 400058 390 400058 2 0 0 1
390 400058 390 400059 1 1 1 0
390 400059 390 400058 1 1 1 0
390 400059 390 400059 2 0 0 1
을 : 출력
SELECT v1.list_id, v1.node_id, v2.list_id, v2.node_id,
SUM(IF(v1.direction="UP" AND v2.direction="UP", 1, 0)) AS uu,
SUM(IF(v1.direction="UP" AND v2.direction="DOWN", 1, 0)) AS ud,
SUM(IF(v1.direction="DOWN" AND v2.direction="UP", 1, 0)) AS du,
SUM(IF(v1.direction="DOWN" AND v2.direction="DOWN", 1, 0)) AS dd
FROM votes v1
JOIN votes v2 ON v1.user_id=v2.user_id
GROUP BY v1.list_id, v1.node_id, v2.list_id, v2.node_id;
하이브 :
hive> SELECT v1.list_id AS lid, v1.node_id AS nid, v2.list_id AS rlid, v2.node_id AS rnid,
> SUM(IF(v1.direction="UP" AND v2.direction="UP", 1, 0)) AS uu,
> SUM(IF(v1.direction="UP" AND v2.direction="DOWN", 1, 0)) AS ud,
> SUM(IF(v1.direction="DOWN" AND v2.direction="UP", 1, 0)) AS du,
> SUM(IF(v1.direction="DOWN" AND v2.direction="DOWN", 1, 0)) AS dd
> FROM votes v1
> JOIN votes v2 ON v1.user_id=v2.user_id
> GROUP BY v1.list_id, v1.node_id, v2.list_id, v2.node_id;
...
Status: Finished successfully
OK
390 400058 390 400058 0 0 0 0
390 400058 390 400059 0 0 0 0
390 400059 390 400058 0 0 0 0
390 400059 390 400059 0 0 0 0
Time taken: 19.127 seconds, Fetched: 4 row(s)
어떻게 해결할 수 있습니까?
또한 나는 누군가가 Hive에서 자체 참여를 피하는 것이 최선이라고 언급 한 게시물을 발견했습니다. 이것이 사실이라면 내가 얻으려는 것을 성취하기 위해 왜 그리고 더 나은 질의를 설명 할 수 있습니까?
실행
나는 하이브 SERDES와이에 대답을 추가했습니다. Pls는 그것에 의견을 추가합니다. –