Load a simple csv
This guide shows how to load a CSV file into a store thanks to a CSV source. For a description of what the CSV Source is and other advanced options not included in this guide, refer to the CSV source.Goal
The goal is to load the first two columns of “trades.csv” file into theTrades store.
File content
Trades content
We want to load the first two columns into Trades store.
| id | amount |
|---|---|
| 1 | 12394 |
| 2 | 13149 |
Setup
First, we need to import the artifactcom.activeviam.source:csv-source in our project.
Build a source
First step, in order to load a CSV file into a datastore, is to build a CSV source.Trades store.Because of this simple mapping the name of the store is used as a topic name. This topic is registered into the source.
Load into datastore
Second step is to create a channel and use the source to fetch the data into the Datastore.A channel is the link between a topic and a store.
You can build a channel factory like this.
There is two ways of doing so. Using the fetch utility:
ICsvSource is an AutoCloseable resource.Closing a source closes all the registered topics.
Load with a calculated column
Goal
The goal is still to load the same file into theTrades store, but we want to compute a new column
from the
amount column.
Expected trade content
| id | amount | negatedAmount |
|---|---|---|
| 1 | 12394 | -12394 |
| 2 | 13149 | -13149 |
Load into the datastore
To add a new column which is based on existing ones we use anIColumnCalculator.
Load only specific rows
Goal
The goal here is to load the first line of a CSV file with a filtering condition. Currently, there is no direct native method to apply such a filter on a CSV source in Atoti. The recommended approach is to filter these rows during pre-processing before loading the data into Atoti, if possible. However, the following solutions demonstrate how to implement CSV source filtering directly within Atoti. Expected trade content| id | amount | currency |
|---|---|---|
| 1 | 12394 | chf |
Build the filter
The filtering logic is based on a simple predicate:Filtering using a custom tuple publisher
As mentioned earlier, there is no direct native way to apply such a filter on a CSV source. A proposed solution is to create a customTuplePublisher that incorporates the filter.
The filter is used during the TuplePublisher’s process of tuples.
Here is a possible custom TuplePublisher:
Load only specific rows using a filtering CSV column
Goal
The goal here is to load the first line of a CSV file with a filtering condition based on a CSV column.We want to do so without loading the column into our store.
The example file for this section is as follows:
| id | amount | currency | trader | traderEntity | bank | valid |
|---|---|---|---|---|---|---|
| 1 | 12394 | chf | E F | E3 | BNP Paribas | Y |
| 2 | 13149 | gbp | A B | E4 | BNP Paribas | N |
Create a custom channel factory with a filtering translator
The solution involves defining a customCsvMessageChannelFactory that creates a
custom ITranslator. This custom translator overrides the translate method to incorporate the
filtering logic. Below is the code snippet for this custom factory: