0
JSON形式の文字列を格納する1つの列を持つデータベーステーブルがあります。文字列自体には、配列のようなマルチプル要素が含まれています。各要素には、複数のキーと値のペアが含まれます。いくつかの値には、複数のキーと値のペアも含めることができます(たとえば、下記の「address」属性など)。コラム「情報」についてはHIVE、配列から要素を取得する方法、要素自体も配列です
People table:
Col1 Col2 ..... info
aaa bbb see below
、それは次のようなJSON形式の文字列が含まれています
[{"name":"abc",
"address":{"street":"str1", "city":"c1"},
"phone":"1234567"
},
{"name":"def",
"address":{"street":"str2", "city":"c1", "county":"ct"},
"phone":"7145895"
}
]
私はJSON文字列内の各フィールドの単一の値を取得する必要があります。私の質問は、私は、「アドレス」フィールド内の各フィールドを取得する方法である
SELECT
get_json_object(person, '$.name') AS name,
get_json_object(person, '$.phone') AS phone,
get_json_object(person, '$.address') AS addr
FROM people lateral view explode(split(regexp_replace(
regexp_replace(info, '\\}\\,\\{', '\\}\\\\n\\{'), '\\[|\\]',''), '\\\\n'))
p as person;
:以下に示すようにI)は、(爆発呼び出すことで、「アドレス」フィールドを除くすべてのフィールドのことを行うことができると思います。 「アドレス」フィールドには任意の数のキーと値のペアを含めることができ、JSONSerDeは使用できません。私は別のexplode()呼び出しを使うことを考えていますが、動作させることはできません。誰かが助けてくれますか?どうもありがとう。