取消
顯示的結果
而不是尋找
你的意思是:

提取數據從一個多層次的JSON對象

aschiff
因素二世

我有一個表在磚叫做owner_final_delta列聯係人保存數據和這個結構:

數組< struct <地址:struct <公寓:字符串,城市:字符串,房子:字符串,poBox:字符串,來源:數組<字符串>,狀態:字符串,街:字符串類型:字符串,郵政編碼:string >,地址:數組< struct <公寓:字符串,城市:字符串,房子:字符串,lastSeen:字符串,poBox:字符串,來源:數組<字符串>,狀態:字符串,街:字符串類型:字符串,郵政編碼:string > >, contactKey:字符串,郵件:數組< struct < emailId:字符串,lastSeen:字符串,來源:數組<字符串> > >,lastModifiedDate:字符串,名字:struct < <字符串> firstname:數組,lastname:數組<字符串>,middleNames:數組<字符串>,禮:數組<字符串>,後綴:數組<字符串> >,電話:數組< struct <擴展:字符串,lastSeen:字符串,線型:字符串、數字:字符串,來源:數組<字符串>,validSince: string > >,關係:字符串,來源:數組<字符串> > >

由此,我想提取emailId。我可以提取聯係人。電子郵件是一個數組,其中包含的emailId本身也可以是一個數組(如果有多個郵件綁定到一個記錄)。下麵是一個例子,一個記錄從contacts.emails回來。類似於業務/公司聯係。所以每個元素在聯係人。電子郵件數組是一個人在業務/公司。此外,每個人可以擁有多個電子郵件(emailId)。

數組

  • 0:[{“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“來源”:“REONOMY”}, {“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“來源”:“REONOMY”}, {“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“源”(“REONOMY”)}):
  • 1:[{“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“來源”:[“SNL”、“REONOMY”]}, {“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“來源”:“REONOMY”}, {“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“源”(“REONOMY”)}):
  • 2:[{“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“來源”:“REONOMY”}, {“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“來源”:“REONOMY”}, {“emailId”:“(電子郵件保護)”、“lastSeen”:“10月12日,2021年6:51:33點”、“源”(“REONOMY”)}):

我想實現的是一個列emailId emailId每一行。在上麵的例子中,我想這一個記錄分成9行,每個emailId一個。我試著使用get_json_object但必須做錯了什麼。

選擇get_json_object (cast(聯係人。電子郵件作為字符串),從owner_final_delta emailId .emailId美元)

我試著上麵的查詢以及其他變化像使用STR()或聯係人。郵件[0]美元或聯係人。電子郵件和他們都遇到編譯錯誤或返回null值。我寧願一個解決方案使用SQL(所以它可以很容易地用於表),但任何解決方案的工作。

24日回複24

給你。好運!

這對我來說工作(見專欄“emailIds”輸出):

% sql select(聚合(contacts_parsed爆炸。電子郵件、陣列(”),(acc, x) - > array_union (acc、轉換(x, y,我)- > y.emailId))、acc - > array_remove (acc,”))) emailIds *從(選擇from_json(聯係人、”“數組”< struct <地址:struct <公寓:字符串,城市:字符串,房子:字符串,poBox:字符串,來源:數組<字符串>,狀態:字符串,街:字符串類型:字符串,郵政編碼:string >,地址:數組< struct <公寓:字符串,城市:字符串,房子:字符串,lastSeen:字符串,poBox:字符串,來源:數組<字符串>,狀態:字符串,街:字符串類型:字符串,郵政編碼:string > >, contactKey:字符串,郵件:數組< struct < emailId:字符串,lastSeen:字符串,來源:數組<字符串> > >,lastModifiedDate:字符串,名字:struct < firstname:數組<字符串>,lastname:數組<字符串>,middleNames:數組<字符串>,禮:數組<字符串>,後綴:數組<字符串> >,電話:數組< struct <擴展:字符串,lastSeen:字符串,線型:字符串、數字:字符串,來源:數組<字符串>,validSince: string > >,關係:字符串,來源:數組<字符串> > > " " ")contacts_parsed,從owner_final_delta *)

我試著你的確切代碼:圖像並且仍然得到類型不匹配錯誤:

圖像

這看起來不是解析這很有趣。你是使用最新的磚在集群運行時?

同時,這一部分給你錯誤嗎?

選擇from_json(聯係人”、“數組”< struct <地址:struct <公寓:字符串,城市:字符串,房子:字符串,poBox:字符串,來源:數組<字符串>,狀態:字符串,街:字符串類型:字符串,郵政編碼:string >,地址:數組< struct <公寓:字符串,城市:字符串,房子:字符串,lastSeen:字符串,poBox:字符串,來源:數組<字符串>,狀態:字符串,街:字符串類型:字符串,郵政編碼:string > >, contactKey:字符串,郵件:數組< struct < emailId:字符串,lastSeen:字符串,來源:數組<字符串> > >,lastModifiedDate:字符串,名字:struct < <字符串> firstname:數組,lastname:數組<字符串>,middleNames:數組<字符串>,禮:數組<字符串>,後綴:數組<字符串> >,電話:數組< struct <擴展:字符串,lastSeen:字符串,線型:字符串、數字:字符串,來源:數組<字符串>,validSince: string > >,關係:字符串,來源:數組<字符串> > > " " ")contacts_parsed,從owner_final_delta *

如果它正確地解析輸出“contacts_parsed”專欄應該向您展示一個箭頭在每個單元的左上部分,列指向正確的。你點擊它,它分解碎片在json文件中。

我的集群在磚11.0運行時,火花3.3.0和Scala 2.12是的那部分給我的錯誤。

圖像

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map