define name of value column

The name of the column containing the value is now part of the
csv settings. This allows us to use different names than "duration".
This commit is contained in:
2019-12-14 08:34:33 +01:00
parent 204c258980
commit 7737d45887
5 changed files with 27 additions and 14 deletions

View File

@@ -19,36 +19,40 @@ public class CsvReaderSettings {
private String timeColumn; private String timeColumn;
private String valueColumn;
private byte comment = '#'; private byte comment = '#';
public CsvReaderSettings() { public CsvReaderSettings() {
this("@timestamp", (byte) ',', Collections.emptyList()); this("@timestamp", "duration", (byte) ',', Collections.emptyList());
} }
private CsvReaderSettings(final String timeColumn, final byte separator, final Collection<String> ignoreColumns) { private CsvReaderSettings(final String timeColumn, final String valueColumn, final byte separator,
final Collection<String> ignoreColumns) {
this.timeColumn = timeColumn; this.timeColumn = timeColumn;
this.valueColumn = valueColumn;
this.separator = separator; this.separator = separator;
this.ignoreColumnNames.addAll(ignoreColumns); this.ignoreColumnNames.addAll(ignoreColumns);
} }
public static CsvReaderSettings create(final String timeColumn, final byte separator, public static CsvReaderSettings create(final String timeColumn, final String valueColumn, final byte separator,
final String... ignoreColumnNames) { final String... ignoreColumnNames) {
return new CsvReaderSettings(timeColumn, separator, List.of(ignoreColumnNames)); return new CsvReaderSettings(timeColumn, valueColumn, separator, List.of(ignoreColumnNames));
} }
public static CsvReaderSettings create(final String timeColumn, final char separator, public static CsvReaderSettings create(final String timeColumn, final String valueColumn, final char separator,
final String... ignoreColumnNames) { final String... ignoreColumnNames) {
return CsvReaderSettings.create(timeColumn, separator, List.of(ignoreColumnNames)); return CsvReaderSettings.create(timeColumn, valueColumn, separator, List.of(ignoreColumnNames));
} }
public static CsvReaderSettings create(final String timeColumn, final char separator, public static CsvReaderSettings create(final String timeColumn, final String valueColumn, final char separator,
final Collection<String> ignoreColumnNames) { final Collection<String> ignoreColumnNames) {
Preconditions.checkTrue(separator == (byte) separator, Preconditions.checkTrue(separator == (byte) separator,
"Only separators that fulfill separator == (byte)separator are supported. " "Only separators that fulfill separator == (byte)separator are supported. "
+ "This restriction is because the parsing algorithm skips the overhead of " + "This restriction is because the parsing algorithm skips the overhead of "
+ "translating bytes to characters."); + "translating bytes to characters.");
return new CsvReaderSettings(timeColumn, (byte) separator, ignoreColumnNames); return new CsvReaderSettings(timeColumn, valueColumn, (byte) separator, ignoreColumnNames);
} }
public String getTimeColumn() { public String getTimeColumn() {
@@ -59,6 +63,14 @@ public class CsvReaderSettings {
this.timeColumn = timeColumn; this.timeColumn = timeColumn;
} }
public String getValueColumn() {
return valueColumn;
}
public void setValueColumn(final String valueColumn) {
this.valueColumn = valueColumn;
}
public byte getSeparator() { public byte getSeparator() {
return separator; return separator;
} }

View File

@@ -50,7 +50,7 @@ class CsvToEntryTransformer {
int[] columns = null; int[] columns = null;
final byte[] buffer = new byte[4096 * 16]; final byte[] buffer = new byte[4096 * 16];
final int keyTimestamp = Tags.STRING_COMPRESSOR.put(settings.getTimeColumn()); final int keyTimestamp = Tags.STRING_COMPRESSOR.put(settings.getTimeColumn());
final int keyDuration = Tags.STRING_COMPRESSOR.put("duration"); final int keyDuration = Tags.STRING_COMPRESSOR.put(settings.getValueColumn());
final FastISODateParser dateParser = new FastISODateParser(); final FastISODateParser dateParser = new FastISODateParser();
final Tags additionalTags = initAditionalTags(); final Tags additionalTags = initAditionalTags();

View File

@@ -67,7 +67,7 @@ public final class IngestionHandler implements Callable<Void> {
} else { } else {
in.reset(); in.reset();
final CsvToEntryTransformer csvTransformer = new CsvToEntryTransformer(queue, final CsvToEntryTransformer csvTransformer = new CsvToEntryTransformer(queue,
CsvReaderSettings.create("@timestamp", ',')); CsvReaderSettings.create("@timestamp", "duration", ','));
csvTransformer.readCSV(in); csvTransformer.readCSV(in);
} }
} }

