在Hive中,我們經常需要從JSON中獲取數據。Hive提供了一種使用get_json_object函數從JSON字符串中獲取指定節點的方法。
get_json_object函數接收兩個參數:JSON字符串和目標節點的路徑。節點路徑可以使用點號分割子節點,也可以使用方括號表示數組節點。
SELECT get_json_object(json_string, '$.name') as name, get_json_object(json_string, '$.age') as age, get_json_object(json_string, '$.address.city') as city FROM my_table;
在上面的例子中,我們從my_table表中獲取JSON字符串,并使用get_json_object函數獲取'name'、'age'和'address.city'節點的值。
如果JSON字符串中包含數組,我們可以通過下標來獲取特定索引的元素:
SELECT get_json_object(json_string, '$.students[0].name') as name, get_json_object(json_string, '$.students[1].name') as name FROM my_table;
在上面的例子中,我們從my_table表中獲取JSON字符串,并使用get_json_object函數獲取第一個和第二個學生的名字。
get_json_object函數還可以與其他Hive函數結合使用,例如CAST函數將字符串轉換為整數或日期函數將字符串轉換為日期。
SELECT get_json_object(json_string, '$.age') as age, CAST(get_json_object(json_string, '$.amount') AS int) as amount, FROM_UNIXTIME(UNIX_TIMESTAMP(get_json_object(json_string, '$.date'), 'yyyy-MM-dd')) as date FROM my_table;
在上面的例子中,我們從my_table表中獲取JSON字符串,并使用get_json_object函數獲取'age'、'amount'和'date'節點的值。然后,我們使用CAST函數將'amount'轉換為整數,使用UNIX_TIMESTAMP函數將'date'轉換為時間戳,最后使用FROM_UNIXTIME函數將時間戳轉換為日期。
總之,get_json_object函數是Hive中從JSON字符串中獲取值的強大工具。它可以方便地從復雜的JSON結構中提取數據,并與其他Hive函數結合使用。