只要三步!阿里云DLA帮你处理海量JSON数据

2019-08-16  本文已影响0人  暖忆_

概述

您可能有大量应用程序产生的JSON数据,您可能需要对这些JSON数据进行整理,去除不想要的字段,或者只保留想要的字段,或者仅仅是进行数据查询。

那么,利用阿里云Data Lake Analytics或许是目前能找到的云上最为便捷的达到这一目标的服务了。仅仅需要3步,就可以完成对海量JSON数据的处理,或者更为复杂的ETL流程。

第一步:JSON数据到阿里云OSS

利用各种手段,将JSON数据投递到OSShttps://www.aliyun.com/product/oss)中。

通常,对于云上日志链路,还有一种JSON到OSS的投递链路,可以参考“云原生日志数据分析上手指南”其中的JSON部分。

第二步:DLA中建表

参考上述“云原生日志数据分析上手指南”,其中已经有海量JSON数据的分区模式建表方法了。本例中,以非分区表为例,假设,数据文件中每一行一个JSON数据,JSON数据放置的OSS路径为:

oss://your_bucket/json_data/...

则,在DLA中执行建表:

CREATE EXTERNAL TABLE simple_json (    data STRING)STORED AS TEXTFILELOCATION'oss://your_bucket/json_data/';

第三步:利用DLA JSON函数SQL处理

json_remove

从JSON中去除指定JSON Path的数据。可以一次处理一个JSON path,也可以一次处理多个JSON path。注意:目前还不支持“..”等JSON path的模糊匹配,不久后会支持。

json_remove(json_string, json_path_string) -> json_string

json_remove(json_string, array[json_path_string]) -> json_string

示例:

select json_remove('{

    "glossary": {

        "title": "example glossary",

        "GlossDiv": {

            "title": "S",

            "GlossList": {

                "GlossEntry": {

                    "ID": "SGML",

                    "SortAs": "SGML",

                    "GlossTerm": "Standard Generalized Markup Language",

                    "Acronym": "SGML",

                    "Abbrev": "ISO 8879:1986",

                    "GlossDef": {

                        "para": "A meta-markup language, used to create markup languages such as DocBook.",

                        "GlossSeeAlso": ["GML", "XML"]

                    },

                    "GlossSee": "markup"

                }

            }

        }

    }

}','$.glossary.GlossDiv') a;-> {"glossary":{"title":"example glossary"}}select json_remove('{

    "glossary": {

        "title": "example glossary",

        "GlossDiv": {

            "title": "S",

            "GlossList": {

                "GlossEntry": {

                    "ID": "SGML",

                    "SortAs": "SGML",

                    "GlossTerm": "Standard Generalized Markup Language",

                    "Acronym": "SGML",

                    "Abbrev": "ISO 8879:1986",

                    "GlossDef": {

                        "para": "A meta-markup language, used to create markup languages such as DocBook.",

                        "GlossSeeAlso": ["GML", "XML"]

                    },

                    "GlossSee": "markup"

                }

            }

        }

    }

}', array['$.glossary.title','$.glossary.GlossDiv.title']) a;{"glossary":{"GlossDiv":{"GlossList":{"GlossEntry":{"GlossTerm":"Standard Generalized Markup Language","GlossSee":"markup","SortAs":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"ID":"SGML","Acronym":"SGML","Abbrev":"ISO 8879:1986"}}}}}

json_reserve

从JSON中保留指定JSON Path的数据,去除其他的数据。可以一次处理一个JSON path,也可以一次处理多个JSON path。注意:目前还不支持“..”等JSON path的模糊匹配,不久后会支持。

json_reserve(json_string, json_path_string) -> json_string

json_reserve(json_string, array[json_path_string]) -> json_string

示例:

select json_reserve('{

    "glossary": {

        "title": "example glossary",

        "GlossDiv": {

            "title": "S",

            "GlossList": {

                "GlossEntry": {

                    "ID": "SGML",

                    "SortAs": "SGML",

                    "GlossTerm": "Standard Generalized Markup Language",

                    "Acronym": "SGML",

                    "Abbrev": "ISO 8879:1986",

                    "GlossDef": {

                        "para": "A meta-markup language, used to create markup languages such as DocBook.",

                        "GlossSeeAlso": ["GML", "XML"]

                    },

                    "GlossSee": "markup"

                }

            }

        }

    }

}', array['$.glossary.title']) a;-> {"glossary":{"title":"example glossary"}}select json_reserve('{

    "glossary": {

        "title": "example glossary",

        "GlossDiv": {

            "title": "S",

            "GlossList": {

                "GlossEntry": {

                    "ID": "SGML",

                    "SortAs": "SGML",

                    "GlossTerm": "Standard Generalized Markup Language",

                    "Acronym": "SGML",

                    "Abbrev": "ISO 8879:1986",

                    "GlossDef": {

                        "para": "A meta-markup language, used to create markup languages such as DocBook.",

                        "GlossSeeAlso": ["GML", "XML"]

                    },

                    "GlossSee": "markup"

                }

            }

        }

    }

}', array['$.glossary.title','$.glossary.GlossDiv.title','$.glossary.GlossDiv.GlossList.GlossEntry.ID']) a;->"glossary":{"title":"example glossary","GlossDiv":{"GlossList":{"GlossEntry":{"ID":"SGML"}},"title":"S"}}}

后记

还可以利用Data Lake Analytics强大的云上数据处理能力,进行多源数据融合处理、分析,回流到其他数据库、存储系统中。

更多信息请参考:https://datalakeanalytics.console.aliyun.com/overview

上一篇下一篇

猜你喜欢

热点阅读