HIVE处理JSON数据:GET

HIVE处理JSON数据:GET,第1张

文章目录
  • 概述
  • 解析JSON的函数
    • GET_JSON_OBJECT
    • JSON_TUPLE函数
  • JSON表
    • 什么是JSON表
    • 示例

概述
  • JSON(JavaScript Object Notation, JS 对象简谱)
    是一种轻量级的数据交换格式
    采用完全独立于编程语言的文本格式来存储和表示数据
  • 样例
{
    "is_del": true,
    "id": {
        "id": "a1"
    },
    "p": [{
        "hp": 9,
        "mp": 7
    }, {
        "hp": 8,
        "mp": 8
    }]
}
解析JSON的函数
  • HIVE版本:3.1.2
CREATE OR REPLACE VIEW v AS
SELECT '{"is_del":true,"id":{"id":"Z"},"p":[{"hp":9,"mp":7},{"hp":8,"mp":8}]}' AS js;
GET_JSON_OBJECT
  • 返回值类型是字符串
  • 可深层解析
SELECT
  GET_JSON_OBJECT(js,'$.is_del'),
  GET_JSON_OBJECT(js,'$.id.id'),
  GET_JSON_OBJECT(js,'$.p[0].hp'),
  GET_JSON_OBJECT(js,'$.p[0].mp'),
  GET_JSON_OBJECT(js,'$.p[1].hp'),
  GET_JSON_OBJECT(js,'$.p[1].mp')
FROM v;

结果

JSON_TUPLE函数
  • 只进行一次解析,比多次调用GET_JSON_OBJECT的效率高
  • UDTF,可以和LATERAL VIEW结合使用
  • 返回值类型是字符串
  • 列名默认值:c0c1c2……
  • 貌似只能解析1层
SELECT JSON_TUPLE(v.js,'is_del','id','p') FROM v;

结果

SELECT t.* FROM v
LATERAL VIEW JSON_TUPLE(v.js,'is_del','id','p')t AS a,b,c;

结果

JSON表 什么是JSON表
  • JSON表是HIVE中的一种存储格式
    是JSON文件格式存储的

  • 4.0.0版本建表语法

STORED AS JSONFILE
  • 3.1.2版本建表语法
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS TEXTFILE
示例
  • 数据样貌
{"is_del":true,"id":{"id":"a1"},"p":[{"hp":9,"mp":7},{"hp":8,"mp":8}]}
{"is_del":false,"id":{"i":"a2"},"p":[{"hp":5,"mp":4},{"hp":3,"mp":3}]}
  • 创建数据文件
echo '{"is_del":true,"id":{"id":"a1"},"p":[{"hp":9,"mp":7},{"hp":8,"mp":8}]}' >/tmp/a
echo '{"is_del":false,"id":{"i":"a2"},"p":[{"hp":5,"mp":4},{"hp":3,"mp":3}]}' >>/tmp/a
cat /tmp/a
  • 创建JSON表,导入数据,查询数据
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1`(
  `is_del` STRING,
  `id`     MAP<STRING,STRING>,
  `p`      ARRAY<STRUCT<mp:INT,hp:INT>>)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe';
LOAD DATA LOCAL INPATH '/tmp/a' OVERWRITE INTO TABLE t1;
SELECT * FROM t1;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/878205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存