[HADOOP] Presto에서 JSON 배열을 교차 제거하는 방법
HADOOPPresto에서 JSON 배열을 교차 제거하는 방법
주어진 JSON 열을 포함하는 테이블 :
{"payload":[{"type":"b","value":"9"}, {"type":"a","value":"8"}]}
{"payload":[{"type":"c","value":"7"}, {"type":"b","value":"3"}]}
Presto 쿼리를 작성하여 모든 항목에 평균 b 값을 부여하려면 어떻게해야합니까?
지금까지 나는 하이브의 측면보기가 폭발하는 것을 사용할 필요가 있다고 생각합니다. 그와 동등한 것은 Presto에서 교차 결합이없는 것입니다.
하지만 Cross join undest에 대한 Presto 쿼리를 작성하는 방법에 대해 고민하고 있습니다.
교차 배열 결합을 사용하여 모든 배열 요소를 확장하고 선택하려면 어떻게합니까?
해결법
-
==============================
1.여기에 그 예가 있습니다.
여기에 그 예가 있습니다.
with example(message) as ( VALUES (json '{"payload":[{"type":"b","value":"9"},{"type":"a","value":"8"}]}'), (json '{"payload":[{"type":"c","value":"7"}, {"type":"b","value":"3"}]}') ) SELECT n.type, avg(n.value) FROM example CROSS JOIN UNNEST( CAST( JSON_EXTRACT(message,'$.payload') as ARRAY(ROW(type VARCHAR, value INTEGER)) ) ) as x(n) WHERE n.type = 'b' GROUP BY n.type
with는 메시지로 앨리어스 된 컬럼이있는 example이라는 이름의 공통 테이블 표현식 (CTE)을 정의합니다.
VALUES는 축약 된 테이블 행 집합을 반환합니다.
UNNEST는 단일 행의 열에서 배열을 가져 와서 배열의 요소를 여러 행으로 반환합니다.
CAST는 JSON 유형을 UNNEST에 필요한 ARRAY 유형으로 변경합니다. 그것은 쉽게 ARRAY
-
==============================
2.당신이 지적했듯이, 이것은 Presto 0.79에서 최종적으로 구현되었습니다. :)
당신이 지적했듯이, 이것은 Presto 0.79에서 최종적으로 구현되었습니다. :)
다음은 여기에서 캐스트의 구문 예입니다.
select cast(cast ('[1,2,3]' as json) as array<bigint>);
Hive에있는 것처럼 Presto에는 'string'유형이 없습니다. 즉, 배열에 문자열이 포함되어있는 경우 type 'varchar'를 사용해야합니다. 그렇지 않으면 'type array does not exist'라는 오류 메시지가 나타나 오도 할 수 있습니다.
select cast(cast ('["1","2","3"]' as json) as array<varchar>);
-
==============================
3.문제는 이전 버전의 Presto를 실행하고 있다는 것입니다.
문제는 이전 버전의 Presto를 실행하고 있다는 것입니다.
unnest는 버전 0.79에서 추가되었습니다.
https://github.com/facebook/presto/blob/50081273a9e8c4d7b9d851425211c71bfaf8a34e/presto-docs/src/main/sphinx/release/release-0.79.rst
from https://stackoverflow.com/questions/29932950/how-to-cross-join-unnest-a-json-array-in-presto by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 클러스터에서 Mapper 입력으로 로컬 파일 시스템 디렉토리 실행 (0) | 2019.06.22 |
---|---|
[HADOOP] 다음 필드는 무엇입니까? 'totalSize'및 'rawDataSize'는 하이브의 DESCRIBE EXTENDED 쿼리 출력에서의 의미입니까? (0) | 2019.06.22 |
[HADOOP] Hadoop에서 HDFS 위치 란 무엇입니까? (0) | 2019.06.22 |
[HADOOP] 값을 사용하여 스파크 결과 내림차순 튜플을 정렬하는 법 (0) | 2019.06.22 |
[HADOOP] 어떻게 hadoop 순차 파일을 읽는가? (0) | 2019.06.22 |