View File

@@ -49,7 +49,7 @@ public class CsvToEntryTransformerTest {
+ dateB.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",2,tagValue\n"; + dateB.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",2,tagValue\n";
final ArrayBlockingQueue<Entries> queue = db.getQueue(); final ArrayBlockingQueue<Entries> queue = db.getQueue();
final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", ','); final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", "duration", ',');
final CsvToEntryTransformer csvToEntryTransformer = new CsvToEntryTransformer(queue, settings); final CsvToEntryTransformer csvToEntryTransformer = new CsvToEntryTransformer(queue, settings);
csvToEntryTransformer.readCSV(new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8))); csvToEntryTransformer.readCSV(new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8)));
queue.put(Entries.POISON); queue.put(Entries.POISON);
@@ -88,7 +88,7 @@ public class CsvToEntryTransformerTest {
+ "2000-01-01T00:00:00.001Z,2,ignoreValue,ignoreValue,tagValue\n"; + "2000-01-01T00:00:00.001Z,2,ignoreValue,ignoreValue,tagValue\n";
final ArrayBlockingQueue<Entries> queue = db.getQueue(); final ArrayBlockingQueue<Entries> queue = db.getQueue();
final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", ',', "ignoredColumn"); final CsvReaderSettings settings = CsvReaderSettings.create("@timestamp", "duration", ',', "ignoredColumn");
final CsvToEntryTransformer csvToEntryTransformer = new CsvToEntryTransformer(queue, settings); final CsvToEntryTransformer csvToEntryTransformer = new CsvToEntryTransformer(queue, settings);
csvToEntryTransformer.readCSV(new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8))); csvToEntryTransformer.readCSV(new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8)));
queue.put(Entries.POISON); queue.put(Entries.POISON);

View File

@@ -51,15 +51,16 @@ public class PdbControllerTest {
final String additionalValue = "additionalValue"; final String additionalValue = "additionalValue";
final String ignoredColumn = "ignoredColumn"; final String ignoredColumn = "ignoredColumn";
final String timeColumn = "time"; final String timeColumn = "time";
final String valueColumn = "value";
final OffsetDateTime dateA = OffsetDateTime.now(); final OffsetDateTime dateA = OffsetDateTime.now();
final OffsetDateTime dateB = OffsetDateTime.now(); final OffsetDateTime dateB = OffsetDateTime.now();
final String csv = "# first line is a comment\n"// final String csv = "# first line is a comment\n"//
+ timeColumn + ",duration,tag," + ignoredColumn + "\n"// + timeColumn + "," + valueColumn + ",tag," + ignoredColumn + "\n"//
+ dateA.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",1,tagValue,ignoredValue\n"// + dateA.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",1,tagValue,ignoredValue\n"//
+ dateB.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",2,tagValue,ignoredValue\n"; + dateB.format(DateTimeFormatter.ISO_ZONED_DATE_TIME) + ",2,tagValue,ignoredValue\n";
final CsvReaderSettings settings = CsvReaderSettings.create(timeColumn, ',', ignoredColumn); final CsvReaderSettings settings = CsvReaderSettings.create(timeColumn, valueColumn, ',', ignoredColumn);
settings.putAdditionalTag(additionalColumn, additionalValue); settings.putAdditionalTag(additionalColumn, additionalValue);
uploadCsv(settings, csv); uploadCsv(settings, csv);
{ {