Set a Field
Updated: Jul 11, 2023
In this example, you will learn how you can use DataPipeline to add a new field/column to a dataset and set its value. You can use this approach to add timestamps and tracking data to all records in a dataset before sending it on for processing and analysis.
Input CSV file
Account,LastName,FirstName,Balance,CreditLimit,AccountCreated,Rating 101,Reeves,Keanu,9315.45,10000.00,1/17/1998,A 312,Butler,Gerard,90.00,1000.00,8/6/2003,B 868,Hewitt,Jennifer Love,0,17000.00,5/25/1985,B 761,Pinkett-Smith,Jada,49654.87,100000.00,12/5/2006,A 317,Murray,Bill,789.65,5000.00,2/5/2007,C
Java Code Listing
package com.northconcepts.datapipeline.examples.cookbook;
import java.io.File;
import com.northconcepts.datapipeline.core.DataReader;
import com.northconcepts.datapipeline.core.StreamWriter;
import com.northconcepts.datapipeline.csv.CSVReader;
import com.northconcepts.datapipeline.job.Job;
import com.northconcepts.datapipeline.transform.SetField;
import com.northconcepts.datapipeline.transform.TransformingReader;
public class SetAField {
public static void main(String[] args) throws Throwable {
DataReader reader = new CSVReader(new File("example/data/input/credit-balance-01.csv"))
.setFieldNamesInFirstRow(true);
TransformingReader transformingReader = new TransformingReader(reader);
// Create an 'AccountType' field and set it to 'Personal'
transformingReader.add(new SetField("AccountType", "Personal"));
Job.run(transformingReader, new StreamWriter(System.out));
}
}
Code walkthrough
- CSVReader is created corresponding to the input file
credit-balance-01.csv. - The
CSVReader.setFieldNamesInFirstRow(true)method is invoked to specify that the names specified in the first row should be used as field names. - A TransformingReader is created to apply one or more transformations to the incoming data sequentially.
- SetField accepts
nameandvaluearguments. It means that a new field callednameis created with the default value ofvalue. In addition to these arguments,fieldTypeandoverwriteparameters can also be added to this class's constructor. In the given example, the "AccountType" field is added and set to "Personal". - Data is transferred from the
transformingReaderto theStreamWriter(System.out)via Job.run() method.
Output
-----------------------------------------------
0 - Record (MODIFIED) {
0:[Account]:STRING=[101]:String
1:[LastName]:STRING=[Reeves]:String
2:[FirstName]:STRING=[Keanu]:String
3:[Balance]:STRING=[9315.45]:String
4:[CreditLimit]:STRING=[10000.00]:String
5:[AccountCreated]:STRING=[1/17/1998]:String
6:[Rating]:STRING=[A]:String
7:[AccountType]:STRING=[Personal]:String
}
-----------------------------------------------
1 - Record (MODIFIED) {
0:[Account]:STRING=[312]:String
1:[LastName]:STRING=[Butler]:String
2:[FirstName]:STRING=[Gerard]:String
3:[Balance]:STRING=[90.00]:String
4:[CreditLimit]:STRING=[1000.00]:String
5:[AccountCreated]:STRING=[8/6/2003]:String
6:[Rating]:STRING=[B]:String
7:[AccountType]:STRING=[Personal]:String
}
-----------------------------------------------
2 - Record (MODIFIED) {
0:[Account]:STRING=[868]:String
1:[LastName]:STRING=[Hewitt]:String
2:[FirstName]:STRING=[Jennifer Love]:String
3:[Balance]:STRING=[0]:String
4:[CreditLimit]:STRING=[17000.00]:String
5:[AccountCreated]:STRING=[5/25/1985]:String
6:[Rating]:STRING=[B]:String
7:[AccountType]:STRING=[Personal]:String
}
-----------------------------------------------
3 - Record (MODIFIED) {
0:[Account]:STRING=[761]:String
1:[LastName]:STRING=[Pinkett-Smith]:String
2:[FirstName]:STRING=[Jada]:String
3:[Balance]:STRING=[49654.87]:String
4:[CreditLimit]:STRING=[100000.00]:String
5:[AccountCreated]:STRING=[12/5/2006]:String
6:[Rating]:STRING=[A]:String
7:[AccountType]:STRING=[Personal]:String
}
-----------------------------------------------
4 - Record (MODIFIED) {
0:[Account]:STRING=[317]:String
1:[LastName]:STRING=[Murray]:String
2:[FirstName]:STRING=[Bill]:String
3:[Balance]:STRING=[789.65]:String
4:[CreditLimit]:STRING=[5000.00]:String
5:[AccountCreated]:STRING=[2/5/2007]:String
6:[Rating]:STRING=[C]:String
7:[AccountType]:STRING=[Personal]:String
}
-----------------------------------------------
5 records
