2012-07-07 4 views
30

에서 구조체의 배열을 폭발이 위의 테이블 -나는 아래의 출력을 얻을 수있는 방법이 있나요이 하이브 표 아래</p> <pre><code>CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable ( USER_ID BIGINT, NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>> ) </code></pre> <p>입니다 하이브

1015826235  [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}] 

의 데이터입니다 배열을 폭발시킨 후 HiveQL에서?

**USER_ID** | **PRODUCT_ID** | **TIMESTAMPS** 
------------+------------------+---------------- 
1015826235  220003038067  1340321132000 
1015826235  300003861266  1340271857000 

내가 위의 형식으로 출력을 얻을 수있는이 쿼리를 작성

업데이트, 그러나 그것은 나에게 내가 원했던 방식으로 결과를 제공하지 않습니다.

SELECT myTable1.myCol1,myTable2.myCol2 FROM sampletable st LATERAL VIEW 
explode(st.purchased_item.product_id) myTable1 AS myCol1 LATERAL VIEW 
explode(st.purchased_item.timestamps) myTable2 AS myCol2; 

내가 뭘 잘못하고있는 걸 도와 줄 수 있습니까? 모든 제안을 주시면 감사하겠습니다.

+0

어때? sampletable는 측면도 prod_and_ts 같은 폭발 (NEW_ITEM) exploded_table에서 타임 스탬프로 USER_ID, PRODUCT_ID 같은 prod_and_ts.product_id, prod_and_ts.timestamps을 선택 ; –

+0

@ Mark, Thanks Mark, 그게 효과가 있었어, 받아 들일 수 있도록 대답으로 게시 할 수 있니? 그리고 당신은 또한이 SO 질문에 대해 살펴 보시기 바랍니다. [http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-using-hiveqlhadoop](http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive- using-hiveqlhadoop). 아무도이 질문에 아직 대답하지 않았습니다. 나에게 큰 도움이 될 것이다. 시간 내 줘서 고마워. – ferhan

+0

도움이 되니 기쁩니다. 답변을 게시했습니다. 곧 다른 질문을 볼 것입니다! –

답변

63

한 번만 폭발시켜야합니다 (LATERAL VIEW와 함께). 폭발 후에는 구조체 유형의 새 열 (예 : prod_and_ts)을 사용할 수 있습니다. 그런 다음이 새로운 struct 열의 product_id 및 timestamps 멤버를 확인하여 원하는 결과를 검색 할 수 있습니다.

SELECT 
    user_id, 
    prod_and_ts.product_id as product_id, 
    prod_and_ts.timestamps as timestamps 
FROM 
    SampleTable 
    LATERAL VIEW explode(new_item) exploded_table as prod_and_ts; 
+0

의 배열을 만드는 것을 도울 수 있다면 정말 도움이 될 것입니다. 그리고 성능 측정과 관련된 이론적 질문의 종류가 더 많아서 내가 게시 한 질문이 하나 더 있습니다. [http://stackoverflow.com/questions/11404163 /custom-mapper-and-reducer-vs-hiveql] (http://stackoverflow.com/questions/11404163/custom-mapper-and-reducer-vs-hiveql). 내가 너무 귀찮다면 사과드립니다. BIG DATA의 전문가가 많지 않습니다. 그래서 내가 너에게 핑 소리를 내고있다. 정말 당신의 모든 도움을 감사 ... – ferhan

+0

안녕하세요, 모든 도움을 주셔서 감사합니다. 나는 Explive Array of Struct와 관련된 유사한 질문을 Hive에 올렸지 만, 이번에는 somehwat 데이터가 다릅니다. 그게 가능하다면 좀 봐 주시겠습니까? [http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql](http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql) – ferhan

+0

안녕하세요. Mark, 다중 배열 > 열에 대해 어떻게 분해하고 뷰를 만들 수 있습니까? 내 요청에 도움주세요 제발 http://stackoverflow.com/questions/37282646/how-to-create-view-for-struct-fields-in-hive –

10

하이브 0.10 이상인 경우 inline(ARRAY<STRUCT[,STRUCT]>)을 사용할 수도 있습니다. 구조체의 배열을 테이블로 분해합니다.

+0

유용한 답변이지만 질문에 완전히 답하지는 못합니다. 이렇게하면 최상위 필드 'USER_ID'가 결과에 포함되지 않습니다. – jkukul