maxcompute使用篇

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖人_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值