# Mapping multiple values in single CSV row output

**URL:** <https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653>\
**Category:** Logstash\
**Created:** [April 12, 2020, 8:49am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653 "2020-04-12T08:49:57Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![karnamonkster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/karnamonkster/32/67266_2.png) [@karnamonkster](https://discuss.elastic.co/u/karnamonkster)\
**Post date:** [April 12, 2020, 8:49am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/1 "2020-04-12T08:49:57Z")

</div>

We have an ES index that has different register for Meters  
Example:

```
Event1
meter: FT1234
register:FLOW RATE
value: somevalue1

Event2
meter:FT1234
register:REV RATE
value: somevalue2

Event3
meter:FT1234
register:VOLUME
value: somevalue3

```

Now i needs all these register into a single CSV output file which would be like  
Headers: Meter, FLOWRATE,REVRATE,VOLUME  
VALUES: FT1234,somevalue1,somevalue2,somevalue3

---

<div class="post-metadata">

**Author:** ![Badger](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/badger/32/25190_2.png) [@Badger](https://discuss.elastic.co/u/Badger)\
**Post date:** [April 12, 2020, 2:02pm UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/2 "2020-04-12T14:02:40Z")

</div>

You can do that with a [csv](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-csv.html) output.

---

<div class="post-metadata">

**Author:** ![karnamonkster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/karnamonkster/32/67266_2.png) [@karnamonkster](https://discuss.elastic.co/u/karnamonkster)\
**Post date:** [April 12, 2020, 2:34pm UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/3 "2020-04-12T14:34:07Z")

</div>

Hi @Badger  
That is what I intent to test, but I am not able to proceed with how to get two registers in same row under their respective headers.

---

<div class="post-metadata">

**Author:** ![Badger](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/badger/32/25190_2.png) [@Badger](https://discuss.elastic.co/u/Badger)\
**Post date:** [April 12, 2020, 3:36pm UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/4 "2020-04-12T15:36:35Z")

</div>

Oh, I missed that. You can use an aggregate filter to combine all the values for a given meter id.

---

<div class="post-metadata">

**Author:** ![karnamonkster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/karnamonkster/32/67266_2.png) [@karnamonkster](https://discuss.elastic.co/u/karnamonkster)\
**Post date:** [April 13, 2020, 4:57am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/5 "2020-04-13T04:57:17Z")

</div>

Hi @Badger,

Here is what my unsuccessful attempt looks like.

```
filter {

if [register] == "FLOW RATE" {
    aggregate {
            task_id => "%{meterid}"
            code => "map['flow_rate'] = event.get('value')"
        }
    }
if [register] == "FWD TOTALIZER MES" {
    aggregate {
            task_id => "%{meterid}"
            code => "map['fwd_mes'] = event.get('value')"
            
        }
    }
if [register] == "REV TOTALIZER MES" {
    aggregate {
            task_id => "%{meterid}"
            code => "map['rev_mes'] = event.get('value');
                    event.set('flow_rate', map['flow_rate']);
                    event.set('fwd_mes', map['fwd_mes']);
                    event.set('rev_mes', map['rev_mes']);
                        "
            end_of_task => true
            
        }
    }    

```

}  
I am sure the logic not correct since i do not have any start and end event.  
Its registers fetched in different times, and once i have these 3 i push it.

---

<div class="post-metadata">

**Author:** ![karnamonkster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/karnamonkster/32/67266_2.png) [@karnamonkster](https://discuss.elastic.co/u/karnamonkster)\
**Post date:** [April 13, 2020, 6:48am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/6 "2020-04-13T06:48:47Z")

</div>

It works with the same configuration. 🙂  
Thanks @Badger , But i am still not able to get a simple Header on my output CSV

---

<div class="post-metadata">

**Author:** ![Badger](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/badger/32/25190_2.png) [@Badger](https://discuss.elastic.co/u/Badger)\
**Post date:** [April 13, 2020, 1:56pm UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/7 "2020-04-13T13:56:32Z")

</div>

You can tell the csv output to [add a header](https://discuss.elastic.co/t/header-issue-in-logstash-csv-output/175781) but because every line is written independently that results in every other line being a header.

---

<div class="post-metadata">

**Author:** ![karnamonkster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/karnamonkster/32/67266_2.png) [@karnamonkster](https://discuss.elastic.co/u/karnamonkster)\
**Post date:** [April 14, 2020, 3:34am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/8 "2020-04-14T03:34:05Z")

</div>

Hi @Badger ,  
Is there any way we can keep a file with header only and append it with the data parsed in the columns?

---

<div class="post-metadata">

**Author:** ![Badger](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/badger/32/25190_2.png) [@Badger](https://discuss.elastic.co/u/Badger)\
**Post date:** [April 14, 2020, 12:57pm UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/9 "2020-04-14T12:57:45Z")

</div>

Not that I know of.

---

<div class="post-metadata">

**Author:** ![karnamonkster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/karnamonkster/32/67266_2.png) [@karnamonkster](https://discuss.elastic.co/u/karnamonkster)\
**Post date:** [April 20, 2020, 6:21am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/10 "2020-04-20T06:21:29Z")

</div>

Hey @Badger,

I was doing a CSV file output for say every hour using the format

```
path => "mycsv-%{fielddate}.csv"

```

Where fielddate is YYYYMMddhh format.  
Creates the files for every hour as expected, but the header is only on the first file created and the rest are without header.  
Any thing you could point out why is this behavior?

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [May 18, 2020, 6:21am UTC](https://discuss.elastic.co/t/mapping-multiple-values-in-single-csv-row-output/227653/11 "2020-05-18T06:21:34Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
