Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Greenplum 对JSON的支持

Greenplum 对JSON的支持

作者头像
小徐
发布于 2019-08-05 07:06:23
发布于 2019-08-05 07:06:23
1.1K0
举报
文章被收录于专栏:GreenplumGreenplum

Greenplum 对JSON的支持

源文章:http://www.postgresqltutorial.com/postgresql-json/

Greenplum 对JSON的支持 1

1 JSON概述 1

2 JSON常用运算符与函数 2

2.1 JSON常用运算符 2

2.2 JSON常用的创建函数 3

2.3 JSON处理函数 4

3 JSON 运算符常用实例 5

3.1 单组JSON解析 5

3.2 多组JSON解析 5

3.3 复杂的JSON解析 6

3.3.1 多个JSON子集的解析 6

3.3.2 获取JSON子集的数据 6

3.3.3 获取一个JSON集合的子元素 6

4 JSON 创建函数的使用 7

4.1 创建int类型的JSON格式数据 7

4.2 把行的数据转化为JSON类型的数据 7

5 JSON处理函数的使用 8

5.1 获取JSON中的数据 8

5.2 获取JSON中的数据(去除双引号) 8

5.3 获取JSON数据中的KEY的值 9

6 查询JSON数据的方式 9

6.1 创建支持JSON数据的表 9

6.1.1 创建表的SQL 9

6.1.2 插入数据SQL 10

6.1.3 获取JSON数据的KEY值 10

6.2 获取JSON结构中的数据 11

6.3 按照条件查询数据 12

6.4 集合函数查询JSON数据 13

6.5 使用默认的函数查找数据 14

6.5.1 JSON_EACH 函数的使用 14

6.5.2 JSON_OBJECT_KEYS 函数的使用 14

1 JSON概述

JSON作为结构化的数据,目前越来越受到开发者的爱戴,它简单灵活易于理解。是作为储存数据的一种比较使用的一种格式,greenplum从5.0开始便很好的支持了JSON数据。

参考资料:https://hashrocket.com/blog/posts/faster-json-generation-with-postgresql#how-to

Greenplum官网介绍:https://gpdb.docs.pivotal.io/530/admin_guide/query/topics/json-data.html

2 JSON常用运算符与函数

2.1 JSON常用运算符

Operator

Right Operand Type

Description

Example

Example Result

->

int

Get JSON array element (indexed from zero).

'[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2

{"c":"baz"}

->

text

Get JSON object field by key.

'{"a": {"b":"foo"}}'::json->'a'

{"b":"foo"}

->>

int

Get JSON array element as text.

'[1,2,3]'::json->>2

3

->>

text

Get JSON object field as text.

'{"a":1,"b":2}'::json->>'b'

2

#>

text[]

Get JSON object at specified path.

'{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}'

{"c": "foo"}

#>>

text[]

Get JSON object at specified path as text.

'{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'

3

2.2 JSON常用的创建函数

array_to_json(anyarray [, pretty_bool])

row_to_json(record [, pretty_bool])

2.3 JSON处理函数

json_each(json)

json_each_text(json)

json_extract_path(from_json json, VARIADIC path_elems text[])

json_extract_path_text(from_json json, VARIADIC path_elems text[])

json_object_keys(json)

json_populate_record(base anyelement, from_json json)

json_populate_recordset(base anyelement, from_json json)

json_array_elements(json)

3 JSON 运算符常用实例

3.1 单组JSON解析

select '{"a":1}'::json ->>'a' as jsondata;

3.2 多组JSON解析

select '{"a":1,"b":2}'::json->>'b' as jsondata;

3.3 复杂的JSON解析

3.3.1 多个JSON子集的解析

select '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2 as jsondata;

注意以上结果查询的坐标是从0开始的,查询条件必须是索引

3.3.2 获取JSON子集的数据

select '{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}' as jsondata;

注意#>'{a,b}的使用,表示一层一层的查询

3.3.3 获取一个JSON集合的子元素

select '{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}' as jsondata;

注意这个JSON写的格式,以及获取的顺序

4 JSON 创建函数的使用

4.1 创建int类型的JSON格式数据

select array_to_json('{{1,5},{99,100}}'::int[]) as jsondata;

注意int数组的json数据已经把原本的格式转换了。

4.2 把行的数据转化为JSON类型的数据

select row_to_json(row(1,2,'foo')) as jsondata;

注意查看以上的结果可以看出row是行的数据,结果中f1,f2,f3是默认的字段的名,在后面将会介绍怎样获取字段名转化为JSON。

5 JSON处理函数的使用

5.1 获取JSON中的数据

select * from json_each('{"a":"foo", "b":"bar"}');

以上结果只显示出了key与value的值,如果只需要这部分的数据导出来更好。

