向Greenplum中导入json数据

举报
岳涛 发表于 2026/10/19 20:16:43 2026/10/19
【摘要】 JSON是一种文本方式展示结构化数据的方式,从产生的时候开始就由于其简单好用、跨平台……

JSON是一种文本方式展示结构化数据的方式,从产生的时候开始就由于其简单好用、跨平台,特别适合HTTP下数据的传输(例如现在很流行的REST)而被广泛使用。

JSON概述

JSON是一种文本方式展示结构化数据的方式,从产生的时候开始就由于其简单好用、跨平台,特别适合HTTP下数据的传输(例如现在很流行的REST)而被广泛使用。Greenplum 5.0开始正式支持了JSON格式的数据类型,可以在SQL语句中方便的检索和使用JSON结构中的各个关键字。

导入json数据

Greenplum原生支持了JSON类型,因此有了便捷的方式导入JSON文件,例子如下:

创建外部表导入json数据

dy_test=# CREATE EXTERNAL TABLE json_demo (data json) 
dy_test-# LOCATION('cos://bucket.example.com/json_demo/ 
dy_test'#           secretId=<secretId>
dy_test'#           secretKey=<secretKey>')
dy_test-# FORMAT 'text';
CREATE EXTERNAL TABLE
dy_test=# 
dy_test=# SELECT * FROM json_demo;
              data               
---------------------------------
 {"name":"dy","city":"shanghai"}
(1 row)

这里对象存储COS的路径同样可以替换成系统路径,区别只是存储介质不一样。

创建内部表插入json数据

利用内置的JSON操作符,通过如下命令即可完成JSON的插入

dy_test=# CREATE TABLE json_data (name text, city text);
CREATE TABLE
dy_test=# 
dy_test=# INSERT INTO json_data
dy_test-# SELECT data->'name',
dy_test-#        data->'city'
dy_test-# FROM json_demo;
INSERT 0 1
dy_test=# 
dy_test=# SELECT * FROM json_data;
 name |    city    
------+------------
 "dy" | "shanghai"
(1 row)

知识扩展

重要的列分隔符

需要注意的是外部表在进行列切割时,会检查指定的列分隔符,因此尽量选择一个不会出现的字符当作列分隔符。

这里建议指定ASCII编码值**‘\001’来作为分隔符。'\001’本身是一种不可见字符,键盘是打不出来的。在linux终端里看到是^A**,在notePad打开时看到的**SOH。**所以使用’\001’它作为分隔符再合适不过,可以参考下面的建表语句。

dy_test=# CREATE EXTERNAL TABLE json_demo (data json) 
dy_test-# LOCATION('cos://bucket.example.com/json_demo/ 
dy_test'#           secretId=<secretId>
dy_test'#           secretKey=<secretKey>')
dy_test-# FORMAT 'TEXT' (DELIMITER E'\001');
CREATE EXTERNAL TABLE
dy_test=# 
dy_test=# SELECT * FROM json_demo;
              data               
---------------------------------
 {"name":"dy","city":"shanghai"}
(1 row)

小结

这里介绍了如何向Greenplum中导入JSON数据,由于Greenplum5.0以上就增加了原生的JSON格式支持,因此可以直接对外部的JSON文件进行复杂的解析操作,一步到位的完成数据的转换和加载。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。