我需要将数据从db2表迁移到mssql表,但是一列具有不同的名称,但数据类型相同。
db2表: NROCTA,NUMRUT,DIASMORA2
MSSQL表: NROCTA,NUMRUT,DIAMORAS
您看到DIAMORAS有所不同。
我使用以下流程:
ExecuteSQL-> SplitAvro-> PutDatabaseRecord
在PutDataBaseRecord中,我以这种方式配置的AvroReader作为RecordReader:
模式访问策略:使用嵌入式Avro模式。 架构文字:$ {avro.schema}
该流程仅插入了前两列。¿我如何在DIASMORA2和DIAMORAS列之间进行映射?
谢谢!
答案 0 :(得分:0)
第一件事,除非您尝试将某些逻辑行的行作为单个事务发送,否则您的流程中可能根本不需要SplitAvro。
要更改列名,请使用UpdateRecord并将字段/DIASMORAS
设置为记录路径/DIASMORA2
,然后将AvroRecordSetWriter架构中的字段名称从DIASMORA2
更改为{{ 1}}。
由于您正在使用AvroReader中的嵌入式架构,因此最后一部分有些棘手。如果架构始终相同,则可以停止UpdateRecord处理器,然后放入ExtractAvroMetadata处理器以提取DIASMORAS
属性。这样会将嵌入式模式放在流文件的avro.schema
属性中。
然后在启动UpdateRecord之前,启动ExecuteSQL和ExtractAvroMetadata处理器,然后检查队列中的流文件以将架构复制到avro.schema
属性之外。然后,在ConvertRecord的AvroRecordSetWriter中,可以选择avro.schema
,然后从属性中粘贴模式,将Use Schema Text
更改为DIASMORA2
,而不是继承模式。这种方法将DIASMORAS
字段中的值放入DIASMORA2
字段中,但是由于DIASMORAS
不在输出模式中,因此它将被忽略,从而有效地重命名该字段(尽管实际上是重命名该字段)是复制并删除)。