web-dev-qa-db-ja.com

Hiveのjson文字列から選択した値を抽出する方法

Hiveで単純なクエリを実行して、次の出力を生成します(他のいくつかの追加の列を含む)。

|------|-----------------------------------------------------------|
| col1 | col2                                                      |
|------|-----------------------------------------------------------|
|   A  | {"variable1":123,"variable2":456,"variable3":789}         |                                          
|------|-----------------------------------------------------------|
|   B  | {"variable1":222,"variable2":333,"variable3":444}         |
--------------------------------------------------------------------

SELECTステートメント自体の間にjson文字列を解析し、各トークンの値を引き出すことができる必要があります。これにより、WHEREステートメントを組み込んで、自分にとって価値のある文字列の部分のみを返すことができます。

したがって、私の最終的な出力は次のようになります。

|------------------------------------------|
| col1 |variable1 | variable2 | variable3  |                                      
|------------------------------------------|
|  A   |   123    |    456    |    789     |                                    
|------------------------------------------|
|  B   |   222    |    333    |    444     |
--------------------------------------------

Esnaplesで指定された引数構造を使用して、SPLITとGET_JSON_OBJECTを含める際にさまざまな関数を使用しようとしましたが、すべて次のようなエラーが返されます。

No matching method for class org.Apache.hadoop.Hive.ql.udf.UDFJson 
with (struct<...>, string). Possible choices: _FUNC_(string, string)

誰かが私がやろうとしていることが実行可能かどうか、または私がどこで間違っているのかを説明してもらえますか?

前もって感謝します

6
jimiclapton
select col1, get_json_object(col2,'$.variable1') as variable1,
get_json_object(col2,'$.variable2') as variable2,
get_json_object(col2,'$.variable3') as variable3 
from json_test

出力をテーブル(json_testなど)に配置すると、この方法で解析できます。クエリを微調整して、これらの結果を取得することもできます。

出力:

col1 |variable1 |variable2 |variable3 |
-----|----------|----------|----------|
A    |123       |456       |789       |
B    |222       |333       |444       |
10
Prabhat Ratnala

ステップ1:

create table in Hive
create table json_student(student string)  

-----load data in this table
Hive>select * from json_variable;`enter code here`
       {"col1":"A","variable1":123,"variable2":456,"variable3":789}
       {"col1":"B","variable1":222,"variable2":333,"variable3":444}

ステップ2:

create table  json_variable1(col1 string,variable1 int,variable2 int,variable3 int);

ステップ3:

insert overwrite table json_variable1 
select get_json_object(variable,'$.col1'),get_json_object(variable,'$.variable1'),get_json_object(variable,'$.variable2'),get_json_object(variable,'$.variable3') from json_variable;

Hive> Select * from json_variable1;    
A       123     456     789`    `
B       222     333     444`

`