seatunnel hive source 未设置分隔符导致多个字段合并成一个的问题定位解决

seatunnel hive source 未设置分隔符导致多个字段没有切分全保存在一个字段中了,翻看源码发现分隔符是是通过delimiter设置的,只要设置这个delimiter=","就可以了。
delimiter

设置这个属性 delimiter=“,”

他的默认值是\u0001,如果没有设置delimiter属性则会根据文件类型判断,如果是csv则使用”,”,其他的不会处理,也就是不会切分。
在这里插入图片描述

env {
  spark.sql.catalogImplementation = "hive"
  spark.app.name = "SeaTunnel-spark3-hive"
  spark.executor.instances = 4
  spark.executor.cores = 2
  spark.executor.memory = "5g"
  spark.yarn.queue = "aiops"
  spark.ui.enabled = true
}

source {
Hive {
  table_name = "default.zc_hive_500_id_int"
  metastore_uri = "thrift://cdh129130:9083"
  kerberos_principal = "hive/cdh129144@MYCDH"
  kerberos_keytab_path = "/home/aiops/keytab/hive.keytab"
  hdfs_site_path = "/etc/hadoop/conf/hdfs-site.xml"
  parallelism = 1
  read_columns = ["nid","date_id","mm","latn_id","email","ctime","address"],
  fetch_size = 10000
  delimiter=","
  
}
}

transform {
}

sink {
Console{

}
}

源码分析过程:

根据抛异常的地方找打读记录行的位置在这里插入图片描述
这里有多种实现
在这里插入图片描述
根据获取的字段列表转换行到SeaTunnelRow对象, 这里将line按separators[level]进行split切割为多列的值(这里很关键, 分隔符是什么?), 最后将字段index和value放到map,然后使用SeaTunnelRow对象封装map。
在这里插入图片描述
在这里插入图片描述
分隔符在build中被赋值
在这里插入图片描述
Build中的fieldDelimiter来自于BaseSourceConfig.DELIMITER.key(),如果没有值则获取FILE_FORMAT_TYPE进行判断,如果是csv格式则是逗号分隔。
在这里插入图片描述
字段分隔符被设置到separators[0]
在这里插入图片描述
在这里插入图片描述
如何能配置指定的分隔符呢?
设置这个delimiter, 他是读取自这个属性的。

source {
Hive {
  table_name = "default.zc_hive_500_id_int"
  metastore_uri = "thrift://cdh129130:9083"
  kerberos_principal = "hive/cdh129144@MYCDH"
  kerberos_keytab_path = "/home/aiops/keytab/hive.keytab"
  hdfs_site_path = "/etc/hadoop/conf/hdfs-site.xml"
  parallelism = 1
  read_columns = ["nid","date_id","mm","latn_id","email","ctime","address"],
  fetch_size = 10000
  delimiter=","
  
}
}

参考

https://github.com/apache/seatunnel/issues/4731
本文链接 https://blog.csdn.net/shy_snow/article/details/131845117

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值