【问题标题】:How does one handle denormalized data with kettle?如何用水壶处理非规范化数据?
【发布时间】:2011-10-23 20:39:33
【问题描述】:

Kettle 有“行规范化器”和“行反规范化器”步骤,例如

http://wiki.pentaho.com/display/EAI/Row+Normalizer

但它们要求您手动配置非规范化表中的字段。我不明白如何实际使用它,因为非规范化表中的字段数取决于规范化表中的行数,这是动态的。例如。在他们的示例中,非规范化输入表中的三个产品有三列,用户必须手动告诉转换如何处理每一个。但在实际应用中,产品的数量会动态变化。因此,此转换仅适用于一个表,在某一时刻。任何具有不同列数的东西都会失败。

我有几十个或几百个与他们的示例非常相似的非规范化输入文件,它们都有不同的列数。

【问题讨论】:

    标签: kettle denormalized


    【解决方案1】:

    我在非规范化方面遇到了类似的问题。我有一个/etc/group 文件,其结构类似于group:gid:member1,member2,....,我用User Defined Java Class 组件对其进行了非规范化,所以最后我有字段group,gid,member。我知道你需要另一个方向,但这对你来说可能是一个很好的起点。以下是出处:

    public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
    {
        // boilerplate
        Object[] r = getRow();
        if (r == null) {
            setOutputDone();
            return false;
        }
        if(first)
            first = false;
    
        String tmp = get(Fields.In, "members").getString(r);
        if(null==tmp)
            return true;
        String accounts[] = tmp.split(",");
        for(int i=0; i<accounts.length; ++i){
            Object[] out_row = RowDataUtil.allocateRowData(data.outputRowMeta.size());
            for (int j=0; j<r.length; ++j)
                out_row[j] = r[j];
            String account = accounts[i];
            get(Fields.Out, "account").setValue(out_row,account);
            putRow(data.outputRowMeta, out_row);
        }
    
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 2017-04-01
      • 2014-05-19
      • 2018-10-10
      • 2017-01-14
      • 1970-01-01
      • 2014-12-23
      相关资源
      最近更新 更多