sql-server - 处理数据流任务中派生列中的截断错误
问题描述
我有一个包含派生列的数据流任务。派生列将 CSV 文件列(例如订单号 A)转换为长度为 10 的数据类型 char。
当文本文件列等于或小于 10 个字符时,这非常有效。当然,A列订单号超过10个字符时会报错。
A 列(容易出错)。
12PR567890
254W895X98
ABC 56987K5239
485P971259 SPTGER
459745WERT
我想捕获容易出错的记录并仅提取订单号。
我已经可以配置派生列的错误输出。但是,这只是忽略错误记录并处理其他记录。
预期的输出将分别处理,ABC 56987K5239
订单485P971259 SPTGER
号。删除意外字符的过程并不重要,重要的是如何在派生列的运行时实现这一点(在出现错误时剥离和处理数据)。56987K5239
485P971259
解决方案
如果有效的订单号总是以数字开头,并且它的长度等于 10。您可以使用Script Component
(Transformation)Regular Expression
来转换源数据。
- 拖放
Script Component
asTransformation
- 将源连接到
Script Component
- 在
Script Component Edit
窗口中,Order
从中检查Input columns
,并将其设为Read and Write
- 在脚本中,添加:
using System.Text.RegularExpressions;
完整的代码需要在 Input 处理方法中添加:
string pattern = "[0-9].{9}"; Row.Order = Regex.Match(Row.Order, pattern).Groups[1].ToString();
到目的地的输出应该是匹配的以数字开头的 10 个字符。
推荐阅读
- django - django-elasticsearch-dsl 无法过滤多个模型字段
- kubernetes - 使用配置文件向 kubeadm init 提供节点名称
- r - 在 pmap() 或 pwalk() 中为 .l 提供列表参数
- nginx - 在 Nginx 反向代理后面运行的 Signalr
- android - android改造给出响应的空值可能存在端点问题
- python - 关于python函数中参数的问题
- apache-spark - 传递外部依赖以构建 spark-submit Hydrosphere-mist
- istio - Envoy 中的“max_connections”到底是什么意思?
- wifi - 为什么每个 WLAN 附件都有不同的数据速率?
- angular - Angular 6 中组件之间的数据共享