2017-08-23 10 views
0

これは私が例えば私の外部表JSONserdeのJSON配列から兄弟の値にアクセスするには?

CREATE EXTERNAL TABLE raw_marketing_other.facebook_ad_cost_dtl_hrly (
    ... 
    linkClick : int 
    pageEngagement : int 
... 
) 

の特定の列に各action_typeの値をマッピングしたい

... 
    "actions": [ 
     { 
     "action_type": "link_click", 
     "value": "1" 
     }, 
     { 
     "action_type": "page_engagement", 
     "value": "1" 
     }, 
     { 
     "action_type": "post_engagement", 
     "value": "1" 
     }, 
     ..... 
    ] 
    } 
... 

linkClick列があります私のJSONある を考えますそのjsonオブジェクトから派生した1の値。

質問 これはserdePropertiesのマッピングで可能ですか?このようなもの。

create table ... 
... 
ROW FORMAT serde 'org.openx.data.jsonserde.JsonSerDe' 
WITH serdeproperties(
    "mapping.linkClick" = "actions[action_type="link_click].value", 
... 

:アクション[ACTION_TYPEが= "link_click]" は、その条件にJSONオブジェクトの最初の発生を返すことを意味しますか?

カスタムマッピングでは不可能な場合は、代替ソリューションがありますか?

参考文献: https://github.com/rcongiu/Hive-JSON-Serde

答えて

1

私はちょうどであるように、データをロードしget_json_object UDFを使用して、それを照会します。これらの線に沿って

何か:好奇心のうち

SELECT * 
FROM my_table 
WHERE get_json_object(json_column, '$.actions.action_type') = 'link_click'; 
+0

、JSONの場合{アクション:{ "ABC": "123"}}。 "mapping.linkClick" = "actions.abc"を実行してserdePropertiesを使用できますか? – Eternalcode

関連する問題