10TB海量JSON数据从OSS迁移至MaxCompute

前提条件

  • 开通MaxCompute

  • 在DataWorks上完成创建业务流程,本例使用DataWorks简单模式。详情请参见创建业务流程

  • 将JSON文件重命名为后缀为.txt的文件,并上传至OSS。本文中OSS Bucket地域为华东2(上海)。示例文件如下。

    {
        "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
    }
    

将JSON数据从OSS迁移至MaxCompute

  1. 新增OSS数据源。详情请参见配置OSS数据源

  2. 在DataWorks上新建数据表,用于存储迁移的JSON数据。

    1. 登录DataWorks控制台,单击左侧导航栏的数据建模与开发 > 数据开发 ,在下拉框中选择对应工作空间后单击进入数据开发

    2. 数据开发 页面,鼠标悬停至图标,单击新建表 >

    3. 新建表 对话框中,选择相应的路径 ,输入名称 ,单击新建

      说明:如果绑定多个实例,则需要选择MaxCompute引擎实例。

    4. 在表的编辑页面,单击DDL

    5. DDL模式 对话框,输入如下建表语句,单击生成表结构

      create table mqdata (mq_data string);
      
    6. 确认操作 对话框中,单击确认

    7. 生成表结构后,在基本属性 模块输入表的中文名 ,并分别单击提交到开发环境提交到生产环境

      说明 :如果您使用的是简单模式的工作空间,仅单击提交到生产环境即可。

  3. 新建离线同步节点。

    1. 进入数据开发页面,右键单击指定业务流程,选择新建节点 > 数据集成 > 离线同步

    2. 新建节点 对话框中,输入节点名称 ,并单击确认

    3. 在顶部菜单栏上,单击图标

    4. 在脚本模式下,单击顶部菜单栏上的图标

    5. 导入模板 对话框中选择来源类型数据源目标类型数据源 ,并单击确定。主要思路是一个字段存入整个json数据。

修改JSON代码后,单击按钮

配置代码如下。

{
    "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
        }
    }
}

结果验证

新建ODPS SQL节点。

  1. 右键单击业务流程,选择新建节点 > MaxCompute > ODPS SQL

  2. 新建函数 对话框中,输入函数名称 ,单击新建

  3. 在ODPS SQL节点编辑页面输入如下语句。

    --查询表mq_data数据。
    SELECT * from mqdata;
    --获取JSON文件中的EXPENSIVE值。
    SELECT GET_JSON_OBJECT(mqdata.MQdata,'$.expensive') FROM mqdata;
    
  4. 单击图标运行代码

  5. 您可以在运行日志 查看运行结果。费用不低,我的项目是对外提供数据检索服务,这个消耗速度扛不住啊。

相关推荐
赵大仁2 分钟前
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
linux·运维·服务器·ide·ubuntu·centos·计算机基础
vvw&7 分钟前
Docker Build 命令详解:在 Ubuntu 上构建 Docker 镜像教程
linux·运维·服务器·ubuntu·docker·容器·开源
小白学前端66614 分钟前
React Router 深入指南:从入门到进阶
前端·react.js·react
冷冰鱼30 分钟前
【问题实录】服务器ping不通win11笔记本
运维·服务器
wayuncn31 分钟前
web服务器之云主机、物理机租用、服务器托管的区别
运维·服务器
冷曦_sole33 分钟前
linux-21 目录管理(一)mkdir命令,创建空目录
linux·运维·服务器
最后一个bug34 分钟前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
web1309332039835 分钟前
前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案
前端
聚名网36 分钟前
服务器如何划分空间?
运维·服务器
outstanding木槿1 小时前
react+antd的Table组件编辑单元格
前端·javascript·react.js·前端框架