您的位置:首页 > 健康 > 美食 > b站投流推广_邯郸网站建设唯辛ls15227_网站模板怎么建站_盛大游戏优化大师

b站投流推广_邯郸网站建设唯辛ls15227_网站模板怎么建站_盛大游戏优化大师

2024/10/11 3:52:57 来源:https://blog.csdn.net/m0_58076578/article/details/142696361  浏览:    关键词:b站投流推广_邯郸网站建设唯辛ls15227_网站模板怎么建站_盛大游戏优化大师
b站投流推广_邯郸网站建设唯辛ls15227_网站模板怎么建站_盛大游戏优化大师

一、JSON 数据

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在不同的编程语言之间进行数据传输时非常通用和常用。JSON 格式简单直观,易于阅读和编写,并且可以被大多数编程语言轻松解析和生成。

1. JSON 特点

  1. 轻量级:JSON 的格式简单,数据量较小,适合网络传输。
  2. 可读性强:JSON 使用键值对来表示数据,非常直观,易于人类阅读和编写。
  3. 广泛支持:几乎所有的编程语言(如 JavaScript、Python、Java、C# 等)都支持 JSON,并且有内置或第三方库可以方便地解析和生成 JSON 数据。

2. JSON 的语法

  • 对象:由 {} 包围,使用键值对表示数据,键和值之间用冒号 : 分隔,键值对之间用逗号 , 分隔。

    {"name": "John Doe","age": 30,"email": "john.doe@example.com"
    }
    
  • 值的类型:可以是字符串、数字、对象、数组、布尔值(true/false)或 null,甚至可以继续嵌套json。

    {"string": "hello","number": 123,"object": {"key": "value"},"array": [1, 2, 3],"boolean": true,"null_value": null
    }
    

3. JSON 在 Hive 中的使用

在 Hive 中,处理 JSON 数据非常常见,可以使用 get_json_object() 等函数来解析和提取 JSON 数据中的信息。

get_json_object()

get_json_object() 函数用于从 JSON 字符串中提取指定路径的数据。

示例数据文件

假设有一个名为 users.json 的文件,内容如下:

1,{"name": "John", "age": 30}
2,{"name": "Jane", "age": 25}
导入数据到 Hive 表

首先,我们创建一个表 users 并将数据导入到该表中:

-- 创建表
CREATE TABLE users (user_id INT,user_info STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';-- 加载数据
LOAD DATA LOCAL INPATH '/path/to/users.json' INTO TABLE users;

然后,使用 get_json_object() 从 JSON 字符串中提取用户的名称和年龄:

SELECTuser_id,get_json_object(user_info, '$.name') as name,get_json_object(user_info, '$.age') as age
FROMusers;
示例结果
user_idnameage
1John30
2Jane25

二、HIVE的JSON 数据处理

在本案例中,我们将介绍如何从JSON格式的数据中提取时间、城市和人名,并将提取的数据进行进一步处理。

示例数据格式

数据表 yizu 中的 cot 字段示例:

1   {"time": 1672531199000, "sex": "male", "searchValue": [{"province": "广东", "city": "深圳"}, "张三"]}
2   {"time": 1672531199001, "sex": "female", "searchValue": [{"province": "北京", "city": "北京"}, "李四"]}
3   {"time": 1672531199002, "sex": "male", "searchValue": [{"province": "上海", "city": "上海"}, "王五"]}
4   {"time": 1672531199003, "sex": "female", "searchValue": [{"province": "江苏", "city": "南京"}, "赵六"]}
5   {"time": 1672531199004, "sex": "male", "searchValue": [{"province": "浙江", "city": "杭州"}, "孙七"]}

第一步:提取数据

  1. 提取时间
SELECT FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)) AS time
FROM yizu;

结果:

+---------------------+
|        time         |
+---------------------+
| 2023-01-01 00:59:59 |
| 2023-01-01 01:00:00 |
| 2023-01-01 01:00:01 |
| 2023-01-01 01:00:02 |
| 2023-01-01 01:00:03 |
+---------------------+
  1. 提取城市
SELECT get_json_object(cot, '$.searchValue[0].city') AS city
FROM yizu;

结果:

+--------+
|  city  |
+--------+
|  深圳  |
|  北京  |
|  上海  |
|  南京  |
|  杭州  |
+--------+
  1. 提取人名
SELECT get_json_object(cot, '$.searchValue[1]') AS name
FROM yizu;

结果:

+------+
| name |
+------+
| 张三 |
| 李四 |
| 王五 |
| 赵六 |
| 孙七 |
+------+
  1. 整合查询
SELECT FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)) AS time,get_json_object(cot, '$.searchValue[0].city') AS city,get_json_object(cot, '$.searchValue[1]') AS name
FROM yizu;

结果:

+---------------------+--------+------+
|        time         |  city  | name |
+---------------------+--------+------+
| 2023-01-01 00:59:59 |  深圳  | 张三 |
| 2023-01-01 01:00:00 |  北京  | 李四 |
| 2023-01-01 01:00:01 |  上海  | 王五 |
| 2023-01-01 01:00:02 |  南京  | 赵六 |
| 2023-01-01 01:00:03 |  杭州  | 孙七 |
+---------------------+--------+------+

第二步:数据处理

  1. 使用concat_ws将数据合并为字符串
SELECT concat_ws(',', FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)),get_json_object(cot, '$.searchValue[0].city'),get_json_object(cot, '$.searchValue[1]')) AS new_c
FROM yizu;

结果:

+-----------------------+
|         new_c         |
+-----------------------+
| 2023-01-01 00:59:59,深圳,张三 |
| 2023-01-01 01:00:00,北京,李四 |
| 2023-01-01 01:00:01,上海,王五 |
| 2023-01-01 01:00:02,南京,赵六 |
| 2023-01-01 01:00:03,杭州,孙七 |
+-----------------------+
  1. 使用split将字符串切割为数组
SELECT split(concat_ws(',',FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)),get_json_object(cot, '$.searchValue[0].city'),get_json_object(cot, '$.searchValue[1]')), ',') AS new_c
FROM yizu;

结果:

+------------------------------------------------+
|                    new_c                       |
+------------------------------------------------+
| ["2023-01-01 00:59:59", "深圳", "张三"]         |
| ["2023-01-01 01:00:00", "北京", "李四"]         |
| ["2023-01-01 01:00:01", "上海", "王五"]         |
| ["2023-01-01 01:00:02", "南京", "赵六"]         |
| ["2023-01-01 01:00:03", "杭州", "孙七"]         |
+------------------------------------------------+
  1. 使用explode将数组转换为多行显示
SELECT id, c1
FROM (SELECT id,split(concat_ws(',',FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)),get_json_object(cot, '$.searchValue[0].city'),get_json_object(cot, '$.searchValue[1]')), ',') AS new_cFROM yizu
) a
LATERAL VIEW EXPLODE(new_c) lv AS c1;

结果:

+----+-------------------+
| id |        c1         |
+----+-------------------+
|  1 | 2023-01-01 00:59:59|
|  1 | 深圳              |
|  1 | 张三              |
|  2 | 2023-01-01 01:00:00|
|  2 | 北京              |
|  2 | 李四              |
|  3 | 2023-01-01 01:00:01|
|  3 | 上海              |
|  3 | 王五              |
|  4 | 2023-01-01 01:00:02|
|  4 | 南京              |
|  4 | 赵六              |
|  5 | 2023-01-01 01:00:03|
|  5 | 杭州              |
|  5 | 孙七              |
+----+-------------------+

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com