groovy 流集将所有字段名称/列名放入一个字符串,所有值放入一个字符串,并且仅用逗号分隔它们

xvw2m8pv  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(56)

我有一个文件,我正在消费到StreamSets中,其中我有以下示例:

Source_id: {String} "1234"
Partition_id: {String} "ABC"
Key: {String} "W3E"

(the字段名是动态的,有时它会改变,所以我们不能硬编码这些字段名)。
我希望能够以某种方式将这些内容放到两个单独的字段中,以便将整个内容发送到一个存储过程,该存储过程使用动态SQL插入到各种表中。为此,我需要有两个字段在这种格式。

ColumnName: {string} " 'Source_id', 'Partition_id', 'Key' " 
ValueName: {String} "'1234', 'ABC', 'W3E' "

我试过字段Map器和其他处理器,但无法让它工作。
我对Java/ Groovy的了解不足以让它工作。如果你能帮忙的话,我将不胜感激。
谢谢
问候,不聪明的人类。

2guxujil

2guxujil1#

这里有一个Groovy选项,应该可以做到这一点:

// Sample Groovy code
records = sdc.records
String keys = ""
String values = ""
for (record in records) {
try {
      keys = "";
      values = "";
  
      for(String key: record.value.keySet()) {
        keys = keys + (keys==""?"":", ") + key;
        values = values + (values==""?"":", ") + record.value[key];
  }
  record.value = ["keys":keys, "values": values];

    // Write a record to the processor output
        sdc.output.write(record)
    } catch (e) {
    // Write a record to the error pipeline
        sdc.log.error(e.toString(), e)
        sdc.error.write(record, e.toString())
    }
}

我强烈建议您学习Groovy、JavaScript或Python的基础知识。对这种案子应该有很大帮助。

相关问题