当前位置: 首页 > news >正文

maxcompute使用篇

文章目录

  • maxcompute使用篇
    • 1.mongoDB与maxcompute 进行数据同步
      • 1.1 基本类型的数据
      • 1.2部分复杂类型的数据
    • 2.maxcompute中复杂数据类型解析
        • 2.1 get_json_object
        • 2.2 json_tuple
        • 2.3 处理json几种失效的情况:
        • 2.4 STR_TO_MAP、MAP_KEYS
        • 2.5 regexp_replace
        • 2.6 FROM_JSON
        • 2.7 nvl
        • 2.8 trim

maxcompute使用篇

1.mongoDB与maxcompute 进行数据同步

1.1 基本类型的数据

  • 基本数据类型会根据同步任务配置的读取字段中的name自动读取对应path下的数据,并根据数据类型做自动转换,您无需指定column的type属性,如下图_id,uuid,key_name等普通类型可以根据配置的类型属性进行自动转换

image-20240917210619222

1.2部分复杂类型的数据

  • 需要通过配置column的type属性,进行自定义处理,如shop_list以key_info字段

    注意:

    1.在mongoDB和maxcompute进行数据同步时,如果mongoDB某个字段(如:key_info) 数据类型为Document,在mongoDB侧没有配置对应的Document类型的话,则直接将Document转 JSON 序列化处理

    2.如果mongoDB某个字段(如:shop_list) 数据类型为Array,在mongoDB侧没有配置对应的Array类型的话,则会将Array转成Document类型数据,无法进行处理

    3.有关MongoDB Reader支持的MongoDB数据类型详情,请查看该链接:https://help.aliyun.com/zh/dataworks/user-guide/mongodb-data-source?spm=a1z3jh.13523495.0.0.27af6242XNV15M

Array数据类型:

image-20240917210740048

Document数据类型:

image-20240917210813485

maxcompute侧配置:

image-20240917211050059

2.maxcompute中复杂数据类型解析

2.1 get_json_object
  • 概述:从 JSON 字符串中提取特定字段值的函数,接受一个 JSON 字符串和一个路径表达式作为参数,返回一个字符串类型的值,表示指定路径的 JSON 字段值。如果路径不存在,返回NULL

  • 语法 : get_json_object(json_column, ‘$.name’)

  • 注意:一次只能解析一个json字段,可以嵌套解析多层json

    image-20240917211253071

2.2 json_tuple
  • 概述:通过列名来指定要提取的字段,相对来说更加直观。在同时提取多个字段时,代码的可读性更好。如果路径不存在,返回NULL

  • 语法 : json_tuple(json_data, ‘name’, ‘age’)

  • 注意:

    1.每次能够同时解析多个字段,不能解析嵌套的json,如果需要解析嵌套的,那么只能一层层解析

    2.json_tuple如果需要给解析的多个json字段起别名,需要结合侧视图一起使用

    image-20240917211521769

2.3 处理json几种失效的情况:
(1)json格式不对,输入的字符串根本不是有效的 JSON 格式。例如,字符串存在语法错误、缺失关键的括号或引号等。
(2)提供的路径表达式错误。路径表达式用于指定要从 JSON 中提取的部分,如果表达式不正确,无法准确定位到目标数据。
(3)数据类型不匹配。例如,期望提取的是一个字符串,但实际是一个数字或对象。
(4)嵌套层次过深。如果 JSON 数据的嵌套层次非常复杂,可能超出了 get_json_object 函数的处理能力或导致性能问题。
(5)处理超大的 JSON 数据。当 JSON 数据过大,可能会导致内存不足或处理超时的情况。
2.4 STR_TO_MAP、MAP_KEYS
  • STR_TO_MAP:

    • 概述:用于将一个字符串转换为映射(map)类型
    • 语法:STR_TO_MAP(map_string_column, ‘,’, ‘:’) ,分隔键值对的分隔符是',',分隔键和值的分隔符是':'
  • MAP_KEYS

    • 概述:获取映射(map)类型数据的所有键组成的数组
    • 语法:MAP_KEYS(map_column)
  • 补充:结构体(struct)和映射(map)之间的区别

    • STRUCT<name:STRING, age:INT, grade:STRING>
    • MAP<STRING,STRING>

    image-20240917211626829

2.5 regexp_replace
  • 概述:用于使用正则表达式进行字符串替换
  • 语法 : regexp_replace(string, pattern, replacement)
    • string:要进行替换操作的原始字符串。
    • pattern:正则表达式模式,用于匹配要被替换的部分。
    • replacement:用于替换匹配部分的新字符串

image-20240917211708767

2.6 FROM_JSON
  • 概述:用于将 JSON 字符串解析为特定数据结构(如结构体、数组等)的函数,常与炸裂函数一起使用
  • 语法 : from_json(list_ids,‘array’)
    • array : 转换的数据类型
    • STRING : 数组里面的数据类型

image-20240917211756568

2.7 nvl
  • 概述:nvl函数用于处理空值(注意:在maxcompute中没有ifnull函数)
  • 语法 : nvl(expr1, expr2)
    • expr1:要检查是否为 NULL 的表达式。
    • expr2:如果expr1为 NULL,则返回这个表达式的值
  • 注意事项
    • nvl函数只能处理一个空值情况,如果需要处理多个不同类型的空值,可以结合其他函数或逻辑来实现
    • 确保替换值的类型与要处理的列的类型兼容,否则可能会导致类型转换错误
2.8 trim
  • 概述:用于去除字符串两端的特定字符

  • 语法 : trim([leading|trailing|both] [characters] FROM string)

    • leading:表示去除字符串开头的字符,默认是去除两端的字符。
    • trailing:表示去除字符串末尾的字符
    • both:表示去除字符串两端的字符,这是默认行为
    • characters:要去除的字符集,如果不指定,则默认去除空格
    • string:要进行处理的字符串
    • trim(string):默认去除字符串两端的空格

    image-20240917211818049

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 8. 防火墙
  • Nginx从入门到入土(二): 学习内容与安装
  • LeetCode 面试经典150题 190.颠倒二进制位
  • 微服务Docker相关指令
  • 第三章 Smart X超融合测试历程第三天
  • 边缘计算网关在工业中的应用
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • MySQL---创建数据库(基于SQLyog)
  • MySQL系列—11.Redo log
  • 深度学习速通系列:如何使用文本标注工具进行命名实体识别?
  • 关于http的206状态码和416状态码的意义、断点续传以及CORS使用Access-Control-Allow-Origin来允许跨域请求
  • SpringCloud Alibaba之Seata处理分布式事务
  • Git 推送更改到远程仓库
  • 双虚拟机部署php项目
  • AUTOSAR UDS NRC
  • JavaScript-如何实现克隆(clone)函数
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • extjs4学习之配置
  • IOS评论框不贴底(ios12新bug)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript新鲜事·第5期
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • nodejs:开发并发布一个nodejs包
  • PhantomJS 安装
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 创建一个Struts2项目maven 方式
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 搞机器学习要哪些技能
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 新版博客前端前瞻
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 栈实现走出迷宫(C++)
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • # centos7下FFmpeg环境部署记录
  • # Redis 入门到精通(一)数据类型(4)
  • #13 yum、编译安装与sed命令的使用
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (9)目标检测_SSD的原理
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (ros//EnvironmentVariables)ros环境变量
  • (层次遍历)104. 二叉树的最大深度
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (一)SvelteKit教程:hello world
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .form文件_一篇文章学会文件上传
  • .NET Core 成都线下面基会拉开序幕
  • .net 程序发生了一个不可捕获的异常
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net(C#)中String.Format如何使用