Package org.apache.druid.data.input.impl
Class JsonLineReader
- java.lang.Object
-
- org.apache.druid.data.input.IntermediateRowParsingReader<T>
-
- org.apache.druid.data.input.TextReader<byte[]>
-
- org.apache.druid.data.input.TextReader.Bytes
-
- org.apache.druid.data.input.impl.JsonLineReader
-
- All Implemented Interfaces:
InputEntityReader
public class JsonLineReader extends TextReader.Bytes
JsonLineReaderreads input text line by line and tries to convert each text line to an JSON object. Since each text line is processed indepdently, if any exception is thrown when parsing one text line, exception can be caught by callers to skip current line and continue to process next text line. This also means that each text line should be a well-formed JSON text, pretty-printed format is not allowed
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.druid.data.input.TextReader
TextReader.Bytes, TextReader.Strings
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intgetNumHeaderLinesToSkip()Returns the number of header lines to skip.booleanneedsToProcessHeaderLine()Returns true if the file format needs to process a header line.List<InputRow>parseInputRows(byte[] line)Parses the given line into a list ofInputRows.voidprocessHeaderLine(byte[] line)Processes a header line.List<Map<String,Object>>toMap(byte[] intermediateRow)Converts the given intermediate row into aMap.-
Methods inherited from class org.apache.druid.data.input.TextReader.Bytes
intermediateRowAsString, makeSourceIterator
-
Methods inherited from class org.apache.druid.data.input.TextReader
findOrCreateInputRowSignature, getInputRowSchema, intermediateRowIteratorWithMetadata, source
-
Methods inherited from class org.apache.druid.data.input.IntermediateRowParsingReader
intermediateRowIterator, read, sample
-
-
-
-
Method Detail
-
parseInputRows
public List<InputRow> parseInputRows(byte[] line) throws IOException, ParseException
Description copied from class:TextReaderParses the given line into a list ofInputRows. Note that some file formats can explode a single line of input into multiple inputRows. This method will be called afterTextReader.getNumHeaderLinesToSkip()andTextReader.processHeaderLine(T).- Specified by:
parseInputRowsin classTextReader<byte[]>- Throws:
ParseException- if it cannot parse the given intermediateRow properlyIOException
-
toMap
public List<Map<String,Object>> toMap(byte[] intermediateRow) throws IOException
Description copied from class:IntermediateRowParsingReaderConverts the given intermediate row into aMap. The returned JSON will be used by InputSourceSampler. Implementations can use any method to convert the given row into a Map. This should return a non-empty list with the same size of the list returned byIntermediateRowParsingReader.parseInputRows(T)or the returned objects will be discarded- Specified by:
toMapin classIntermediateRowParsingReader<byte[]>- Throws:
IOException
-
getNumHeaderLinesToSkip
public int getNumHeaderLinesToSkip()
Description copied from class:TextReaderReturns the number of header lines to skip.TextReader.processHeaderLine(T)will be called as many times as the returned number.- Specified by:
getNumHeaderLinesToSkipin classTextReader<byte[]>
-
needsToProcessHeaderLine
public boolean needsToProcessHeaderLine()
Description copied from class:TextReaderReturns true if the file format needs to process a header line. This method will be called after skipping lines as many asTextReader.getNumHeaderLinesToSkip().- Specified by:
needsToProcessHeaderLinein classTextReader<byte[]>
-
processHeaderLine
public void processHeaderLine(byte[] line)
Description copied from class:TextReaderProcesses a header line. This will be called ifTextReader.needsToProcessHeaderLine()= true.- Specified by:
processHeaderLinein classTextReader<byte[]>
-
-