本文将为您介绍如何通过DataWorks的数据集成功能,将JSON数据从OSS迁移至MaxCompute,并使用MaxCompute内置字符串函数GET_JSON_OBJECT提取JSON信息的最佳实践。

准备工作

开始将JSON数据从OSS迁移至MaxCompute的操作前,您需要首先将JSON文件重命名为后缀是txt的文件,并上传至OSS。

本文中使用的JSON文件为applog.txt,将其上传至OSS,本文中OSS Bucket位于华东2区。
上传文件至OSS



{
    "store": {
        "book": [
             {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
             },
             {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
             },
             {
                 "category": "fiction",
                 "author": "J. R. R. Tolkien",
                 "title": "The Lord of the Rings",
                 "isbn": "0-395-19395-8",
                 "price": 22.99
             }
          ],
          "bicycle": {
              "color": "red",
              "price": 19.95
          }
    },
    "expensive": 10
}

通过DataWorks将JSON数据从OSS迁移至MaxCompute

  1. 新增OSS数据源
    1. 以项目管理员身份进入DataWorks控制台,单击对应工作空间操作栏中的进入数据集成
    2. 选择同步资源管理 > 数据源,单击新增数据源
      新增数据源
    3. 新增数据源弹出框中,选择数据源类型为OSS
    4. 填写OSS数据源的各配置项。
      配置OSS数据源
      配置 说明
      数据源名称 数据源名称必须以字母、数字、下划线组合,且不能以数字和下划线开头。
      数据源描述 对数据源进行简单描述,不得超过80个字符。
      适用环境 可以选择开发生产环境。
      说明 仅标准模式工作空间会显示此配置。
      Endpoint OSS Endpoint信息,本示例为http://oss-cn-shanghai.aliyuncs.comhttp://oss-cn-shanghai-internal.aliyuncs.com。OSS各地域的外网、内网地址请参见OSS开通Region和Endpoint对照表
      说明 由于本文中OSS和DataWorks项目处于同一个区域中,所以本文选用后者,通过内网连接。
      Bucket 相应的OSS Bucket信息,指存储空间,是用于存储对象的容器。

      您可以创建一个或多个存储空间,每个存储空间可添加一个或多个文件。

      您可以在数据同步任务中查找此处填写的存储空间中相应的文件,没有添加的存储空间,则不能查找其中的文件。

      AccessKey ID/AceessKey Secret 访问秘匙(AccessKeyID和AccessKeySecret),相当于登录密码。
    5. 单击测试连通性
    6. 测试连通性通过后,单击完成
  2. 新建数据同步任务
    在DataWorks上新建数据同步节点,详情请参见数据同步节点
    新建数据同步节点
    新建的同时,在DataWorks新建一个建表任务,用于存放JSON数据,本示例新建表名为mqdata。
    新建表
    表参数可以通过图形化界面完成。本例中mqdata表仅有一列,类型为string,列名为MQ data。
    图形化界面新建表
  3. 配置同步任务参数
    完成上述新建后,您可以在图形化界面配置数据同步任务参数,如下图所示。选择目标数据源名称为odps_first,选择目标表为刚建立的mqdata。数据来源类型为OSS,Object前缀可填写文件路径及名称。
    选择数据源
    说明 列分隔符使用TXT文件中不存在的字符即可,本文使用(^)。对于OSS中的TXT格式数据源,Dataworks支持多字符分隔符,您可以使用(%&%#^$$^%)这种很难出现的字符串作为列分隔符。
    映射方式选择默认的同行映射即可。
    字段映射

    单击左上方的切换脚本按钮,切换为脚本模式。修改fileFormat参数为"fileFormat":"binary"。脚本模式代码示例如下。

    {
        "type": "job",
        "steps": [
            {
                "stepType": "oss",
                "parameter": {
                    "fieldDelimiterOrigin": "^",
                    "nullFormat": "",
                    "compress": "",
                    "datasource": "OSS_userlog",
                    "column": [
                        {
                            "name": 0,
                            "type": "string",
                            "index": 0
                        }
                    ],
                    "skipHeader": "false",
                    "encoding": "UTF-8",
                    "fieldDelimiter": "^",
                    "fileFormat": "binary",
                    "object": [
                        "applog.txt"
                    ]
                },
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "odps",
                "parameter": {
                    "partition": "",
                    "isCompress": false,
                    "truncate": true,
                    "datasource": "odps_first",
                    "column": [
                        "mqdata"
                    ],
                    "emptyAsNull": false,
                    "table": "mqdata"
                },
                "name": "Writer",
                "category": "writer"
            }
        ],
        "version": "2.0",
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        },
        "setting": {
            "errorLimit": {
                "record": ""
            },
            "speed": {
                "concurrent": 2,
                "throttle": false,
            }
        }
    }
    说明 该步骤可以保证OSS中的JSON文件同步到MaxCompute之后存在同一行数据中,即为一个字段,其他参数保持不变。
    完成上述配置后,单击运行即可。运行成功日志示例如下所示。
    运行日志

JSON数据从OSS迁移至MaxCompute结果验证

  1. 在您的业务流程中新建一个ODPS SQL节点。
    新建ODPS SQL节点
  2. 查看当前mqdata表中数据,输入SELECT * from mqdata;语句。
    查看表数据
    说明 这一步及后续步骤,也可以直接在MaxCompute客户端中输入命令运行。
  3. 确认导入表中的数据结果无误后,使用SELECT GET_JSON_OBJECT(mqdata.MQdata,'$.expensive') FROM mqdata;获取JSON文件中的expensive值。
    获取JSON值

更多信息

在进行迁移后结果验证时,您可以使用MaxCompute内建字符串函数GET_JSON_OBJECT获取您想要的JSON数据。