5.2 获取JSON中的数据(去除双引号)

select * from json_each_text('{"a":"foo", "b":"bar"}')

可以注意到与上一个比较value的值去除了双引,这个数据是比较使用的。

5.3 获取JSON数据中的KEY的值

select * from json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') as jsondata;

只把数据的key的值获取出来了,注意别名的使用,必须放在数据的后面,不知道为啥?

经过测试竟然没有json_object_values的方法。

6 查询JSON数据的方式

6.1 创建支持JSON数据的表

6.1.1 创建表的SQL

创建带有主键的表

CREATE TABLE test_json (

ID serial NOT NULL PRIMARY KEY,

info json NOT NULL

);

6.1.2 插入数据SQL

INSERT INTO test_json (info)

VALUES

(

'{ "customer": "John Doe", "items": {"product": "Beer","qty": 6}}'

),

(

'{ "customer": "Lily Bush", "items": {"product": "Diaper","qty": 24}}'

),

(

'{ "customer": "Josh William", "items": {"product": "Toy Car","qty": 1}}'

),

(

'{ "customer": "Mary Clark", "items": {"product": "Toy Train","qty": 2}}'

);

6.1.3 获取JSON数据的KEY值

SELECT info -> 'customer' AS customer FROM test_json;

以上数据只把制定KEY的VALUE获取出来,注意使用-> 是不把双引号去掉的。

SELECT info ->> 'customer' AS customer FROM test_json;

使用->> 就可以把双引去掉了。

6.2 获取JSON结构中的数据

SELECT

info -> 'items' ->> 'product' AS product

FROM

test_json

ORDER BY

product;

SQL中可以->与->>一起使用,区别就是结果有无双引的问题。

6.3 按照条件查询数据

SELECT

info ->> 'customer' AS customer

FROM

test_json

WHERE

info -> 'items' ->> 'product' = 'Diaper'

查询条件也可以作为解析的对象。

也可以写成以下的形式

SELECT

info ->> 'customer' AS customer,

info -> 'items' ->> 'product' AS product

FROM

test_json

WHERE

CAST (

info -> 'items' ->> 'qty' AS INTEGER

) = 2

info -> 'items' ->> 'qty' AS INTEGER 是获取json集合中元素是qty的数据 转化为INTEGER,

case() 是把数值转化为int4类型

6.4 集合函数查询JSON数据

SELECT

MIN(CAST( info -> 'items' ->> 'qty' AS INTEGER)),

MAX (CAST (info -> 'items' ->> 'qty' AS INTEGER)),

SUM (CAST (info -> 'items' ->> 'qty' AS INTEGER)),

AVG (CAST (info -> 'items' ->> 'qty' AS INTEGER))

FROM

test_json

6.5 使用默认的函数查找数据

6.5.1 JSON_EACH 函数的使用

SELECT

json_each(info)

FROM

test_json;

json_each 函数把含有key与value的数据全部取了出来,如果一行有多个key与value则会把分行显示出来。

6.5.2 JSON_OBJECT_KEYS 函数的使用

SELECT

json_object_keys (info->'items') as jsondata

FROM

test_json;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 河马coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Greenplum数据库使用总结(干货满满)--对JSON的支持
JSON作为结构化的数据,目前越来越受到开发者的爱戴,它简单灵活易于理解。是作为储存数据的一种比较使用的一种格式,greenplum从5.0开始便很好的支持了JSON数据。
小徐
2019/08/05
2.2K0
Greenplum数据库使用总结(干货满满)--对JSON的支持
Greenplum 对JSON的支持(最新版)
JSON作为结构化的数据,目前越来越受到开发者的爱戴,它简单灵活易于理解。是作为储存数据的一种比较使用的一种格式,greenplum最新版本已经很好的支持了JSON和JSONB类型的数据
小徐
2020/09/27
3.1K0
Greenplum 对JSON的支持(最新版)
[PostgreSql]PostgreSql的JSONB机制实践
通过本文可掌握在pg数据库中如何正确使用json字段,如何进行数据查询,在where子查询中如何使用,以及对json值进行聚合查询使用.
宇宙无敌暴龙战士之心悦大王
2023/03/25
5450
Greenplum数据库使用总结--目录部分
目录 目录- 2 - 1 Greenplum整体架构信息- 9 - 1.1 架构图示- 9 - 1.2 Master主机与Segment主机任务- 9 - 1.3 数据库分布键分布数据策略- 10 - 1.3.1 HASH策略- 10 - 1.3.2 随机分布- 10 - 1.4 master主节点获取segment节点上的数据顺序- 10 - 2 Greenplum数据库常用知识- 10 - 2.1 Greenplum 概念- 10 - 2.2 OLTP与OLAP的理解- 11 - 2.2.1 描述概念-
小徐
2019/08/05
1.4K0
PostgreSQL JSONB 使用入门
Photo by Tobias Fischer[9] on Unsplash[10]
goodspeed
2020/12/22
8.1K0
PostgreSQL JSONB 使用入门
MySQL向MongoDB的妥协之JSON
MySQL在5.7.8版本中增加了对json数据的支持,而不再是需要使用字符串形式进行存储。下面简单介绍下MySQL对json的操作:
Jean
2018/10/17
3.4K1
MySQL向MongoDB的妥协之JSON
oracle mysql5.7 Json函数
oracle mysql 5.7.8 之后增加了对json数据格式的函数处理,可更加灵活的在数据库中操作json数据,如可变属性、自定义表单等等都使用使用该方式解决。
兜兜毛毛
2019/10/23
2.4K0
oracle mysql5.7  Json函数
【测试SQLite】测试SQLite支持的SQL语句分类
为了全面测试SQLite支持的SQL语句,需要设计一个包含多种类型的表结构,并编写各种SQL语句来测试这些功能。目前按照以下分类进行测试:
SarPro
2024/05/24
3660
【测试SQLite】测试SQLite支持的SQL语句分类
Greenplum高级使用
stagging=#  select gp_segment_id,count(1) from  tablename  group by 1;
小徐
2019/01/28
1.5K1
Greenplum高级使用
mysql5.7强势支持原生json格式!!全面掌握
mysql一直是如此优秀,但是随着最近一些nosql的强劲发展,甚为关系型数据库的mysql,也不例外在某些层面稍有逊色。其中,是否支持json格式是最常被用来比较的。
后端技术探索
2018/08/09
8020
软件测试|Python对JSON的解析和创建详解
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已经成为当今互联网应用中广泛使用的数据格式之一。Python提供了内置的模块来解析和创建JSON数据,使得在Python中处理JSON变得非常简单。本文将详细介绍Python对JSON的解析和创建过程,并提供示例代码来帮助大家更好地理解。
霍格沃兹测试开发Muller老师
2023/11/08
2570
SQLite 判断 JSON 数组是否包含某元素
如果想查询 tag 列中包含 love 的所有行,在 MySQL 中有 JSON_CONTAINS 可以使用,比如下面的 SQL:
恋喵大鲤鱼
2023/10/12
7510
Greenplum数据库使用总结(干货满满)--高级使用
stagging=# select gp_segment_id,count(1) from tablename group by 1;
小徐
2019/08/05
3.8K0
向Greenplum中导入json数据
本文描述问题及解决方法同样适用于 腾讯云 云数据仓库 PostgreSQL(CDWPG),其中使用到的外部对象存储为 腾讯云 对象存储(Cloud Object Storage,COS)。
岳涛
2021/03/17
1.1K0
向Greenplum中导入json数据
SqlAlchemy 2.0 中文文档(七十五)
本指南介绍了 SQLAlchemy 1.1 版本的新功能,并记录了影响用户将其应用程序从 SQLAlchemy 1.0 系列迁移到 1.1 系列的变化。
ApacheCN_飞龙
2024/08/26
3360
Greenplum 7 新特性整理
参考:https://www.xmmup.com/zaidockerzhongkuaisutiyangreenplum-7-0-0.html
AiDBA宝典
2023/10/16
1.4K0
Greenplum 7 新特性整理
HQL语句大全
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。
shirayner
2018/08/10
2.6K0
Greenplum 实时数据仓库实践(6)——实时数据装载
上一篇详细讲解了如何用Canal和Kafka,将MySQL数据实时全量同步到Greenplum。对照本专题第一篇中图1-1的数据仓库架构,我们已经实现了ETL的实时抽取过程,将数据同步到RDS中。本篇继续介绍如何实现后面的数据装载过程。实现实时数据装载的总体步骤可归纳为:
用户1148526
2021/12/29
2.6K0
Greenplum 实时数据仓库实践(6)——实时数据装载
MySQL 之 JSON 支持(一)—— JSON 数据类型
MySQL 支持由 RFC 7159 所定义的原生 JSON 数据类型,通过该类型能够有效访问 JSON(JavaScript 对象表示法)文档中的数据。与将 JSON 格式字符串存储在字符串列中相比,JSON 数据类型提供了以下优点:
用户1148526
2024/06/06
3.2K0
Json Jolt教程
这是国内外目前第一篇较为详细系统的讲述Java JOLT用法及部分原理的文章,如有错误,请及时留言指出。如有转载,请标明出处。
@阿诚
2020/09/01
14.3K0
Json Jolt教程
相关推荐
Greenplum数据库使用总结(干货满满)--对JSON的支持
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文