diff --git a/VERSION b/VERSION index 3ad0595ad..e1f3bbde8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.5 +3.2.0-SNAPSHOT diff --git a/core/riot-core/src/main/java/com/redis/riot/core/AbstractJobExecutable.java b/core/riot-core/src/main/java/com/redis/riot/core/AbstractJobExecutable.java index 72d6aa2ca..665c14a18 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/AbstractJobExecutable.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/AbstractJobExecutable.java @@ -1,8 +1,6 @@ package com.redis.riot.core; import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; import org.springframework.batch.core.Job; @@ -14,8 +12,6 @@ import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.launch.support.SimpleJobLauncher; import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.item.ItemProcessor; -import org.springframework.batch.item.support.CompositeItemProcessor; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.core.task.SyncTaskExecutor; import org.springframework.util.ClassUtils; @@ -100,17 +96,4 @@ protected ReaderStepBuilder step(String name) { return StepBuilder.factory(stepFactory).name(name).options(stepOptions); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - protected ItemProcessor processor(Collection> processors) { - if (processors.isEmpty()) { - return null; - } - if (processors.size() == 1) { - return (ItemProcessor) processors.iterator().next(); - } - CompositeItemProcessor composite = new CompositeItemProcessor<>(); - composite.setDelegates(new ArrayList<>(processors)); - return composite; - } - } diff --git a/core/riot-core/src/main/java/com/redis/riot/core/AbstractMapImport.java b/core/riot-core/src/main/java/com/redis/riot/core/AbstractMapImport.java index 4d0021dba..42fc70244 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/AbstractMapImport.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/AbstractMapImport.java @@ -1,22 +1,12 @@ package com.redis.riot.core; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.function.Predicate; import org.springframework.batch.item.ItemProcessor; -import org.springframework.batch.item.function.FunctionItemProcessor; -import org.springframework.context.expression.MapAccessor; -import org.springframework.expression.AccessException; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.TypedValue; -import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; -import com.redis.spring.batch.util.PredicateItemProcessor; import com.redis.spring.batch.writer.Operation; import com.redis.spring.batch.writer.OperationItemWriter; import com.redis.spring.batch.writer.operation.CompositeOperation; @@ -36,10 +26,19 @@ protected AbstractMapImport(AbstractRedisClient client) { super(client); } + protected ItemProcessor, Map> processor() { + return processorOptions.processor(); + } + public void setProcessorOptions(MapProcessorOptions options) { this.processorOptions = options; } + @SuppressWarnings("unchecked") + public void setOperations(Operation>... operations) { + setOperations(Arrays.asList(operations)); + } + public void setOperations(List>> operations) { this.operations = operations; } @@ -65,47 +64,4 @@ private Operation> operation() { return operation; } - protected ItemProcessor, Map> processor() { - List, Map>> processors = new ArrayList<>(); - EvaluationContext context = evaluationContext(); - if (!CollectionUtils.isEmpty(processorOptions.getExpressions())) { - processors.add(new FunctionItemProcessor<>(SpelUtils.mapOperator(context, processorOptions.getExpressions()))); - } - if (processorOptions.getFilter() != null) { - Predicate> predicate = SpelUtils.predicate(context, processorOptions.getFilter()); - processors.add(new PredicateItemProcessor<>(predicate)); - } - return processor(processors); - } - - protected StandardEvaluationContext evaluationContext() { - StandardEvaluationContext context = processorOptions.getEvaluationContextOptions().evaluationContext(); - context.addPropertyAccessor(new QuietMapAccessor()); - return context; - } - - /** - * {@link org.springframework.context.expression.MapAccessor} that always returns true for canRead and does not throw - * AccessExceptions - * - * @author Julien Ruaux - */ - private static class QuietMapAccessor extends MapAccessor { - - @Override - public boolean canRead(EvaluationContext context, @Nullable Object target, String name) { - return true; - } - - @Override - public TypedValue read(EvaluationContext context, @Nullable Object target, String name) { - try { - return super.read(context, target, name); - } catch (AccessException e) { - return new TypedValue(null); - } - } - - } - } diff --git a/core/riot-core/src/main/java/com/redis/riot/core/EvaluationContextOptions.java b/core/riot-core/src/main/java/com/redis/riot/core/EvaluationContextOptions.java index 97f1a2eb2..b4504fbe2 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/EvaluationContextOptions.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/EvaluationContextOptions.java @@ -7,7 +7,6 @@ import org.springframework.expression.Expression; import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import com.redis.lettucemod.util.GeoLocation; @@ -53,13 +52,8 @@ public void addExpression(String field, Expression expression) { public StandardEvaluationContext evaluationContext() { StandardEvaluationContext context = new StandardEvaluationContext(); context.registerFunction("geo", geoMethod()); - Map contextVariables = variables(); - if (!CollectionUtils.isEmpty(contextVariables)) { - context.setVariables(contextVariables); - } - if (!CollectionUtils.isEmpty(expressions)) { - expressions.forEach((k, v) -> context.setVariable(k, v.getValue(context))); - } + context.setVariables(variables()); + expressions.forEach((k, v) -> context.setVariable(k, v.getValue(context))); return context; } diff --git a/core/riot-core/src/main/java/com/redis/riot/core/KeyFilterOptions.java b/core/riot-core/src/main/java/com/redis/riot/core/KeyFilterOptions.java index e050acdac..48f07f74c 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/KeyFilterOptions.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/KeyFilterOptions.java @@ -22,7 +22,6 @@ public class KeyFilterOptions { private List slots; public KeyFilterOptions() { - } private KeyFilterOptions(Builder builder) { diff --git a/core/riot-core/src/main/java/com/redis/riot/core/MapProcessorOptions.java b/core/riot-core/src/main/java/com/redis/riot/core/MapProcessorOptions.java index 3e69d79cb..adad37fc8 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/MapProcessorOptions.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/MapProcessorOptions.java @@ -1,8 +1,23 @@ package com.redis.riot.core; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import java.util.function.Predicate; +import org.springframework.batch.item.ItemProcessor; +import org.springframework.batch.item.function.FunctionItemProcessor; +import org.springframework.context.expression.MapAccessor; +import org.springframework.expression.AccessException; +import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; +import org.springframework.expression.TypedValue; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.lang.Nullable; +import org.springframework.util.CollectionUtils; + +import com.redis.spring.batch.util.BatchUtils; +import com.redis.spring.batch.util.PredicateItemProcessor; public class MapProcessorOptions { @@ -36,4 +51,42 @@ public void setFilter(Expression filter) { this.filter = filter; } + public ItemProcessor, Map> processor() { + List, Map>> processors = new ArrayList<>(); + StandardEvaluationContext context = evaluationContextOptions.evaluationContext(); + context.addPropertyAccessor(new QuietMapAccessor()); + if (!CollectionUtils.isEmpty(expressions)) { + processors.add(new FunctionItemProcessor<>(SpelUtils.mapOperator(context, expressions))); + } + if (filter != null) { + Predicate> predicate = SpelUtils.predicate(context, filter); + processors.add(new PredicateItemProcessor<>(predicate)); + } + return BatchUtils.processor(processors); + } + + /** + * {@link org.springframework.context.expression.MapAccessor} that always returns true for canRead and does not throw + * AccessExceptions + * + * @author Julien Ruaux + */ + private static class QuietMapAccessor extends MapAccessor { + + @Override + public boolean canRead(EvaluationContext context, @Nullable Object target, String name) { + return true; + } + + @Override + public TypedValue read(EvaluationContext context, @Nullable Object target, String name) { + try { + return super.read(context, target, name); + } catch (AccessException e) { + return new TypedValue(null); + } + } + + } + } diff --git a/core/riot-core/src/main/java/com/redis/riot/core/PingExecutable.java b/core/riot-core/src/main/java/com/redis/riot/core/Ping.java similarity index 91% rename from core/riot-core/src/main/java/com/redis/riot/core/PingExecutable.java rename to core/riot-core/src/main/java/com/redis/riot/core/Ping.java index 38ac77a6a..6b44f0405 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/PingExecutable.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/Ping.java @@ -1,6 +1,6 @@ package com.redis.riot.core; -import java.io.PrintStream; +import java.io.PrintWriter; import java.time.Duration; import java.util.Map; import java.util.TreeMap; @@ -17,7 +17,7 @@ import io.lettuce.core.metrics.CommandMetrics.CommandLatency; import io.lettuce.core.metrics.DefaultCommandLatencyCollectorOptions; -public class PingExecutable implements Executable { +public class Ping implements Executable { private final AbstractRedisClient client; @@ -29,7 +29,7 @@ public class PingExecutable implements Executable { public static final double[] DEFAULT_PERCENTILES = DefaultCommandLatencyCollectorOptions.DEFAULT_TARGET_PERCENTILES; - private final PrintStream printStream; + private final PrintWriter out; private int iterations = DEFAULT_ITERATIONS; @@ -43,9 +43,9 @@ public class PingExecutable implements Executable { private Duration sleep; - public PingExecutable(AbstractRedisClient client, PrintStream printStream) { + public Ping(AbstractRedisClient client, PrintWriter out) { this.client = client; - this.printStream = printStream; + this.out = out; } public void setSleep(Duration sleep) { @@ -123,7 +123,7 @@ private void execute(StatefulRedisModulesConnection connection) } Histogram histogram = stats.getIntervalHistogram(); if (latencyDistribution) { - histogram.outputPercentileDistribution(printStream, (double) timeUnit.toNanos(1)); + histogram.outputPercentileDistribution(System.out, (double) timeUnit.toNanos(1)); } Map percentileMap = new TreeMap<>(); for (double targetPercentile : percentiles) { @@ -133,7 +133,7 @@ private void execute(StatefulRedisModulesConnection connection) long min = toTimeUnit(histogram.getMinValue()); long max = toTimeUnit(histogram.getMaxValue()); CommandLatency latency = new CommandLatency(min, max, percentileMap); - printStream.println(latency.toString()); + out.println(latency.toString()); } private long toTimeUnit(long value) { diff --git a/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerImport.java b/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerImport.java index 6aaa121fe..e4fb3116a 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerImport.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerImport.java @@ -63,7 +63,6 @@ protected Job job() { private FakerItemReader reader() { FakerItemReader reader = new FakerItemReader(); - reader.setEvaluationContext(evaluationContext()); reader.setMaxItemCount(count); reader.setLocale(locale); reader.setFields(fields()); diff --git a/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerItemReader.java b/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerItemReader.java index 736527f35..606365c5a 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerItemReader.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/faker/FakerItemReader.java @@ -7,6 +7,7 @@ import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader; +import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.spel.support.DataBindingMethodResolver; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -26,24 +27,16 @@ public class FakerItemReader extends AbstractItemCountingItemStreamItemReader fields = new LinkedHashMap<>(); private Locale locale = DEFAULT_LOCALE; - private boolean open; + private EvaluationContext evaluationContext; public FakerItemReader() { setName(ClassUtils.getShortName(getClass())); } - public void setEvaluationContext(StandardEvaluationContext context) { - this.evaluationContext = context; - } - public void setLocale(Locale locale) { this.locale = locale; } @@ -62,14 +55,18 @@ public void setStringFields(Map stringFields) { protected synchronized void doOpen() throws Exception { if (!isOpen()) { Assert.notEmpty(fields, "No field specified"); - evaluationContext.addPropertyAccessor(new ReflectivePropertyAccessor()); - evaluationContext.addMethodResolver(DataBindingMethodResolver.forInstanceMethodInvocation()); - evaluationContext.setRootObject(new Faker(locale)); - evaluationContext.setVariable(EXECUTION_CONTEXT, new ExecutionContext()); - open = true; + evaluationContext = evaluationContext(); } } + private EvaluationContext evaluationContext() { + StandardEvaluationContext context = new StandardEvaluationContext(); + context.addPropertyAccessor(new ReflectivePropertyAccessor()); + context.addMethodResolver(DataBindingMethodResolver.forInstanceMethodInvocation()); + context.setRootObject(new AugmentedFaker(locale)); + return context; + } + @Override protected Map doRead() throws Exception { Map map = new HashMap<>(); @@ -80,15 +77,19 @@ protected Map doRead() throws Exception { @Override protected synchronized void doClose() throws Exception { if (isOpen()) { - open = false; + evaluationContext = null; } } public boolean isOpen() { - return open; + return evaluationContext != null; } - public class ExecutionContext { + public class AugmentedFaker extends Faker { + + public AugmentedFaker(Locale locale) { + super(locale); + } public int getIndex() { return index(); diff --git a/core/riot-core/src/main/java/com/redis/riot/core/file/FileDumpExport.java b/core/riot-core/src/main/java/com/redis/riot/core/file/FileDumpExport.java index eac818479..5052ddc1c 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/file/FileDumpExport.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/file/FileDumpExport.java @@ -6,7 +6,6 @@ import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.json.JacksonJsonObjectMarshaller; import org.springframework.batch.item.json.JsonObjectMarshaller; -import org.springframework.batch.item.support.AbstractFileItemWriter; import org.springframework.core.io.Resource; import org.springframework.core.io.WritableResource; @@ -29,7 +28,7 @@ public class FileDumpExport extends AbstractExport { public static final String DEFAULT_ROOT_NAME = "root"; - public static final String DEFAULT_LINE_SEPARATOR = AbstractFileItemWriter.DEFAULT_LINE_SEPARATOR; + public static final String DEFAULT_LINE_SEPARATOR = System.getProperty("line.separator"); private final String file; diff --git a/core/riot-core/src/main/java/com/redis/riot/core/file/FileImport.java b/core/riot-core/src/main/java/com/redis/riot/core/file/FileImport.java index d1d351546..68363f824 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/file/FileImport.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/file/FileImport.java @@ -6,10 +6,10 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.job.builder.SimpleJobBuilder; @@ -37,7 +37,7 @@ public class FileImport extends AbstractMapImport { - private static final Logger log = Logger.getLogger(FileImport.class.getName()); + private final Logger log = LoggerFactory.getLogger(FileImport.class); private static final String PIPE_DELIMITER = "|"; @@ -71,6 +71,10 @@ public class FileImport extends AbstractMapImport { private String continuationString = DEFAULT_CONTINUATION_STRING; + public FileImport(AbstractRedisClient client, String... files) { + this(client, Arrays.asList(files)); + } + public FileImport(AbstractRedisClient client, List files) { super(client); Assert.notEmpty(files, "No file specified"); @@ -210,7 +214,7 @@ private AbstractItemCountingItemStreamItemReader> reader(Res if (!ObjectUtils.isEmpty(includedFields)) { tokenizer.setIncludedFields(includedFields); } - log.log(Level.INFO, "Creating delimited reader for {0}", resource); + log.info("Creating delimited reader for {}", resource); return flatFileReader(resource, tokenizer); case FIXED: FixedLengthTokenizer fixedLengthTokenizer = new FixedLengthTokenizer(); @@ -222,13 +226,13 @@ private AbstractItemCountingItemStreamItemReader> reader(Res throw new IllegalArgumentException("Invalid ranges specified: " + columnRanges); } fixedLengthTokenizer.setColumns(ranges); - log.log(Level.INFO, "Creating fixed-width reader for {0}", resource); + log.info("Creating fixed-width reader for {}", resource); return flatFileReader(resource, fixedLengthTokenizer); case XML: - log.log(Level.INFO, "Creating XML reader for {0}", resource); + log.info("Creating XML reader for {}", resource); return (XmlItemReader) FileUtils.xmlReader(resource, Map.class); case JSON: - log.log(Level.INFO, "Creating JSON reader for {0}", resource); + log.info("Creating JSON reader for {}", resource); return (JsonItemReader) FileUtils.jsonReader(resource, Map.class); default: throw new UnsupportedOperationException("Unsupported file type: " + type); diff --git a/core/riot-core/src/main/java/com/redis/riot/core/file/HeaderCallbackHandler.java b/core/riot-core/src/main/java/com/redis/riot/core/file/HeaderCallbackHandler.java index daeb7a19e..dfae9d394 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/file/HeaderCallbackHandler.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/file/HeaderCallbackHandler.java @@ -11,7 +11,7 @@ public class HeaderCallbackHandler implements LineCallbackHandler { - private final Logger log = LoggerFactory.getLogger(getClass()); + private final Logger log = LoggerFactory.getLogger(HeaderCallbackHandler.class); private final AbstractLineTokenizer tokenizer; diff --git a/core/riot-core/src/main/java/com/redis/riot/core/file/resource/AbstractResourceItemWriter.java b/core/riot-core/src/main/java/com/redis/riot/core/file/resource/AbstractResourceItemWriter.java index 17f835040..a0cd9c56e 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/file/resource/AbstractResourceItemWriter.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/file/resource/AbstractResourceItemWriter.java @@ -23,9 +23,9 @@ import java.nio.channels.WritableByteChannel; import java.nio.charset.UnsupportedCharsetException; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemStream; import org.springframework.batch.item.ItemStreamException; @@ -41,10 +41,8 @@ import org.springframework.util.Assert; /** - * Base class for item writers that write data to a file or stream. This class - * provides common features like restart, force sync, append etc. The location - * of the output file is defined by a {@link Resource} which must represent a - * writable file.
+ * Base class for item writers that write data to a file or stream. This class provides common features like restart, force + * sync, append etc. The location of the output file is defined by a {@link Resource} which must represent a writable file.
* * Uses buffered writer to improve performance.
* @@ -60,507 +58,492 @@ * @since 4.1 */ public abstract class AbstractResourceItemWriter extends AbstractItemStreamItemWriter - implements ResourceAwareItemWriterItemStream, InitializingBean { - - public static final boolean DEFAULT_TRANSACTIONAL = true; - - protected static final Logger logger = Logger.getLogger(AbstractResourceItemWriter.class.getName()); - - public static final String DEFAULT_LINE_SEPARATOR = System.getProperty("line.separator"); - - // default encoding for writing to output files - set to UTF-8. - public static final String DEFAULT_CHARSET = "UTF-8"; - - private static final String WRITTEN_STATISTICS_NAME = "written"; - - private static final String RESTART_DATA_NAME = "current.count"; - - private WritableResource resource; - - protected OutputState state = null; - - private boolean saveState = true; - - protected boolean shouldDeleteIfExists = true; - - private boolean shouldDeleteIfEmpty = false; - - private String encoding = DEFAULT_CHARSET; - - private FlatFileHeaderCallback headerCallback; - - private FlatFileFooterCallback footerCallback; - - protected String lineSeparator = DEFAULT_LINE_SEPARATOR; - - private boolean transactional = DEFAULT_TRANSACTIONAL; - - protected boolean append = false; - - /** - * Public setter for the line separator. Defaults to the System property - * line.separator. - * - * @param lineSeparator the line separator to set - */ - public void setLineSeparator(String lineSeparator) { - this.lineSeparator = lineSeparator; - } - - /** - * Setter for resource. Represents a file that can be written. - * - * @param resource the resource to be written to - */ - @Override - public void setResource(Resource resource) { - Assert.isInstanceOf(WritableResource.class, resource); - this.resource = (WritableResource) resource; - } - - /** - * Sets encoding for output template. - * - * @param newEncoding {@link String} containing the encoding to be used for the - * writer. - */ - public void setEncoding(String newEncoding) { - this.encoding = newEncoding; - } - - /** - * Flag to indicate that the target file should be deleted if it already exists, - * otherwise it will be created. Defaults to true, so no appending except on - * restart. If set to false and {@link #setAppendAllowed(boolean) appendAllowed} - * is also false then there will be an exception when the stream is opened to - * prevent existing data being potentially corrupted. - * - * @param shouldDeleteIfExists the flag value to set - */ - public void setShouldDeleteIfExists(boolean shouldDeleteIfExists) { - this.shouldDeleteIfExists = shouldDeleteIfExists; - } - - /** - * Flag to indicate that the target file should be appended if it already - * exists. If this flag is set then the flag - * {@link #setShouldDeleteIfExists(boolean) shouldDeleteIfExists} is - * automatically set to false, so that flag should not be set explicitly. - * Defaults value is false. - * - * @param append the flag value to set - */ - public void setAppendAllowed(boolean append) { - this.append = append; - } - - /** - * Flag to indicate that the target file should be deleted if no lines have been - * written (other than header and footer) on close. Defaults to false. - * - * @param shouldDeleteIfEmpty the flag value to set - */ - public void setShouldDeleteIfEmpty(boolean shouldDeleteIfEmpty) { - this.shouldDeleteIfEmpty = shouldDeleteIfEmpty; - } - - /** - * Set the flag indicating whether or not state should be saved in the provided - * {@link ExecutionContext} during the {@link ItemStream} call to update. - * Setting this to false means that it will always start at the beginning on a - * restart. - * - * @param saveState if true, state will be persisted - */ - public void setSaveState(boolean saveState) { - this.saveState = saveState; - } - - /** - * headerCallback will be called before writing the first item to file. Newline - * will be automatically appended after the header is written. - * - * @param headerCallback {@link FlatFileHeaderCallback} to generate the header - * - */ - public void setHeaderCallback(FlatFileHeaderCallback headerCallback) { - this.headerCallback = headerCallback; - } - - /** - * footerCallback will be called after writing the last item to file, but before - * the file is closed. - * - * @param footerCallback {@link FlatFileFooterCallback} to generate the footer - * - */ - public void setFooterCallback(FlatFileFooterCallback footerCallback) { - this.footerCallback = footerCallback; - } - - /** - * Flag to indicate that writing to the buffer should be delayed if a - * transaction is active. Defaults to true. - * - * @param transactional true if writing to buffer should be delayed. - * - */ - public void setTransactional(boolean transactional) { - this.transactional = transactional; - } - - /** - * Writes out a string followed by a "new line", where the format of the new - * line separator is determined by the underlying operating system. - * - * @param items list of items to be written to output stream - * @throws Exception if an error occurs while writing items to the output stream - */ - @Override - public void write(List items) throws Exception { - if (!getOutputState().isInitialized()) { - throw new WriterNotOpenException("Writer must be open before it can be written to"); - } - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Writing to file with " + items.size() + " items."); - } - - OutputState outputState = getOutputState(); - - String lines = doWrite(items); - try { - outputState.write(lines); - } catch (IOException e) { - throw new WriteFailedException("Could not write data. The file may be corrupt.", e); - } - outputState.setLinesWritten(outputState.getLinesWritten() + items.size()); - } - - /** - * Write out a string of items followed by a "new line", where the format of the - * new line separator is determined by the underlying operating system. - * - * @param items to be written - * @return written lines - */ - protected abstract String doWrite(List items); - - /** - * @see ItemStream#close() - */ - @Override - public void close() { - super.close(); - if (state != null) { - try { - if (footerCallback != null && state.outputBufferedWriter != null) { - footerCallback.writeFooter(state.outputBufferedWriter); - state.outputBufferedWriter.flush(); - } - } catch (IOException e) { - throw new ItemStreamException("Failed to write footer before closing", e); - } finally { - state.close(); - state = null; - } - } - } - - /** - * Initialize the reader. This method may be called multiple times before close - * is called. - * - * @see ItemStream#open(ExecutionContext) - */ - @Override - public void open(ExecutionContext executionContext) throws ItemStreamException { - super.open(executionContext); - - Assert.notNull(resource, "The resource must be set"); - - if (!getOutputState().isInitialized()) { - doOpen(executionContext); - } - } - - private void doOpen(ExecutionContext executionContext) throws ItemStreamException { - OutputState outputState = getOutputState(); - if (executionContext.containsKey(getExecutionContextKey(RESTART_DATA_NAME))) { - outputState.restoreFrom(executionContext); - } - try { - outputState.initializeBufferedWriter(); - } catch (IOException ioe) { - throw new ItemStreamException("Failed to initialize writer", ioe); - } - if (outputState.lastMarkedByteOffsetPosition == 0 && !outputState.appending && headerCallback != null) { - try { - headerCallback.writeHeader(outputState.outputBufferedWriter); - outputState.write(lineSeparator); - } catch (IOException e) { - throw new ItemStreamException("Could not write headers. The file may be corrupt.", e); - } - } - } - - /** - * @see ItemStream#update(ExecutionContext) - */ - @Override - public void update(ExecutionContext executionContext) { - super.update(executionContext); - if (state == null) { - throw new ItemStreamException("ItemStream not open or already closed."); - } - - Assert.notNull(executionContext, "ExecutionContext must not be null"); - - if (saveState) { - - try { - executionContext.putLong(getExecutionContextKey(RESTART_DATA_NAME), state.position()); - } catch (IOException e) { - throw new ItemStreamException("ItemStream does not return current position properly", e); - } - - executionContext.putLong(getExecutionContextKey(WRITTEN_STATISTICS_NAME), state.linesWritten); - } - } - - // Returns object representing state. - protected OutputState getOutputState() { - if (state == null) { - Assert.state(!resource.exists() || resource.isWritable(), "Resource is not writable: [" + resource + "]"); - state = new OutputState(); - state.setDeleteIfExists(shouldDeleteIfExists); - state.setAppendAllowed(append); - state.setEncoding(encoding); - } - return state; - } - - /** - * Encapsulates the runtime state of the writer. All state changing operations - * on the writer go through this class. - */ - protected class OutputState { - - private CountingOutputStream os; - - // The bufferedWriter over the file channel that is actually written - Writer outputBufferedWriter; - - WritableByteChannel fileChannel; - - // this represents the charset encoding (if any is needed) for the - // output file - String encoding = DEFAULT_CHARSET; - - boolean restarted = false; - - long lastMarkedByteOffsetPosition = 0; - - long linesWritten = 0; - - boolean shouldDeleteIfExists = true; - - boolean initialized = false; - - private boolean append = false; - - private boolean appending = false; - - /** - * @return byte offset position of the cursor in the output file as a long - * @throws IOException If unable to get the offset position - */ - public long position() throws IOException { - long pos = 0; - - if (fileChannel == null) { - return 0; - } - - outputBufferedWriter.flush(); - pos = os.getCount(); - if (transactional) { - pos += ((TransactionAwareBufferedWriter) outputBufferedWriter).getBufferSize(); - } - - return pos; - - } - - /** - * @param append if true, append to previously created file - */ - public void setAppendAllowed(boolean append) { - this.append = append; - } - - /** - * @param executionContext state from which to restore writing from - */ - public void restoreFrom(ExecutionContext executionContext) { - lastMarkedByteOffsetPosition = executionContext.getLong(getExecutionContextKey(RESTART_DATA_NAME)); - linesWritten = executionContext.getLong(getExecutionContextKey(WRITTEN_STATISTICS_NAME)); - if (shouldDeleteIfEmpty && linesWritten == 0) { - // previous execution deleted the output file because no items were written - restarted = false; - lastMarkedByteOffsetPosition = 0; - } else { - restarted = true; - } - } - - /** - * @param shouldDeleteIfExists indicator - */ - public void setDeleteIfExists(boolean shouldDeleteIfExists) { - this.shouldDeleteIfExists = shouldDeleteIfExists; - } - - /** - * @param encoding file encoding - */ - public void setEncoding(String encoding) { - this.encoding = encoding; - } - - public long getLinesWritten() { - return linesWritten; - } - - public void setLinesWritten(long linesWritten) { - this.linesWritten = linesWritten; - } - - /** - * Close the open resource and reset counters. - */ - public void close() { - - initialized = false; - restarted = false; - try { - if (outputBufferedWriter != null) { - outputBufferedWriter.close(); - } - } catch (IOException ioe) { - throw new ItemStreamException("Unable to close the the ItemWriter", ioe); - } finally { - if (!transactional) { - closeStream(); - } - } - } - - private void closeStream() { - try { - if (fileChannel != null) { - fileChannel.close(); - } - } catch (IOException ioe) { - throw new ItemStreamException("Unable to close the the ItemWriter", ioe); - } finally { - try { - if (os != null) { - os.close(); - } - } catch (IOException ioe) { - throw new ItemStreamException("Unable to close the the ItemWriter", ioe); - } - } - } - - /** - * @param line String to be written to the file - * @throws IOException If unable to write the String to the file - */ - public void write(String line) throws IOException { - if (!initialized) { - initializeBufferedWriter(); - } - - outputBufferedWriter.write(line); - outputBufferedWriter.flush(); - } - - /** - * Creates the buffered writer for the output file channel based on - * configuration information. - * - * @throws IOException if unable to initialize buffer - */ - private void initializeBufferedWriter() throws IOException { - - os = new CountingOutputStream(resource.getOutputStream()); - fileChannel = Channels.newChannel(os); - - outputBufferedWriter = getBufferedWriter(fileChannel, encoding); - outputBufferedWriter.flush(); - - if (append && resource.contentLength() > 0) { - // Bug in IO library? This doesn't work... - // lastMarkedByteOffsetPosition = fileChannel.position(); - appending = true; - // Don't write the headers again - } - - Assert.state(outputBufferedWriter != null, "Unable to initialize buffered writer"); - // in case of restarting reset position to last committed point - if (restarted) { - checkFileSize(); - } - - initialized = true; - } - - public boolean isInitialized() { - return initialized; - } - - /** - * Returns the buffered writer opened to the beginning of the file specified by - * the absolute path name contained in absoluteFileName. - */ - private Writer getBufferedWriter(WritableByteChannel fileChannel, String encoding) { - try { - final WritableByteChannel channel = fileChannel; - if (transactional) { - TransactionAwareBufferedWriter writer = new TransactionAwareBufferedWriter(channel, - this::closeStream); - - writer.setEncoding(encoding); - return writer; - } else { - return new BufferedWriter(Channels.newWriter(fileChannel, encoding)); - } - } catch (UnsupportedCharsetException ucse) { - throw new ItemStreamException("Bad encoding configuration for output file " + fileChannel, ucse); - } - } - - /** - * Checks (on setState) to make sure that the current output file's size is not - * smaller than the last saved commit point. If it is, then the file has been - * damaged in some way and whole task must be started over again from the - * beginning. - * - * @throws IOException if there is an IO problem - */ - private void checkFileSize() throws IOException { - long size = -1; - - outputBufferedWriter.flush(); - size = os.getCount(); - - if (size < lastMarkedByteOffsetPosition) { - throw new ItemStreamException("Current file size is smaller than size at last commit"); - } - } - - } + implements ResourceAwareItemWriterItemStream, InitializingBean { + + public static final boolean DEFAULT_TRANSACTIONAL = true; + + protected final Logger log = LoggerFactory.getLogger(AbstractResourceItemWriter.class); + + public static final String DEFAULT_LINE_SEPARATOR = System.getProperty("line.separator"); + + // default encoding for writing to output files - set to UTF-8. + public static final String DEFAULT_CHARSET = "UTF-8"; + + private static final String WRITTEN_STATISTICS_NAME = "written"; + + private static final String RESTART_DATA_NAME = "current.count"; + + private WritableResource resource; + + protected OutputState state = null; + + private boolean saveState = true; + + protected boolean shouldDeleteIfExists = true; + + private boolean shouldDeleteIfEmpty = false; + + private String encoding = DEFAULT_CHARSET; + + private FlatFileHeaderCallback headerCallback; + + private FlatFileFooterCallback footerCallback; + + protected String lineSeparator = DEFAULT_LINE_SEPARATOR; + + private boolean transactional = DEFAULT_TRANSACTIONAL; + + protected boolean append = false; + + /** + * Public setter for the line separator. Defaults to the System property line.separator. + * + * @param lineSeparator the line separator to set + */ + public void setLineSeparator(String lineSeparator) { + this.lineSeparator = lineSeparator; + } + + /** + * Setter for resource. Represents a file that can be written. + * + * @param resource the resource to be written to + */ + @Override + public void setResource(Resource resource) { + Assert.isInstanceOf(WritableResource.class, resource); + this.resource = (WritableResource) resource; + } + + /** + * Sets encoding for output template. + * + * @param newEncoding {@link String} containing the encoding to be used for the writer. + */ + public void setEncoding(String newEncoding) { + this.encoding = newEncoding; + } + + /** + * Flag to indicate that the target file should be deleted if it already exists, otherwise it will be created. Defaults to + * true, so no appending except on restart. If set to false and {@link #setAppendAllowed(boolean) appendAllowed} is also + * false then there will be an exception when the stream is opened to prevent existing data being potentially corrupted. + * + * @param shouldDeleteIfExists the flag value to set + */ + public void setShouldDeleteIfExists(boolean shouldDeleteIfExists) { + this.shouldDeleteIfExists = shouldDeleteIfExists; + } + + /** + * Flag to indicate that the target file should be appended if it already exists. If this flag is set then the flag + * {@link #setShouldDeleteIfExists(boolean) shouldDeleteIfExists} is automatically set to false, so that flag should not be + * set explicitly. Defaults value is false. + * + * @param append the flag value to set + */ + public void setAppendAllowed(boolean append) { + this.append = append; + } + + /** + * Flag to indicate that the target file should be deleted if no lines have been written (other than header and footer) on + * close. Defaults to false. + * + * @param shouldDeleteIfEmpty the flag value to set + */ + public void setShouldDeleteIfEmpty(boolean shouldDeleteIfEmpty) { + this.shouldDeleteIfEmpty = shouldDeleteIfEmpty; + } + + /** + * Set the flag indicating whether or not state should be saved in the provided {@link ExecutionContext} during the + * {@link ItemStream} call to update. Setting this to false means that it will always start at the beginning on a restart. + * + * @param saveState if true, state will be persisted + */ + public void setSaveState(boolean saveState) { + this.saveState = saveState; + } + + /** + * headerCallback will be called before writing the first item to file. Newline will be automatically appended after the + * header is written. + * + * @param headerCallback {@link FlatFileHeaderCallback} to generate the header + * + */ + public void setHeaderCallback(FlatFileHeaderCallback headerCallback) { + this.headerCallback = headerCallback; + } + + /** + * footerCallback will be called after writing the last item to file, but before the file is closed. + * + * @param footerCallback {@link FlatFileFooterCallback} to generate the footer + * + */ + public void setFooterCallback(FlatFileFooterCallback footerCallback) { + this.footerCallback = footerCallback; + } + + /** + * Flag to indicate that writing to the buffer should be delayed if a transaction is active. Defaults to true. + * + * @param transactional true if writing to buffer should be delayed. + * + */ + public void setTransactional(boolean transactional) { + this.transactional = transactional; + } + + /** + * Writes out a string followed by a "new line", where the format of the new line separator is determined by the underlying + * operating system. + * + * @param items list of items to be written to output stream + * @throws Exception if an error occurs while writing items to the output stream + */ + @Override + public void write(List items) throws Exception { + if (!getOutputState().isInitialized()) { + throw new WriterNotOpenException("Writer must be open before it can be written to"); + } + + log.debug("Writing to file with {} items.", items.size()); + + OutputState outputState = getOutputState(); + + String lines = doWrite(items); + try { + outputState.write(lines); + } catch (IOException e) { + throw new WriteFailedException("Could not write data. The file may be corrupt.", e); + } + outputState.setLinesWritten(outputState.getLinesWritten() + items.size()); + } + + /** + * Write out a string of items followed by a "new line", where the format of the new line separator is determined by the + * underlying operating system. + * + * @param items to be written + * @return written lines + */ + protected abstract String doWrite(List items); + + /** + * @see ItemStream#close() + */ + @Override + public void close() { + super.close(); + if (state != null) { + try { + if (footerCallback != null && state.outputBufferedWriter != null) { + footerCallback.writeFooter(state.outputBufferedWriter); + state.outputBufferedWriter.flush(); + } + } catch (IOException e) { + throw new ItemStreamException("Failed to write footer before closing", e); + } finally { + state.close(); + state = null; + } + } + } + + /** + * Initialize the reader. This method may be called multiple times before close is called. + * + * @see ItemStream#open(ExecutionContext) + */ + @Override + public void open(ExecutionContext executionContext) throws ItemStreamException { + super.open(executionContext); + + Assert.notNull(resource, "The resource must be set"); + + if (!getOutputState().isInitialized()) { + doOpen(executionContext); + } + } + + private void doOpen(ExecutionContext executionContext) throws ItemStreamException { + OutputState outputState = getOutputState(); + if (executionContext.containsKey(getExecutionContextKey(RESTART_DATA_NAME))) { + outputState.restoreFrom(executionContext); + } + try { + outputState.initializeBufferedWriter(); + } catch (IOException ioe) { + throw new ItemStreamException("Failed to initialize writer", ioe); + } + if (outputState.lastMarkedByteOffsetPosition == 0 && !outputState.appending && headerCallback != null) { + try { + headerCallback.writeHeader(outputState.outputBufferedWriter); + outputState.write(lineSeparator); + } catch (IOException e) { + throw new ItemStreamException("Could not write headers. The file may be corrupt.", e); + } + } + } + + /** + * @see ItemStream#update(ExecutionContext) + */ + @Override + public void update(ExecutionContext executionContext) { + super.update(executionContext); + if (state == null) { + throw new ItemStreamException("ItemStream not open or already closed."); + } + + Assert.notNull(executionContext, "ExecutionContext must not be null"); + + if (saveState) { + + try { + executionContext.putLong(getExecutionContextKey(RESTART_DATA_NAME), state.position()); + } catch (IOException e) { + throw new ItemStreamException("ItemStream does not return current position properly", e); + } + + executionContext.putLong(getExecutionContextKey(WRITTEN_STATISTICS_NAME), state.linesWritten); + } + } + + // Returns object representing state. + protected OutputState getOutputState() { + if (state == null) { + Assert.state(!resource.exists() || resource.isWritable(), "Resource is not writable: [" + resource + "]"); + state = new OutputState(); + state.setDeleteIfExists(shouldDeleteIfExists); + state.setAppendAllowed(append); + state.setEncoding(encoding); + } + return state; + } + + /** + * Encapsulates the runtime state of the writer. All state changing operations on the writer go through this class. + */ + protected class OutputState { + + private static final String ERROR_CLOSING = "Unable to close the the ItemWriter"; + + private CountingOutputStream os; + + // The bufferedWriter over the file channel that is actually written + Writer outputBufferedWriter; + + WritableByteChannel fileChannel; + + // this represents the charset encoding (if any is needed) for the + // output file + String encoding = DEFAULT_CHARSET; + + boolean restarted = false; + + long lastMarkedByteOffsetPosition = 0; + + long linesWritten = 0; + + boolean shouldDeleteIfExists = true; + + boolean initialized = false; + + private boolean append = false; + + private boolean appending = false; + + /** + * @return byte offset position of the cursor in the output file as a long + * @throws IOException If unable to get the offset position + */ + public long position() throws IOException { + long pos = 0; + + if (fileChannel == null) { + return 0; + } + + outputBufferedWriter.flush(); + pos = os.getCount(); + if (transactional) { + pos += ((TransactionAwareBufferedWriter) outputBufferedWriter).getBufferSize(); + } + + return pos; + + } + + /** + * @param append if true, append to previously created file + */ + public void setAppendAllowed(boolean append) { + this.append = append; + } + + /** + * @param executionContext state from which to restore writing from + */ + public void restoreFrom(ExecutionContext executionContext) { + lastMarkedByteOffsetPosition = executionContext.getLong(getExecutionContextKey(RESTART_DATA_NAME)); + linesWritten = executionContext.getLong(getExecutionContextKey(WRITTEN_STATISTICS_NAME)); + if (shouldDeleteIfEmpty && linesWritten == 0) { + // previous execution deleted the output file because no items were written + restarted = false; + lastMarkedByteOffsetPosition = 0; + } else { + restarted = true; + } + } + + /** + * @param shouldDeleteIfExists indicator + */ + public void setDeleteIfExists(boolean shouldDeleteIfExists) { + this.shouldDeleteIfExists = shouldDeleteIfExists; + } + + /** + * @param encoding file encoding + */ + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public long getLinesWritten() { + return linesWritten; + } + + public void setLinesWritten(long linesWritten) { + this.linesWritten = linesWritten; + } + + /** + * Close the open resource and reset counters. + */ + public void close() { + + initialized = false; + restarted = false; + try { + if (outputBufferedWriter != null) { + outputBufferedWriter.close(); + } + } catch (IOException ioe) { + throw new ItemStreamException(ERROR_CLOSING, ioe); + } finally { + if (!transactional) { + closeStream(); + } + } + } + + private void closeStream() { + try { + if (fileChannel != null) { + fileChannel.close(); + } + } catch (IOException ioe) { + throw new ItemStreamException(ERROR_CLOSING, ioe); + } finally { + try { + if (os != null) { + os.close(); + } + } catch (IOException ioe) { + throw new ItemStreamException(ERROR_CLOSING, ioe); + } + } + } + + /** + * @param line String to be written to the file + * @throws IOException If unable to write the String to the file + */ + public void write(String line) throws IOException { + if (!initialized) { + initializeBufferedWriter(); + } + + outputBufferedWriter.write(line); + outputBufferedWriter.flush(); + } + + /** + * Creates the buffered writer for the output file channel based on configuration information. + * + * @throws IOException if unable to initialize buffer + */ + private void initializeBufferedWriter() throws IOException { + + os = new CountingOutputStream(resource.getOutputStream()); + fileChannel = Channels.newChannel(os); + + outputBufferedWriter = getBufferedWriter(fileChannel, encoding); + outputBufferedWriter.flush(); + + if (append && resource.contentLength() > 0) { + // Bug in IO library? This doesn't work... + // lastMarkedByteOffsetPosition = fileChannel.position(); + appending = true; + // Don't write the headers again + } + + Assert.state(outputBufferedWriter != null, "Unable to initialize buffered writer"); + // in case of restarting reset position to last committed point + if (restarted) { + checkFileSize(); + } + + initialized = true; + } + + public boolean isInitialized() { + return initialized; + } + + /** + * Returns the buffered writer opened to the beginning of the file specified by the absolute path name contained in + * absoluteFileName. + */ + private Writer getBufferedWriter(WritableByteChannel fileChannel, String encoding) { + try { + final WritableByteChannel channel = fileChannel; + if (transactional) { + TransactionAwareBufferedWriter writer = new TransactionAwareBufferedWriter(channel, this::closeStream); + + writer.setEncoding(encoding); + return writer; + } else { + return new BufferedWriter(Channels.newWriter(fileChannel, encoding)); + } + } catch (UnsupportedCharsetException ucse) { + throw new ItemStreamException("Bad encoding configuration for output file " + fileChannel, ucse); + } + } + + /** + * Checks (on setState) to make sure that the current output file's size is not smaller than the last saved commit + * point. If it is, then the file has been damaged in some way and whole task must be started over again from the + * beginning. + * + * @throws IOException if there is an IO problem + */ + private void checkFileSize() throws IOException { + long size = -1; + + outputBufferedWriter.flush(); + size = os.getCount(); + + if (size < lastMarkedByteOffsetPosition) { + throw new ItemStreamException("Current file size is smaller than size at last commit"); + } + } + + } } diff --git a/core/riot-core/src/main/java/com/redis/riot/core/file/resource/XmlItemReader.java b/core/riot-core/src/main/java/com/redis/riot/core/file/resource/XmlItemReader.java index 4deb93877..6898784d5 100644 --- a/core/riot-core/src/main/java/com/redis/riot/core/file/resource/XmlItemReader.java +++ b/core/riot-core/src/main/java/com/redis/riot/core/file/resource/XmlItemReader.java @@ -1,7 +1,7 @@ package com.redis.riot.core.file.resource; -import java.util.logging.Logger; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.batch.item.ItemStreamReader; import org.springframework.batch.item.file.ResourceAwareItemReaderItemStream; import org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader; @@ -10,8 +10,7 @@ import org.springframework.util.Assert; /** - * {@link ItemStreamReader} implementation that reads XML objects from a - * {@link Resource} having the following format: + * {@link ItemStreamReader} implementation that reads XML objects from a {@link Resource} having the following format: * *
  * {@code
@@ -29,83 +28,81 @@
  * @author Julien Ruaux
  */
 public class XmlItemReader extends AbstractItemCountingItemStreamItemReader
-		implements ResourceAwareItemReaderItemStream {
+        implements ResourceAwareItemReaderItemStream {
 
-	private static final Logger LOGGER = Logger.getLogger(XmlItemReader.class.getName());
+    private final Logger log = LoggerFactory.getLogger(XmlItemReader.class);
 
-	private Resource resource;
+    private Resource resource;
 
-	private XmlObjectReader xmlObjectReader;
+    private XmlObjectReader xmlObjectReader;
 
-	private boolean strict = true;
+    private boolean strict = true;
 
-	/**
-	 * Create a new {@link XmlItemReader} instance.
-	 * 
-	 * @param resource        the input XML resource
-	 * @param xmlObjectReader the XML object reader to use
-	 */
-	public XmlItemReader(Resource resource, XmlObjectReader xmlObjectReader) {
-		Assert.notNull(resource, "The resource must not be null.");
-		Assert.notNull(xmlObjectReader, "The XML object reader must not be null.");
-		this.resource = resource;
-		this.xmlObjectReader = xmlObjectReader;
-	}
+    /**
+     * Create a new {@link XmlItemReader} instance.
+     * 
+     * @param resource the input XML resource
+     * @param xmlObjectReader the XML object reader to use
+     */
+    public XmlItemReader(Resource resource, XmlObjectReader xmlObjectReader) {
+        Assert.notNull(resource, "The resource must not be null.");
+        Assert.notNull(xmlObjectReader, "The XML object reader must not be null.");
+        this.resource = resource;
+        this.xmlObjectReader = xmlObjectReader;
+    }
 
-	/**
-	 * Set the {@link XmlObjectReader} to use to read and map XML elements to domain
-	 * objects.
-	 * 
-	 * @param xmlObjectReader the XML object reader to use
-	 */
-	public void setXmlObjectReader(XmlObjectReader xmlObjectReader) {
-		this.xmlObjectReader = xmlObjectReader;
-	}
+    /**
+     * Set the {@link XmlObjectReader} to use to read and map XML elements to domain objects.
+     * 
+     * @param xmlObjectReader the XML object reader to use
+     */
+    public void setXmlObjectReader(XmlObjectReader xmlObjectReader) {
+        this.xmlObjectReader = xmlObjectReader;
+    }
 
-	/**
-	 * In strict mode the reader will throw an exception on
-	 * {@link #open(org.springframework.batch.item.ExecutionContext)} if the input
-	 * resource does not exist.
-	 * 
-	 * @param strict true by default
-	 */
-	public void setStrict(boolean strict) {
-		this.strict = strict;
-	}
+    /**
+     * In strict mode the reader will throw an exception on {@link #open(org.springframework.batch.item.ExecutionContext)} if
+     * the input resource does not exist.
+     * 
+     * @param strict true by default
+     */
+    public void setStrict(boolean strict) {
+        this.strict = strict;
+    }
 
-	@Override
-	public void setResource(Resource resource) {
-		this.resource = resource;
-	}
+    @Override
+    public void setResource(Resource resource) {
+        this.resource = resource;
+    }
 
-	@Nullable
-	@Override
-	protected T doRead() throws Exception {
-		return xmlObjectReader.read();
-	}
+    @Nullable
+    @Override
+    protected T doRead() throws Exception {
+        return xmlObjectReader.read();
+    }
 
-	@Override
-	protected void doOpen() throws Exception {
-		if (!this.resource.exists()) {
-			if (this.strict) {
-				throw new IllegalStateException("Input resource must exist (reader is in 'strict' mode)");
-			}
-			LOGGER.warning("Input resource does not exist " + this.resource.getDescription());
-			return;
-		}
-		if (!this.resource.isReadable()) {
-			if (this.strict) {
-				throw new IllegalStateException("Input resource must be readable (reader is in 'strict' mode)");
-			}
-			LOGGER.warning("Input resource is not readable " + this.resource.getDescription());
-			return;
-		}
-		this.xmlObjectReader.open(this.resource);
-	}
+    @Override
+    protected void doOpen() throws Exception {
+        if (!this.resource.exists()) {
+            if (this.strict) {
+                throw new IllegalStateException("Input resource must exist (reader is in 'strict' mode)");
+            }
+            log.warn("Input resource does not exist: {}", resource.getDescription());
+            return;
+        }
+        if (!this.resource.isReadable()) {
+            if (this.strict) {
+                throw new IllegalStateException("Input resource must be readable (reader is in 'strict' mode)");
+            }
+            log.warn("Input resource is not readable: {}", resource.getDescription());
+            return;
+        }
+        this.xmlObjectReader.open(this.resource);
+    }
 
-	@Override
-	protected void doClose() throws Exception {
-		this.xmlObjectReader.close();
-	}
+    @Override
+    protected void doClose() throws Exception {
+        this.xmlObjectReader.close();
+    }
 
 }
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractCollectionOperationBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractCollectionMapOperationBuilder.java
similarity index 79%
rename from core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractCollectionOperationBuilder.java
rename to core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractCollectionMapOperationBuilder.java
index 58dda3876..227ce201c 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractCollectionOperationBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractCollectionMapOperationBuilder.java
@@ -4,8 +4,8 @@
 import java.util.Map;
 import java.util.function.Function;
 
-public abstract class AbstractCollectionOperationBuilder>
-        extends AbstractOperationBuilder {
+public abstract class AbstractCollectionMapOperationBuilder>
+        extends AbstractMapOperationBuilder {
 
     private String memberSpace;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractFilterMapOperationBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractFilterMapOperationBuilder.java
index 5a0a59376..794b93c4e 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractFilterMapOperationBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractFilterMapOperationBuilder.java
@@ -11,7 +11,7 @@
 import com.redis.riot.core.function.ObjectToStringFunction;
 
 public abstract class AbstractFilterMapOperationBuilder>
-        extends AbstractOperationBuilder {
+        extends AbstractMapOperationBuilder {
 
     private List includes;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractOperationBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractMapOperationBuilder.java
similarity index 93%
rename from core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractOperationBuilder.java
rename to core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractMapOperationBuilder.java
index fe80cf55c..80d347b78 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractOperationBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/AbstractMapOperationBuilder.java
@@ -1,5 +1,6 @@
 package com.redis.riot.core.operation;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -11,7 +12,7 @@
 import com.redis.spring.batch.writer.Operation;
 import com.redis.spring.batch.writer.operation.AbstractOperation;
 
-public abstract class AbstractOperationBuilder> implements OperationBuilder {
+public abstract class AbstractMapOperationBuilder> {
 
     public static final String DEFAULT_SEPARATOR = IdFunctionBuilder.DEFAULT_SEPARATOR;
 
@@ -35,6 +36,10 @@ public B keyspace(String keyspace) {
         return (B) this;
     }
 
+    public B keys(String... keys) {
+        return keys(Arrays.asList(keys));
+    }
+
     @SuppressWarnings("unchecked")
     public B keys(List keys) {
         this.keys = keys;
@@ -88,7 +93,6 @@ protected Function, String> idFunction(String prefix, List> build() {
         AbstractOperation, ?> operation = operation();
         operation.key(idFunction(keyspace, keys));
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/DelOperationBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/DelBuilder.java
similarity index 78%
rename from core/riot-core/src/main/java/com/redis/riot/core/operation/DelOperationBuilder.java
rename to core/riot-core/src/main/java/com/redis/riot/core/operation/DelBuilder.java
index 0ba7af482..f50a350a5 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/DelOperationBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/DelBuilder.java
@@ -5,7 +5,7 @@
 import com.redis.spring.batch.writer.operation.AbstractOperation;
 import com.redis.spring.batch.writer.operation.Del;
 
-public class DelOperationBuilder extends AbstractOperationBuilder {
+public class DelBuilder extends AbstractMapOperationBuilder {
 
     @Override
     protected AbstractOperation, ?> operation() {
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireAtBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireAtBuilder.java
index ed8b96e88..380541e07 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireAtBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireAtBuilder.java
@@ -4,7 +4,7 @@
 
 import com.redis.spring.batch.writer.operation.ExpireAt;
 
-public class ExpireAtBuilder extends AbstractOperationBuilder {
+public class ExpireAtBuilder extends AbstractMapOperationBuilder {
 
     private String ttl;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireBuilder.java
index 544facfd6..c1522f88e 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/ExpireBuilder.java
@@ -7,7 +7,7 @@
 
 import com.redis.spring.batch.writer.operation.Expire;
 
-public class ExpireBuilder extends AbstractOperationBuilder {
+public class ExpireBuilder extends AbstractMapOperationBuilder {
 
     private String ttl;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/GeoaddBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/GeoaddBuilder.java
index 20f0f5b45..193c4ed08 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/GeoaddBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/GeoaddBuilder.java
@@ -6,7 +6,7 @@
 import com.redis.spring.batch.util.ToGeoValueFunction;
 import com.redis.spring.batch.writer.operation.Geoadd;
 
-public class GeoaddBuilder extends AbstractCollectionOperationBuilder {
+public class GeoaddBuilder extends AbstractCollectionMapOperationBuilder {
 
     private String longitude;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/JsonSetBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/JsonSetBuilder.java
index 870ce41be..74f02cea6 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/JsonSetBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/JsonSetBuilder.java
@@ -10,7 +10,7 @@
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.redis.spring.batch.writer.operation.JsonSet;
 
-public class JsonSetBuilder extends AbstractOperationBuilder {
+public class JsonSetBuilder extends AbstractMapOperationBuilder {
 
     private final ObjectWriter jsonWriter = new ObjectMapper().writerFor(Map.class);
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/LpushBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/LpushBuilder.java
index e18296458..7d2daea34 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/LpushBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/LpushBuilder.java
@@ -4,7 +4,7 @@
 
 import com.redis.spring.batch.writer.operation.Lpush;
 
-public class LpushBuilder extends AbstractCollectionOperationBuilder {
+public class LpushBuilder extends AbstractCollectionMapOperationBuilder {
 
     @Override
     protected Lpush> operation() {
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/OperationBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/MapOperation.java
similarity index 54%
rename from core/riot-core/src/main/java/com/redis/riot/core/operation/OperationBuilder.java
rename to core/riot-core/src/main/java/com/redis/riot/core/operation/MapOperation.java
index 1af4b8495..e99711ba7 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/OperationBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/MapOperation.java
@@ -4,8 +4,6 @@
 
 import com.redis.spring.batch.writer.Operation;
 
-public interface OperationBuilder {
-
-    Operation> build();
+public interface MapOperation extends Operation> {
 
 }
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/NoopBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/NoopBuilder.java
deleted file mode 100644
index b2c8ba39c..000000000
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/NoopBuilder.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.redis.riot.core.operation;
-
-import java.util.Map;
-
-import com.redis.spring.batch.writer.Operation;
-import com.redis.spring.batch.writer.operation.Noop;
-
-public class NoopBuilder implements OperationBuilder {
-
-    @Override
-    public Operation> build() {
-        return new Noop<>();
-    }
-
-}
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/RpushBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/RpushBuilder.java
index 76a703007..1591cce23 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/RpushBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/RpushBuilder.java
@@ -4,7 +4,7 @@
 
 import com.redis.spring.batch.writer.operation.Rpush;
 
-public class RpushBuilder extends AbstractCollectionOperationBuilder {
+public class RpushBuilder extends AbstractCollectionMapOperationBuilder {
 
     @Override
     protected Rpush> operation() {
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/SaddBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/SaddBuilder.java
index 244ebe604..6398dce14 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/SaddBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/SaddBuilder.java
@@ -4,7 +4,7 @@
 
 import com.redis.spring.batch.writer.operation.Sadd;
 
-public class SaddBuilder extends AbstractCollectionOperationBuilder {
+public class SaddBuilder extends AbstractCollectionMapOperationBuilder {
 
     @Override
     protected Sadd> operation() {
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/SetBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/SetBuilder.java
index 2e422e1fa..078a98a8e 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/SetBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/SetBuilder.java
@@ -10,7 +10,7 @@
 import com.redis.riot.core.function.ObjectMapperFunction;
 import com.redis.spring.batch.writer.operation.Set;
 
-public class SetBuilder extends AbstractOperationBuilder {
+public class SetBuilder extends AbstractMapOperationBuilder {
 
     public enum StringFormat {
         RAW, XML, JSON
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/SugaddBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/SugaddBuilder.java
index e6d6f0c61..8ab3d5fe4 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/SugaddBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/SugaddBuilder.java
@@ -8,7 +8,7 @@
 import com.redis.spring.batch.util.ToSuggestionFunction;
 import com.redis.spring.batch.writer.operation.Sugadd;
 
-public class SugaddBuilder extends AbstractOperationBuilder {
+public class SugaddBuilder extends AbstractMapOperationBuilder {
 
     public static final double DEFAULT_SCORE = 1;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/TsAddBuilder.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/TsAddBuilder.java
index 517b7cb7e..515015a82 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/TsAddBuilder.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/TsAddBuilder.java
@@ -18,7 +18,7 @@
 import com.redis.spring.batch.util.ToSampleFunction;
 import com.redis.spring.batch.writer.operation.TsAdd;
 
-public class TsAddBuilder extends AbstractOperationBuilder {
+public class TsAddBuilder extends AbstractMapOperationBuilder {
 
     public static final DuplicatePolicy DEFAULT_DUPLICATE_POLICY = DuplicatePolicy.LAST;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/operation/ZaddSupplier.java b/core/riot-core/src/main/java/com/redis/riot/core/operation/ZaddSupplier.java
index 803949e68..3c4d13378 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/operation/ZaddSupplier.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/operation/ZaddSupplier.java
@@ -6,7 +6,7 @@
 import com.redis.spring.batch.util.ToScoredValueFunction;
 import com.redis.spring.batch.writer.operation.Zadd;
 
-public class ZaddSupplier extends AbstractCollectionOperationBuilder {
+public class ZaddSupplier extends AbstractCollectionMapOperationBuilder {
 
     public static final double DEFAULT_SCORE = 1;
 
diff --git a/core/riot-core/src/main/java/com/redis/riot/core/replicate/Replication.java b/core/riot-core/src/main/java/com/redis/riot/core/replicate/Replication.java
index be5dbc7ac..79262efa7 100644
--- a/core/riot-core/src/main/java/com/redis/riot/core/replicate/Replication.java
+++ b/core/riot-core/src/main/java/com/redis/riot/core/replicate/Replication.java
@@ -43,7 +43,7 @@ public class Replication extends AbstractExport {
 
     public static final ValueType DEFAULT_VALUE_TYPE = ValueType.DUMP;
 
-    private static final Logger log = LoggerFactory.getLogger(Replication.class);
+    private final Logger log = LoggerFactory.getLogger(Replication.class);
 
     private final AbstractRedisClient targetClient;
 
diff --git a/core/riot-core/src/test/java/com/redis/riot/core/AbstractRiotTargetTestBase.java b/core/riot-core/src/test/java/com/redis/riot/core/AbstractRiotTargetTestBase.java
deleted file mode 100644
index 0490e17f9..000000000
--- a/core/riot-core/src/test/java/com/redis/riot/core/AbstractRiotTargetTestBase.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.redis.riot.core;
-
-import org.junit.jupiter.api.TestInfo;
-
-import com.redis.spring.batch.test.AbstractTargetTestBase;
-
-abstract class AbstractRiotTargetTestBase extends AbstractTargetTestBase {
-
-    protected void execute(AbstractJobExecutable executable, TestInfo info) {
-        executable.setName(name(info));
-        executable.execute();
-    }
-
-}
diff --git a/core/riot-core/src/test/java/com/redis/riot/core/FakerReaderTests.java b/core/riot-core/src/test/java/com/redis/riot/core/FakerReaderTests.java
index b7ebcc1f2..7493d45ca 100644
--- a/core/riot-core/src/test/java/com/redis/riot/core/FakerReaderTests.java
+++ b/core/riot-core/src/test/java/com/redis/riot/core/FakerReaderTests.java
@@ -19,10 +19,10 @@ void fakerReader() throws Exception {
         int count = 100;
         FakerItemReader reader = new FakerItemReader();
         Map fields = new LinkedHashMap();
-        fields.put("index", "#ctx.index");
+        fields.put("index", "index");
         fields.put("firstName", "name.firstName");
         fields.put("lastName", "name.lastName");
-        fields.put("thread", "#ctx.thread.id");
+        fields.put("thread", "thread.id");
         reader.setStringFields(fields);
         reader.setMaxItemCount(count);
         reader.open(new ExecutionContext());
diff --git a/core/riot-core/src/test/java/com/redis/riot/core/ReplicationTests.java b/core/riot-core/src/test/java/com/redis/riot/core/ReplicationTests.java
index 7ceee6bf5..9da724ffb 100644
--- a/core/riot-core/src/test/java/com/redis/riot/core/ReplicationTests.java
+++ b/core/riot-core/src/test/java/com/redis/riot/core/ReplicationTests.java
@@ -1,16 +1,28 @@
 package com.redis.riot.core;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 import java.time.Duration;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
+import org.springframework.batch.core.JobExecutionException;
+import org.springframework.batch.item.ItemProcessor;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.batch.item.support.ListItemWriter;
+import org.springframework.expression.Expression;
 
 import com.redis.riot.core.replicate.Replication;
+import com.redis.spring.batch.test.AbstractTargetTestBase;
 import com.redis.spring.batch.util.KeyComparisonItemReader;
 
-public abstract class ReplicationTests extends AbstractRiotTargetTestBase {
+public abstract class ReplicationTests extends AbstractTargetTestBase {
 
     public static final String BEERS_JSON_URL = "https://storage.googleapis.com/jrx/beers.json";
 
@@ -30,6 +42,55 @@ protected static double abv(Map beer) {
         return Double.parseDouble(beer.get("abv"));
     }
 
+    protected void execute(AbstractJobExecutable executable, TestInfo info) {
+        executable.setName(name(info));
+        executable.execute();
+    }
+
+    @Test
+    void testMapProcessor(TestInfo info) throws JobExecutionException {
+        MapProcessorOptions options = new MapProcessorOptions();
+        Map expressions = new LinkedHashMap<>();
+        expressions.put("field1", SpelUtils.parse("'value1'"));
+        expressions.put("field2", SpelUtils.parse("field1"));
+        expressions.put("field3", SpelUtils.parse("1"));
+        expressions.put("field4", SpelUtils.parse("2"));
+        expressions.put("field5", SpelUtils.parse("field3+field4"));
+        options.setExpressions(expressions);
+        List> list = new ArrayList<>();
+        for (int index = 0; index < 10; index++) {
+            list.add(new HashMap<>());
+        }
+        ListItemReader> reader = new ListItemReader<>(list);
+        ItemProcessor, Map> processor = options.processor();
+        ListItemWriter> writer = new ListItemWriter<>();
+        run(job(info).start(step(info, reader, writer).processor(processor).build()).build());
+        assertEquals(10, writer.getWrittenItems().size());
+        for (Map item : writer.getWrittenItems()) {
+            assertEquals(5, item.size());
+            assertEquals("value1", item.get("field1"));
+            assertEquals("value1", item.get("field2"));
+            assertEquals(3, item.get("field5"));
+        }
+    }
+
+    @Test
+    void testMapProcessorFilter(TestInfo info) throws JobExecutionException {
+        MapProcessorOptions options = new MapProcessorOptions();
+        options.setFilter(SpelUtils.parse("index<10"));
+        List> list = new ArrayList<>();
+        for (int index = 0; index < 100; index++) {
+            Map map = new HashMap<>();
+            map.put("index", index);
+            list.add(map);
+        }
+        ListItemReader> reader = new ListItemReader<>(list);
+        ItemProcessor, Map> processor = options.processor();
+        ListItemWriter> writer = new ListItemWriter<>();
+        run(job(info).start(step(info, reader, writer).processor(processor).build()).build());
+        assertEquals(10, writer.getWrittenItems().size());
+    }
+
     @Test
     void replicate(TestInfo info) throws Throwable {
         generate(info);
diff --git a/core/riot-core/src/test/java/com/redis/riot/core/file/FileTests.java b/core/riot-core/src/test/java/com/redis/riot/core/file/FileTests.java
new file mode 100644
index 000000000..be1277c0c
--- /dev/null
+++ b/core/riot-core/src/test/java/com/redis/riot/core/file/FileTests.java
@@ -0,0 +1,83 @@
+package com.redis.riot.core.file;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.batch.item.NonTransientResourceException;
+import org.springframework.batch.item.ParseException;
+import org.springframework.batch.item.UnexpectedInputException;
+
+import com.redis.riot.core.operation.HsetBuilder;
+import com.redis.spring.batch.test.AbstractTestBase;
+
+abstract class FileTests extends AbstractTestBase {
+
+    public static final String BEERS_JSON_URL = "https://storage.googleapis.com/jrx/beers.json";
+
+    private static final String ID = "id";
+
+    private static final String keyspace = "beer";
+
+    @Test
+    void fileImportJSON() throws UnexpectedInputException, ParseException, NonTransientResourceException, Exception {
+        FileImport executable = new FileImport(client, BEERS_JSON_URL);
+        executable.setOperations(new HsetBuilder().keyspace(keyspace).keys(ID).build());
+        executable.execute();
+        List keys = commands.keys("*");
+        assertEquals(216, keys.size());
+        for (String key : keys) {
+            Map map = commands.hgetall(key);
+            String id = map.get(ID);
+            assertEquals(key, keyspace + ":" + id);
+        }
+        Map beer1 = commands.hgetall(keyspace + ":1");
+        Assertions.assertEquals("Hocus Pocus", beer1.get("name"));
+    }
+
+    @Test
+    void fileApiImportCSV() throws UnexpectedInputException, ParseException, NonTransientResourceException, Exception {
+        FileImport executable = new FileImport(client, "https://storage.googleapis.com/jrx/beers.csv");
+        executable.setHeader(true);
+        executable.setOperations(new HsetBuilder().keyspace(keyspace).keys(ID).build());
+        executable.execute();
+        List keys = commands.keys("*");
+        assertEquals(2410, keys.size());
+        for (String key : keys) {
+            Map map = commands.hgetall(key);
+            String id = map.get(ID);
+            assertEquals(key, keyspace + ":" + id);
+        }
+
+    }
+
+    @Test
+    void fileApiFileExpansion() throws IOException {
+        Path temp = Files.createTempDirectory("fileExpansion");
+        File file1 = temp.resolve("beers1.csv").toFile();
+        org.apache.commons.io.FileUtils.copyInputStreamToFile(getClass().getClassLoader().getResourceAsStream("beers1.csv"),
+                file1);
+        File file2 = temp.resolve("beers2.csv").toFile();
+        org.apache.commons.io.FileUtils.copyInputStreamToFile(getClass().getClassLoader().getResourceAsStream("beers2.csv"),
+                file2);
+        FileImport executable = new FileImport(client, temp.resolve("*.csv").toFile().getPath());
+        executable.setHeader(true);
+        executable.setOperations(new HsetBuilder().keyspace(keyspace).keys(ID).build());
+        executable.execute();
+        List keys = commands.keys("*");
+        assertEquals(2410, keys.size());
+        for (String key : keys) {
+            Map map = commands.hgetall(key);
+            String id = map.get(ID);
+            assertEquals(key, keyspace + ":" + id);
+        }
+    }
+
+}
diff --git a/core/riot-core/src/test/java/com/redis/riot/core/file/StackFileTests.java b/core/riot-core/src/test/java/com/redis/riot/core/file/StackFileTests.java
new file mode 100644
index 000000000..b33a20285
--- /dev/null
+++ b/core/riot-core/src/test/java/com/redis/riot/core/file/StackFileTests.java
@@ -0,0 +1,16 @@
+package com.redis.riot.core.file;
+
+import com.redis.riot.core.RedisContainerFactory;
+import com.redis.testcontainers.RedisServer;
+import com.redis.testcontainers.RedisStackContainer;
+
+class StackFileTests extends FileTests {
+
+    private static final RedisStackContainer redis = RedisContainerFactory.stack();
+
+    @Override
+    protected RedisServer getRedisServer() {
+        return redis;
+    }
+
+}
diff --git a/core/riot-core/src/test/resources/beers1.csv b/core/riot-core/src/test/resources/beers1.csv
new file mode 100755
index 000000000..60f22734d
--- /dev/null
+++ b/core/riot-core/src/test/resources/beers1.csv
@@ -0,0 +1,2001 @@
+,abv,ibu,id,name,style,brewery_id,ounces
+0,0.05,,1436,Pub Beer,American Pale Lager,408,12.0
+1,0.066,,2265,Devil's Cup,American Pale Ale (APA),177,12.0
+2,0.071,,2264,Rise of the Phoenix,American IPA,177,12.0
+3,0.09,,2263,Sinister,American Double / Imperial IPA,177,12.0
+4,0.075,,2262,Sex and Candy,American IPA,177,12.0
+5,0.077,,2261,Black Exodus,Oatmeal Stout,177,12.0
+6,0.045,,2260,Lake Street Express,American Pale Ale (APA),177,12.0
+7,0.065,,2259,Foreman,American Porter,177,12.0
+8,0.055,,2258,Jade,American Pale Ale (APA),177,12.0
+9,0.086,,2131,Cone Crusher,American Double / Imperial IPA,177,12.0
+10,0.07200000000000001,,2099,Sophomoric Saison,Saison / Farmhouse Ale,177,12.0
+11,0.073,,2098,Regional Ring Of Fire,Saison / Farmhouse Ale,177,12.0
+12,0.069,,2097,Garce Selé,Saison / Farmhouse Ale,177,12.0
+13,0.085,,1980,Troll Destroyer,Belgian IPA,177,12.0
+14,0.061,60.0,1979,Bitter Bitch,American Pale Ale (APA),177,12.0
+15,0.06,,2318,Ginja Ninja,Cider,154,12.0
+16,0.06,,2170,Cherried Away,Cider,154,12.0
+17,0.06,,2169,Rhubarbarian,Cider,154,12.0
+18,0.06,,1502,BrightCider,Cider,154,12.0
+19,0.08199999999999999,,1593,He Said Baltic-Style Porter,Baltic Porter,368,12.0
+20,0.08199999999999999,,1592,He Said Belgian-Style Tripel,Tripel,368,12.0
+21,0.099,92.0,1036,Lower De Boom,American Barleywine,368,8.4
+22,0.079,45.0,1024,Fireside Chat,Winter Warmer,368,12.0
+23,0.079,,976,Marooned On Hog Island,American Stout,368,12.0
+24,0.044000000000000004,42.0,876,Bitter American,American Pale Ale (APA),368,12.0
+25,0.049,17.0,802,Hell or High Watermelon Wheat (2009),Fruit / Vegetable Beer,368,12.0
+26,0.049,17.0,801,Hell or High Watermelon Wheat (2009),Fruit / Vegetable Beer,368,12.0
+27,0.049,17.0,800,21st Amendment Watermelon Wheat Beer (2006),Fruit / Vegetable Beer,368,12.0
+28,0.07,70.0,799,21st Amendment IPA (2006),American IPA,368,12.0
+29,0.07,70.0,797,Brew Free! or Die IPA (2008),American IPA,368,12.0
+30,0.07,70.0,796,Brew Free! or Die IPA (2009),American IPA,368,12.0
+31,0.085,52.0,531,Special Edition: Allies Win The War!,English Strong Ale,368,12.0
+32,0.09699999999999999,94.0,432,Hop Crisis,American Double / Imperial IPA,368,12.0
+33,0.044000000000000004,42.0,353,Bitter American (2011),American Pale Ale (APA),368,12.0
+34,0.079,45.0,321,Fireside Chat (2010),Winter Warmer,368,12.0
+35,0.068,65.0,173,Back in Black,American Black Ale,368,12.0
+36,0.083,35.0,11,Monk's Blood,Belgian Dark Ale,368,12.0
+37,0.07,65.0,10,Brew Free! or Die IPA,American IPA,368,12.0
+38,0.049,17.0,9,Hell or High Watermelon Wheat,Fruit / Vegetable Beer,368,12.0
+39,0.07,82.0,2519,Bimini Twist,American IPA,67,12.0
+40,0.05,,2518,Beach Blonde,American Blonde Ale,67,12.0
+41,0.059000000000000004,,2517,Rod Bender Red,American Amber / Red Ale,67,12.0
+42,0.035,11.0,2545,Passion Fruit Prussia,Berliner Weissbier,60,12.0
+43,0.045,18.0,2544,Send Help,American Blonde Ale,60,12.0
+44,0.055,,2324,Cast Iron Oatmeal Brown,American Brown Ale,60,12.0
+45,0.06,,2288,Reprise Centennial Red,American Amber / Red Ale,60,12.0
+46,0.055,,2287,Alter Ego,American Black Ale,60,12.0
+47,0.065,,2286,Divided Sky,American IPA,60,12.0
+48,0.065,,2285,Resurrected,American IPA,60,12.0
+49,0.05,28.0,1870,Contact High,American Pale Wheat Ale,60,12.0
+50,0.065,,2603,Galaxyfest,American IPA,27,16.0
+51,0.05,45.0,2602,Citrafest,American IPA,27,16.0
+52,0.09,,2220,Barn Yeti,Belgian Strong Dark Ale,27,16.0
+53,0.069,65.0,2219,Scarecrow,American IPA,27,16.0
+54,0.09,50.0,2218,Ironman,English Strong Ale,27,16.0
+55,0.046,15.0,2217,Honey Kolsch,Kölsch,27,16.0
+56,0.052000000000000005,18.0,2216,Copperhead Amber,Belgian Dark Ale,27,16.0
+57,0.059000000000000004,75.0,972,Rude Parrot IPA,American IPA,481,16.0
+58,0.054000000000000006,30.0,866,British Pale Ale (2010),English Pale Ale,481,16.0
+59,0.054000000000000006,30.0,48,British Pale Ale,English Pale Ale,481,16.0
+60,0.084,82.0,47,Ballz Deep Double IPA,American Double / Imperial IPA,481,16.0
+61,0.038,,1583,Wolfman's Berliner,Berliner Weissbier,373,12.0
+62,0.055,26.0,1165,Colorado Native,American Amber / Red Lager,462,12.0
+63,0.055,26.0,431,Colorado Native (2011),American Amber / Red Lager,462,12.0
+64,0.065,52.0,516,Jockamo IPA,American IPA,533,12.0
+65,0.042,13.0,515,Purple Haze,Fruit / Vegetable Beer,533,12.0
+66,0.045,17.0,514,Abita Amber,American Amber / Red Lager,533,12.0
+67,0.08199999999999999,68.0,2540,Citra Ass Down,American IPA,62,16.0
+68,0.05,20.0,2539,The Brown Note,American Brown Ale,62,16.0
+69,0.08,68.0,2686,Citra Ass Down,American Double / Imperial IPA,1,16.0
+70,0.125,80.0,2685,London Balling,English Barleywine,1,16.0
+71,0.077,25.0,2684,35 K,Milk / Sweet Stout,1,16.0
+72,0.042,42.0,2683,A Beer,American Pale Ale (APA),1,16.0
+73,0.05,25.0,2682,Rules are Rules,German Pilsener,1,16.0
+74,0.066,21.0,2681,Flesh Gourd'n,Pumpkin Ale,1,16.0
+75,0.04,13.0,2680,Sho'nuff,Belgian Pale Ale,1,16.0
+76,0.055,17.0,2679,Bloody Show,American Pilsner,1,16.0
+77,0.076,68.0,2678,Rico Sauvin,American Double / Imperial IPA,1,16.0
+78,0.051,38.0,2677,Coq de la Marche,Saison / Farmhouse Ale,1,16.0
+79,0.065,,2676,Kamen Knuddeln,American Wild Ale,1,16.0
+80,0.06,65.0,2675,Pile of Face,American IPA,1,16.0
+81,0.05,20.0,2674,The Brown Note,English Brown Ale,1,16.0
+82,0.053,35.0,1594,Maylani's Coconut Stout,American Stout,367,16.0
+83,0.05,35.0,1162,Oatmeal PSA,American Pale Ale (APA),367,16.0
+84,0.052000000000000005,33.0,1137,Pre Flight Pilsner,American Pilsner,367,16.0
+85,0.04,20.0,2403,P-Town Pilsner,American Pilsner,117,12.0
+86,0.053,36.0,2402,Klickitat Pale Ale,American Pale Ale (APA),117,12.0
+87,0.08199999999999999,103.0,2401,Yellow Wolf Imperial IPA,American Double / Imperial IPA,117,12.0
+88,0.053,40.0,1921,Freeride APA,American Pale Ale (APA),270,12.0
+89,0.053,18.0,1920,Alaskan Amber,Altbier,270,12.0
+90,0.057,,2501,Hopalicious,American Pale Ale (APA),73,12.0
+91,0.043,,1535,Kentucky Kölsch,Kölsch,388,16.0
+92,0.065,,1149,Kentucky IPA,American IPA,388,16.0
+93,0.054000000000000006,,1474,Dusty Trail Pale Ale,American Pale Ale (APA),401,16.0
+94,0.062,,1473,Damnesia,American IPA,401,16.0
+95,0.062,43.0,837,Desolation IPA,American IPA,401,16.0
+96,0.059000000000000004,,2592,Liberty Ale,American IPA,35,12.0
+97,0.065,,2578,IPA,American IPA,35,12.0
+98,0.045,,2577,Summer Wheat,American Pale Wheat Ale,35,12.0
+99,0.049,,2103,California Lager,American Amber / Red Lager,35,12.0
+100,0.055999999999999994,,2102,Brotherhood Steam,California Common / Steam Beer,35,12.0
+101,0.042,,2291,Blood Orange Gose,Gose,171,12.0
+102,0.042,,1818,Keebarlin' Pale Ale,American Pale Ale (APA),171,12.0
+103,0.048,,1738,"the Kimmie, the Yink and the Holy Gose",Gose,171,12.0
+104,0.06,,1563,Fall Hornin',Pumpkin Ale,171,12.0
+105,0.057,13.0,1520,Barney Flats Oatmeal Stout,Oatmeal Stout,171,12.0
+106,0.055999999999999994,4.0,1350,Summer Solstice,Cream Ale,171,12.0
+107,0.07,80.0,1327,Hop Ottin' IPA,American IPA,171,12.0
+108,0.057999999999999996,15.0,1326,Boont Amber Ale,American Amber / Red Ale,171,12.0
+109,0.057,13.0,1221,Barney Flats Oatmeal Stout,Oatmeal Stout,171,12.0
+110,0.055,25.0,1217,El Steinber Dark Lager,Vienna Lager,171,16.0
+111,0.057999999999999996,15.0,811,Boont Amber Ale (2010),American Amber / Red Ale,171,12.0
+112,0.055999999999999994,4.0,753,Summer Solstice Cerveza Crema (2009),Cream Ale,171,12.0
+113,0.057,13.0,572,Barney Flats Oatmeal Stout (2012),Oatmeal Stout,171,12.0
+114,0.069,6.0,523,Winter Solstice,Winter Warmer,171,12.0
+115,0.07,80.0,367,Hop Ottin' IPA (2011),American IPA,171,12.0
+116,0.057999999999999996,15.0,78,Boont Amber Ale (2011),American Amber / Red Ale,171,12.0
+117,0.055999999999999994,4.0,77,Summer Solstice (2011),Cream Ale,171,12.0
+118,0.055,28.0,76,Poleeko Gold Pale Ale (2009),American Pale Ale (APA),171,12.0
+119,0.06,,2337,Charlie's Rye IPA,American IPA,146,16.0
+120,0.054000000000000006,,410,River Pig Pale Ale,American Pale Ale (APA),542,16.0
+121,0.047,,409,Oaky's Oatmeal Stout,Oatmeal Stout,542,16.0
+122,0.05,,1294,Angry Orchard Apple Ginger,Cider,434,16.0
+123,0.05,,1293,Angry Orchard Crisp Apple,Cider,434,16.0
+124,0.05,,1292,Angry Orchard Crisp Apple,Cider,434,12.0
+125,0.068,,2207,Golden One,Belgian Pale Ale,193,12.0
+126,0.06,,2040,Arjuna,Witbier,193,12.0
+127,0.085,,2039,Uroboros,American Stout,193,12.0
+128,0.071,75.0,2511,Long Leaf,American IPA,69,16.0
+129,0.047,19.0,2510,Honey Badger Blonde,American Blonde Ale,69,16.0
+130,0.06,23.0,2509,Porter (a/k/a Black Gold Porter),American Porter,69,16.0
+131,0.06,55.0,413,Sky High Rye,American Pale Ale (APA),541,12.0
+132,0.062,17.0,390,Whitsun,American Pale Wheat Ale,541,12.0
+133,0.052000000000000005,,735,On-On Ale (2008),American Pale Ale (APA),513,12.0
+134,0.092,50.0,1333,Quakertown Stout,American Double / Imperial Stout,426,12.0
+135,0.051,20.0,1332,Greenbelt Farmhouse Ale,Saison / Farmhouse Ale,426,12.0
+136,0.052000000000000005,10.0,1172,Mo's Gose,Gose,461,16.0
+137,0.07,45.0,1322,Green Bullet Organic India Pale Ale,American IPA,429,16.0
+138,0.032,27.0,550,Rocket Girl,Kölsch,528,12.0
+139,0.053,26.0,429,Ninja Porter,American Porter,528,12.0
+140,0.06,69.0,428,Shiva IPA,American IPA,528,12.0
+141,0.048,,1640,Aslan Kölsch,Kölsch,353,16.0
+142,0.077,,1639,Aslan IPA,American IPA,353,16.0
+143,0.077,,1638,Aslan Amber,American Amber / Red Ale,353,16.0
+144,0.055999999999999994,27.0,597,This Season's Blonde,American Blonde Ale,523,12.0
+145,0.07,67.0,596,Independence Pass Ale,American IPA,523,12.0
+146,0.057,40.0,1580,Trolley Stop Stout,American Stout,374,12.0
+147,0.08199999999999999,138.0,980,Bitter Bitch Imperial IPA,American Double / Imperial IPA,374,12.0
+148,0.062,35.0,979,Poop Deck Porter,American Porter,374,12.0
+149,0.06,35.0,978,Old Red Beard Amber Ale,American Amber / Red Ale,374,12.0
+150,0.075,115.0,2503,Hop A-Peel,American Double / Imperial IPA,72,16.0
+151,0.055,12.0,2502,Vanilla Java Porter,American Porter,72,16.0
+152,0.052000000000000005,,2495,Michelada,Fruit / Vegetable Beer,72,16.0
+153,0.045,8.0,534,Dirty Blonde Ale,American Blonde Ale,72,12.0
+154,0.05,62.0,528,Grand Circus IPA,American IPA,72,12.0
+155,0.05,12.0,527,Atwater's Lager,Munich Helles Lager,72,12.0
+156,0.07,,1409,Heavy Machinery IPA Series #1: Heavy Fist,American Black Ale,413,16.0
+157,0.062,,343,Fire Eagle IPA,American IPA,413,12.0
+158,0.051,,342,Peacemaker,American Pale Ale (APA),413,12.0
+159,0.053,,341,Pearl-Snap,German Pilsener,413,12.0
+160,0.052000000000000005,,340,Black Thunder,Schwarzbier,413,12.0
+161,0.08,,2589,Raja,American Double / Imperial IPA,37,12.0
+162,0.064,,2546,Perzik Saison,Saison / Farmhouse Ale,37,12.0
+163,0.047,42.0,146,Avery Joe’s Premium American Pilsner,German Pilsener,37,12.0
+164,0.055999999999999994,10.0,108,White Rascal,Witbier,37,12.0
+165,0.063,69.0,107,Avery India Pale Ale,American IPA,37,12.0
+166,0.055,17.0,106,Ellie’s Brown Ale,American Brown Ale,37,12.0
+167,0.062,17.0,1620,Pumpkin Beast,Pumpkin Ale,360,12.0
+168,0.07200000000000001,22.0,1579,OktoberBeast,Märzen / Oktoberfest,360,12.0
+169,0.048,23.0,1228,Mad Beach,American Pale Wheat Ale,360,12.0
+170,0.067,,705,Hog Wild India Pale Ale,American IPA,360,12.0
+171,0.092,5.0,704,Devils Tramping Ground Tripel,Tripel,360,12.0
+172,0.061,41.0,702,Hot Rod Red,American Amber / Red Ale,360,12.0
+173,0.086,,2058,Palate Mallet,American Double / Imperial IPA,235,12.0
+174,0.06,,1483,Back East Porter,American Porter,235,12.0
+175,0.049,,1426,Back East Golden Ale,American Blonde Ale,235,12.0
+176,0.07,,1132,Misty Mountain IPA,American IPA,235,12.0
+177,0.05,,1131,Back East Ale,American Amber / Red Ale,235,12.0
+178,0.06,,1876,Truck Stop Honey Brown Ale,English Brown Ale,286,12.0
+179,0.06,43.0,1875,Naked Pig Pale Ale,American Pale Ale (APA),286,12.0
+180,0.068,70.0,966,Topcutter India Pale Ale,American IPA,483,12.0
+181,0.044000000000000004,38.0,965,Field 41 Pale Ale,American Pale Ale (APA),483,12.0
+182,0.07,,2593,Grapefruit Sculpin,American IPA,34,12.0
+183,0.038,40.0,2105,Even Keel,American IPA,34,12.0
+184,0.052000000000000005,23.0,1401,Ballast Point Pale Ale,Kölsch,34,12.0
+185,0.07,75.0,1400,Big Eye India Pale Ale,American IPA,34,12.0
+186,0.046,,1019,Longfin Lager,Munich Helles Lager,34,12.0
+187,0.07,70.0,1018,Sculpin IPA,American IPA,34,12.0
+188,0.045,,1776,All Nighter Ale,Extra Special / Strong Bitter (ESB),318,12.0
+189,0.045,20.0,1644,Banner American Rye,Rye Beer,318,12.0
+190,0.035,45.0,1643,Banner American Ale,American Amber / Red Ale,318,12.0
+191,0.07,46.0,2618,Thai.p.a,American IPA,20,16.0
+192,0.06,60.0,2005,Barrio Blanco,American IPA,251,12.0
+193,0.045,,1343,Barrio Tucson Blonde,American Blonde Ale,251,12.0
+194,0.049,22.0,2404,Hop in the ‘Pool Helles,American Pilsner,116,12.0
+195,0.067,60.0,2323,Ultra Gnar Gnar IPA,American IPA,116,12.0
+196,0.068,62.0,2189,In-Tents India Pale Lager,American Pale Lager,116,12.0
+197,0.05,20.0,2188,Lost Meridian Wit,Witbier,116,12.0
+198,0.051,45.0,2187,Celestial Meridian Cascadian Dark Lager,Euro Dark Lager,116,12.0
+199,0.054000000000000006,55.0,1966,Wagon Party,California Common / Steam Beer,258,12.0
+200,0.067,70.0,1965,Sky-Five,American IPA,258,12.0
+201,0.05,28.0,1964,Stargrazer,Schwarzbier,258,12.0
+202,0.054000000000000006,48.0,1963,Wonderstuff,German Pilsener,258,12.0
+203,0.053,,1855,Tarnation California-Style Lager,California Common / Steam Beer,292,12.0
+204,0.07,42.0,1778,On the Count of 3 (2015),Hefeweizen,292,16.0
+205,0.047,,1209,Summer Swelter,American Pale Wheat Ale,292,12.0
+206,0.068,,954,Phantom Punch Winter Stout,Foreign / Export Stout,292,12.0
+207,0.066,,910,Hayride Autumn Ale,Rye Beer,292,12.0
+208,0.047,,707,Celsius Summer Ale (2012),American Pale Wheat Ale,292,12.0
+209,0.055,35.0,533,Amber Road,American Amber / Red Ale,292,12.0
+210,0.049,28.0,183,Pamola Xtra Pale Ale,American Pale Ale (APA),292,12.0
+211,0.069,69.0,182,Stowaway IPA,American IPA,292,12.0
+212,0.08800000000000001,108.0,1806,Hoptopus Double IPA,American Double / Imperial IPA,306,16.0
+213,0.05,10.0,2435,Watermelon Ale,Fruit / Vegetable Beer,103,12.0
+214,0.057999999999999996,45.0,2423,Fenway American Pale Ale,American Pale Ale (APA),103,12.0
+215,0.068,85.0,2420,Back Bay IPA,American IPA,103,12.0
+216,0.048,16.0,2419,Bunker Hill Blueberry Ale ,Other,103,12.0
+217,0.057999999999999996,,2494,Oberon,American Pale Wheat Ale,76,12.0
+218,0.06,,2325,Smitten,Rye Beer,76,16.0
+219,0.05,,2022,Winter White,Witbier,76,16.0
+220,0.057999999999999996,,1989,Oberon,American Pale Wheat Ale,76,16.0
+221,0.07,,1988,Two Hearted,American IPA,76,16.0
+222,0.057999999999999996,,1955,Best Brown,American Brown Ale,76,16.0
+223,0.044000000000000004,44.0,2558,Moar,English India Pale Ale (IPA),53,12.0
+224,0.083,,2557,Uber Lupin Schwarz IPA,American Double / Imperial IPA,53,16.0
+225,0.057,27.0,2556,Nordic Blonde,American Blonde Ale,53,12.0
+226,0.06,,2496,Cold Press,American Black Ale,75,12.0
+227,0.07200000000000001,87.0,2410,Harness the Winter,American IPA,75,12.0
+228,0.055999999999999994,32.0,1902,14° ESB ,Extra Special / Strong Bitter (ESB),75,12.0
+229,0.062,68.0,1901,Bent Hop Golden IPA,American IPA,75,12.0
+230,0.06,34.0,1261,Bent Paddle Black Ale,American Black Ale,75,12.0
+231,0.05,38.0,1253,Venture Pils,German Pilsener,75,12.0
+232,0.055,40.0,1900,Lost Sailor IPA,English India Pale Ale (IPA),278,12.0
+233,0.053,20.0,1317,Steel Rail Extra Pale Ale,American Pale Ale (APA),278,12.0
+234,0.078,,1158,La Frontera Premium IPA,American IPA,463,12.0
+235,0.047,,1157,Tejas Lager,Czech Pilsener,463,12.0
+236,0.064,,1156,Number 22 Porter,American Porter,463,12.0
+237,0.055999999999999994,,1155,Big Bend Hefeweizen,Hefeweizen,463,12.0
+238,0.06,,1154,Terlingua Gold,American Blonde Ale,463,12.0
+239,0.081,17.0,2104,Aprè Shred,American Strong Ale,220,16.0
+240,0.095,104.0,1762,Hemlock Double IPA,American Double / Imperial IPA,220,12.0
+241,0.040999999999999995,,1422,West Portal Colorado Common Summer Ale,California Common / Steam Beer,220,16.0
+242,0.067,85.0,1067,Disconnected Red,American Amber / Red Ale,220,16.0
+243,0.07,,1003,Big Elm IPA,American IPA,477,12.0
+244,0.065,,1002,Gerry Dog Stout,American Stout,477,12.0
+245,0.06,,1001,413 Farmhouse Ale,Saison / Farmhouse Ale,477,12.0
+246,0.08,54.0,2639,Dark Star,American Stout,8,16.0
+247,0.062,,2469,Ryecoe,American IPA,8,16.0
+248,0.06,,2586,Blueberry Blonde,Fruit / Vegetable Beer,40,12.0
+249,0.075,60.0,2585,Galaxy IPA,American IPA,40,16.0
+250,0.05,32.0,643,Big River Pilsner,Czech Pilsener,519,12.0
+251,0.06,55.0,632,House Brand IPA,American IPA,519,12.0
+252,0.062,65.0,1714,Big Sky IPA,American IPA,336,12.0
+253,0.05,40.0,1713,Scape Goat Pale Ale,English Pale Ale,336,12.0
+254,0.05,35.0,1712,Montana Trout Slayer Ale,American Pale Wheat Ale,336,12.0
+255,0.051,26.0,1711,Moose Drool Brown Ale,American Brown Ale,336,12.0
+256,0.07200000000000001,60.0,1456,Powder Hound Winter Ale,English Strong Ale,336,12.0
+257,0.051,26.0,767,Moose Drool Brown Ale (2011),American Brown Ale,336,12.0
+258,0.05,35.0,766,Montana Trout Slayer Ale (2012),American Pale Wheat Ale,336,12.0
+259,0.062,65.0,579,Big Sky IPA (2012),American IPA,336,12.0
+260,0.047,,168,Summer Honey,American Blonde Ale,336,12.0
+261,0.05,40.0,159,Scape Goat Pale Ale (2010),English Pale Ale,336,12.0
+262,0.05,35.0,35,Montana Trout Slayer Ale (2009),American Pale Wheat Ale,336,12.0
+263,0.051,26.0,34,Moose Drool Brown Ale (2009),American Brown Ale,336,12.0
+264,0.069,81.0,2096,Arcus IPA,American IPA,221,12.0
+265,0.057999999999999996,38.0,2095,Wavemaker,American Amber / Red Ale,221,12.0
+266,0.053,43.0,1257,Jack Pine Savage,American Pale Ale (APA),444,16.0
+267,0.099,85.0,1256,Forest Fire Imperial Smoked Rye,Rye Beer,444,16.0
+268,0.098,76.0,1255,Bad Axe Imperial IPA,American Double / Imperial IPA,444,16.0
+269,0.055,35.0,986,Morning Wood,Oatmeal Stout,444,16.0
+270,0.066,50.0,985,Bark Bite IPA,American IPA,444,16.0
+271,0.055,45.0,2508,Jalapeno Pale Ale,American Pale Ale (APA),70,16.0
+272,0.052000000000000005,,1441,Blown Out Brown,American Brown Ale,407,12.0
+273,0.063,,1413,Single Hop Ale,American Pale Ale (APA),407,12.0
+274,0.054000000000000006,,1411,Sawtooth Ale,American Blonde Ale,407,12.0
+275,0.07200000000000001,75.0,2620,Saucy Intruder,Rye Beer,18,16.0
+276,0.045,16.0,2412,Deception,American Blonde Ale,112,12.0
+277,0.075,35.0,1898,Blackmarket Rye IPA,American IPA,112,12.0
+278,0.05,8.0,1897,Black Market Hefeweizen,Hefeweizen,112,12.0
+279,0.057999999999999996,44.0,1896,Aftermath Pale Ale,American Pale Ale (APA),112,12.0
+280,0.071,83.0,1850,American India Red Ale,American Strong Ale,294,12.0
+281,0.071,45.0,1849,American Red Porter,American Porter,294,12.0
+282,0.078,34.0,1848,American Red Saison,Saison / Farmhouse Ale,294,12.0
+283,0.066,44.0,1847,Colorado Red Ale,American Amber / Red Ale,294,12.0
+284,0.048,16.0,2485,Saddle Bronc Brown Ale,American Brown Ale,79,12.0
+285,0.046,20.0,2484,Bomber Mountain Amber Ale,American Amber / Red Ale,79,12.0
+286,0.073,,2449,Flying Sailor,Rye Beer,95,12.0
+287,0.048,47.0,2634,Nordskye ,American IPA,12,12.0
+288,0.06,30.0,2153,North Third Stout,Foreign / Export Stout,12,12.0
+289,0.052000000000000005,,1953,Honey Lav,American Pale Wheat Ale,12,12.0
+290,0.068,,1496,Coconut Brown Ale,American Brown Ale,12,12.0
+291,0.07,51.0,1481,51K IPA,American IPA,12,12.0
+292,0.055,,1480,Grand Rabbits,Cream Ale,12,12.0
+293,0.05,,1564,1800 Big Log Wheat (2012),American Pale Wheat Ale,380,12.0
+294,,,1541,Double Play Pilsner,American Pilsner,380,12.0
+295,0.055,,1321,Brewerhood Brown Ale,American Brown Ale,380,12.0
+296,0.08,,1320,Last Call Imperial Amber Ale,American Amber / Red Ale,380,12.0
+297,0.096,,1319,Pernicious Double IPA,American Double / Imperial IPA,380,12.0
+298,0.052000000000000005,,1303,6-4-3 Double Play Pilsner,German Pilsener,380,12.0
+299,,,1025,N Street Drive-In 50th Anniversary IPA,American Double / Imperial IPA,380,12.0
+300,0.05,,1012,467 Ethan's Stout,American Stout,380,12.0
+301,0.064,,942,1335 Wicked Snout,Saison / Farmhouse Ale,380,12.0
+302,0.045,,937,543 Skull Creek Fresh Hopped Pale Ale,American Pale Ale (APA),380,12.0
+303,0.055999999999999994,37.0,888,1327 Pod's ESB,Extra Special / Strong Bitter (ESB),380,12.0
+304,0.055999999999999994,37.0,886,1327 Pod's ESB,Extra Special / Strong Bitter (ESB),380,12.0
+305,0.055999999999999994,37.0,612,1327 Pod's ESB,Extra Special / Strong Bitter (ESB),380,12.0
+306,0.046,35.0,611,834 Happy As Ale,American Pale Ale (APA),380,12.0
+307,0.059000000000000004,,1372,Yellow Collar,Mead,422,12.0
+308,0.059000000000000004,,1371,Green Collar,Mead,422,12.0
+309,0.08,80.0,1812,Quarter Mile Double IPA,American Double / Imperial IPA,304,12.0
+310,0.059000000000000004,60.0,1547,Full Nelson Pale Ale,American Pale Ale (APA),382,12.0
+311,0.065,30.0,1546,Steel Wheels ESB,Extra Special / Strong Bitter (ESB),382,12.0
+312,0.053,22.0,1545,Blue Mountain Classic Lager,Euro Pale Lager,382,12.0
+313,0.059000000000000004,60.0,119,Full Nelson Pale Ale (2010),American Pale Ale (APA),382,12.0
+314,0.049,16.0,1408,Kölsch 151,Kölsch,414,12.0
+315,,,2490,Professor Black,American Stout,77,12.0
+316,,,2489,Little Boss,American Pale Wheat Ale,77,12.0
+317,,,2488,Van Dayum!,American Amber / Red Ale,77,12.0
+318,,,2487,Spirit Animal,American Pale Ale (APA),77,12.0
+319,0.07,,939,Toxic Sludge,American Black Ale,489,16.0
+320,0.06,40.0,692,Blue Point White IPA,American White IPA,489,12.0
+321,0.044000000000000004,16.0,667,Blue Point Summer Ale,American Blonde Ale,489,12.0
+322,0.055,28.0,665,Toasted Lager,Vienna Lager,489,12.0
+323,0.06,,1607,Bohemian Export Lager,Dortmunder / Export Lager,364,12.0
+324,0.053,,1597,Altus Bohemes Altbier,Altbier,364,12.0
+325,0.04,,344,Cherny Bock,Schwarzbier,364,12.0
+326,0.05,,89,Czech Pilsner,Czech Pilsener,364,12.0
+327,0.05,,88,Viennese Lager,Vienna Lager,364,12.0
+328,0.065,,1569,Mad Manatee IPA,American IPA,378,12.0
+329,0.055,,1568,Killer Whale Cream Ale,Cream Ale,378,12.0
+330,0.06,,1188,Duke's Cold Nose Brown Ale,American Brown Ale,378,12.0
+331,0.042,30.0,1891,Longhop IPA,American IPA,281,16.0
+332,0.04,34.0,1890,Lucky Buck,Irish Dry Stout,281,16.0
+333,0.051,,577,Bomb Lager (New Recipe),Munich Helles Lager,525,12.0
+334,0.045,27.0,513,Bomb Lager (Old Recipe),Munich Helles Lager,525,12.0
+335,0.066,72.0,2422,Firestarter India Pale Ale,American IPA,107,12.0
+336,0.075,22.0,1727,Kilt Dropper Scotch Ale,Scotch Ale / Wee Heavy,107,16.0
+337,0.048,30.0,1614,Wood Splitter Pilsner,Czech Pilsener,107,16.0
+338,0.055999999999999994,26.0,1613,Gyptoberfest,Märzen / Oktoberfest,107,12.0
+339,0.07,94.0,1549,Farmer Wirtz India Pale Ale,English India Pale Ale (IPA),107,16.0
+340,0.047,,1548,Slow & Steady Golden Ale,American Blonde Ale,107,12.0
+341,0.068,,1517,Pink-I Raspberry IPA,American IPA,107,16.0
+342,0.047,,1500,Moe's Original Bar B Que 'Bama Brew Golden Ale,American Blonde Ale,107,12.0
+343,0.047,,1421,Live Local Golden Ale,American Blonde Ale,107,12.0
+344,0.048,38.0,1360,Screaming Eagle Special Ale ESB,Extra Special / Strong Bitter (ESB),107,12.0
+345,0.049,,1184,Dirtbag Dunkel,Munich Dunkel Lager,107,16.0
+346,0.053,45.0,1183,Kindler Pale Ale,American Pale Ale (APA),107,12.0
+347,0.064,,1023,Mistress Winter Wheat,Winter Warmer,107,12.0
+348,0.061,,998,Tent Pole Vanilla Porter,American Porter,107,16.0
+349,0.057999999999999996,,997,Awry Rye Pale Ale,American Pale Ale (APA),107,12.0
+350,0.057999999999999996,,996,Demshitz Brown Ale,American Brown Ale,107,12.0
+351,0.048,,931,Wood Splitter Pilsner (2012),Czech Pilsener,107,12.0
+352,0.048,,798,Brush Creek Blonde,American Blonde Ale,107,16.0
+353,0.066,72.0,633,Firestarter India Pale Ale,American IPA,107,16.0
+354,0.071,16.0,2062,Noche Dulce,American Porter,231,16.0
+355,0.045,8.0,1830,Porch Rocker,Radler,300,12.0
+356,0.065,45.0,1629,Rebel IPA,American IPA,300,16.0
+357,0.055,,1601,Cold Snap,Witbier,300,12.0
+358,0.055999999999999994,,1427,Samuel Adams Winter Lager,Bock,300,12.0
+359,0.049,30.0,1349,Boston Lager,Vienna Lager,300,16.0
+360,0.049,30.0,1310,Boston Lager,Vienna Lager,300,12.0
+361,0.053,15.0,1281,Samuel Adams Octoberfest,Märzen / Oktoberfest,300,12.0
+362,0.053,7.0,1144,Samuel Adams Summer Ale,American Pale Wheat Ale,300,12.0
+363,0.049,30.0,1143,Boston Lager,Vienna Lager,300,12.0
+364,0.049,35.0,1395,Hazed & Infused,American Pale Ale (APA),417,12.0
+365,0.057,35.0,808,Hoopla Pale Ale,American Pale Ale (APA),417,12.0
+366,0.049,35.0,81,Hazed & Infused (2010),American Pale Ale (APA),417,12.0
+367,0.062,80.0,2596,Heavy Lifting,American IPA,31,12.0
+368,0.065,,2300,1492,American Pale Ale (APA),167,12.0
+369,0.057999999999999996,,2299,Mango Ginger,American IPA,167,12.0
+370,0.047,,2298,Passenger,English Dark Mild Ale,167,12.0
+371,0.06,52.0,2107,Plum St. Porter,American Porter,219,12.0
+372,0.057,52.0,1573,Plum St. Porter,American Porter,219,12.0
+373,0.07,80.0,1289,Bozone HopZone IPA,American IPA,219,12.0
+374,0.06,25.0,1288,Bozone Hefe Weizen,Hefeweizen,219,12.0
+375,0.055,,470,Bozone Select Amber Ale,American Amber / Red Ale,219,12.0
+376,0.052000000000000005,40.0,2167,Evil Owl,American Amber / Red Ale,207,12.0
+377,0.05,,2204,Post Time Kölsch,Kölsch,195,16.0
+378,0.042,9.0,1522,Agave Wheat,American Pale Wheat Ale,391,12.0
+379,0.045,15.0,397,SummerBright Ale,American Pale Wheat Ale,391,12.0
+380,0.062,68.0,193,Lucky U IPA,American IPA,391,12.0
+381,0.054000000000000006,19.0,83,Avalanche Ale,American Amber / Red Ale,391,12.0
+382,0.05,,1802,"You're My Boy, Blue",Fruit / Vegetable Beer,308,12.0
+383,0.07200000000000001,60.0,1801,Last Stop IPA,American IPA,308,12.0
+384,0.05,21.0,1800,Rollin Dirty Red Ale,Irish Red Ale,308,12.0
+385,0.055,28.0,1799,Are Wheat There Yet?,American Pale Wheat Ale,308,12.0
+386,0.057999999999999996,,2619,Insert Hop Reference,American Pale Ale (APA),19,16.0
+387,0.053,,2468,Manitou Amber,American Amber / Red Ale,85,16.0
+388,0.067,,2637,Belfort,Saison / Farmhouse Ale,10,16.0
+389,0.06,,2636,Star Runner,Belgian Pale Ale,10,16.0
+390,0.098,,2598,Tart Side of the Barrel,American Double / Imperial Stout,10,16.0
+391,0.06,,2597,Linnaeus Mango IPA,American IPA,10,16.0
+392,0.07,,2548,Beasts A'Burnin',Rauchbier,10,16.0
+393,0.077,,2542,Verdun,Bière de Garde,10,16.0
+394,0.065,,2541,Barrel Aged Triomphe,Belgian IPA,10,16.0
+395,0.065,,2504,Cherry Doppelbock,Doppelbock,10,16.0
+396,0.065,,2500,Tropical Saison,Saison / Farmhouse Ale,10,16.0
+397,0.065,,2499,Beach Patrol,Witbier,10,16.0
+398,0.05,,2498,Nuit Serpent,Belgian IPA,10,16.0
+399,0.09,,2481,Paris,Saison / Farmhouse Ale,10,16.0
+400,0.055,,2476,The Grand Army,Belgian IPA,10,16.0
+401,0.059000000000000004,,2467,Acidulated Trip,Saison / Farmhouse Ale,10,16.0
+402,0.066,,2466,Root Stock,Rye Beer,10,16.0
+403,0.040999999999999995,,2465,Mind Games,Dunkelweizen,10,16.0
+404,0.08199999999999999,,2433,Sous Chef,Belgian Strong Pale Ale,10,16.0
+405,0.065,,2418,Dubbelicious,Dubbel,10,16.0
+406,0.062,,2416,Psychopomp,Belgian Dark Ale,10,16.0
+407,,,2382,Fat Paczki,Belgian Dark Ale,10,16.0
+408,,,2381,Earth-Like Planets,Belgian Pale Ale,10,16.0
+409,0.061,,2290,Ski Patrol,Witbier,10,16.0
+410,0.063,,2241,Viking Ice Hole,Oatmeal Stout,10,16.0
+411,0.055999999999999994,,2240,Rye Porter,American Porter,10,16.0
+412,0.099,,2137,Wizard Burial Ground,Quadrupel (Quad),10,16.0
+413,0.051,,2101,Smoky Wheat,Rauchbier,10,16.0
+414,0.062,,2092,BRIPA,Belgian IPA,10,16.0
+415,0.062,,2091,Mela,Belgian Dark Ale,10,16.0
+416,0.053,,2086,W.I.P.A Snappa,Belgian IPA,10,16.0
+417,0.063,,2023,Pepper in the Rye,Rye Beer,10,16.0
+418,0.064,,2006,Moe Lasses',American Stout,10,16.0
+419,0.07,,1997,Pumpkin Tart,Fruit / Vegetable Beer,10,16.0
+420,0.067,,1977,Undertaker,Belgian Dark Ale,10,16.0
+421,0.067,,1976,Undertaker (2014),Belgian Dark Ale,10,16.0
+422,0.05,,1974,Coq D'Or,Belgian Pale Ale,10,16.0
+423,0.06,,1973,North French,Bière de Garde,10,16.0
+424,0.065,,1959,Agent a Deux,Belgian Dark Ale,10,16.0
+425,0.045,,1958,Belgian Wit,Witbier,10,16.0
+426,0.063,,1949,Pothole Stout,American Stout,10,16.0
+427,0.09300000000000001,,1947,Tree Bucket,Belgian IPA,10,16.0
+428,0.073,,1785,Le Flaneur Ale,American Wild Ale,10,16.0
+429,0.055999999999999994,,1651,Maize & Blueberry,Fruit / Vegetable Beer,10,16.0
+430,0.09300000000000001,,1443,Trebuchet Double IPA,American Double / Imperial IPA,10,16.0
+431,0.065,,1352,Contemplation,Bière de Garde,10,16.0
+432,0.05,,1267,Black Rabbit,American Black Ale,10,16.0
+433,0.09,,1266,Zaison,Saison / Farmhouse Ale,10,16.0
+434,0.08199999999999999,,1178,Vivant Tripel,Tripel,10,16.0
+435,0.098,,1136,Tart Side of the Moon,Belgian Dark Ale,10,16.0
+436,0.06,,1044,Big Red Coq,American Amber / Red Ale,10,16.0
+437,0.099,,1033,Hubris Quadrupel Anniversary Ale,Quadrupel (Quad),10,16.0
+438,0.095,,1031,Plow Horse Belgian Style Imperial Stout,American Double / Imperial Stout,10,16.0
+439,0.092,,909,Escoffier Bretta Ale,American Wild Ale,10,16.0
+440,0.065,,873,Contemplation (2012),Bière de Garde,10,16.0
+441,0.099,,860,Vivant Belgian Style Imperial Stout (2012),Russian Imperial Stout,10,16.0
+442,0.062,,677,Big Red Coq (2012),American Amber / Red Ale,10,16.0
+443,0.09,,671,Zaison (2012),Saison / Farmhouse Ale,10,16.0
+444,0.092,,670,Vivant Tripel (2012),Tripel,10,16.0
+445,0.09699999999999999,,669,Trebuchet Double IPA (2012),Belgian IPA,10,16.0
+446,0.085,,627,Kludde,Belgian Strong Dark Ale,10,16.0
+447,0.055,,387,Farm Hand,Saison / Farmhouse Ale,10,16.0
+448,0.06,,385,Solitude,Belgian Pale Ale,10,16.0
+449,0.065,,384,Triomphe,Belgian IPA,10,16.0
+450,,,1096,Tampa Pale Ale,American Pale Ale (APA),467,12.0
+451,,,1095,Orange Grove Wheat Ale,American Pale Wheat Ale,467,12.0
+452,0.061,,2456,Broad Brook Ale,American Amber / Red Ale,89,16.0
+453,0.05,15.0,921,Northern Lights Amber Ale,American Amber / Red Ale,493,12.0
+454,0.052000000000000005,17.0,920,Polar Pale Ale,American Pale Ale (APA),493,12.0
+455,0.048,,919,Chugach Session Ale,Cream Ale,493,12.0
+456,0.061,64.0,648,Fairweather IPA,American IPA,493,12.0
+457,0.068,47.0,1279,East India Pale Ale,English India Pale Ale (IPA),437,16.0
+458,0.045,,756,Brooklyn Summer Ale,English Pale Mild Ale,437,12.0
+459,0.068,47.0,566,East India Pale Ale,English India Pale Ale (IPA),437,12.0
+460,0.045,,328,Brooklyn Summer Ale (2011),English Pale Mild Ale,437,12.0
+461,0.052000000000000005,,66,Brooklyn Lager (16 oz.),American Amber / Red Lager,437,16.0
+462,0.052000000000000005,,65,Brooklyn Lager (12 oz.),American Amber / Red Lager,437,12.0
+463,0.08,,538,Tour de Nez Belgian IPA (Current),Belgian IPA,530,16.0
+464,,,504,Roler Bock (Current),Maibock / Helles Bock,530,16.0
+465,0.073,85.0,383,Black Adder IBA (Current),American Black Ale,530,16.0
+466,0.099,,29,Very Noddy Lager (Current),Schwarzbier,530,16.0
+467,0.062,42.0,28,Tule Duck Red Ale (Current),American Amber / Red Ale,530,16.0
+468,0.057999999999999996,35.0,27,Original Orange Blossom Ale (Current),Herbed / Spiced Beer,530,16.0
+469,0.052000000000000005,40.0,26,Black Noddy Lager (Current),Schwarzbier,530,16.0
+470,0.053,,1627,Cleveland Beer Week 2013,Munich Helles Lager,357,16.0
+471,0.045,,2552,Painted Turtle,American Pale Ale (APA),56,12.0
+472,0.06,40.0,2125,1836,American Blonde Ale,214,12.0
+473,0.06,20.0,2124,Summer's Wit,Witbier,214,12.0
+474,0.09,118.0,2123,More Cowbell,American Double / Imperial IPA,214,16.0
+475,0.065,,2608,Wrath of Pele,American Brown Ale,24,16.0
+476,0.068,,2607,Black Beer'd,American Black Ale,24,16.0
+477,0.078,,2606,Mr. Tea,Fruit / Vegetable Beer,24,24.0
+478,0.055,40.0,2478,Pale Alement,American Pale Ale (APA),24,12.0
+479,0.099,115.0,2471,Hopkick Dropkick,American Double / Imperial IPA,24,12.0
+480,0.06,,2470,Kreamed Corn,Cream Ale,24,12.0
+481,0.065,,2464,Coconoats,American Pale Wheat Ale,24,16.0
+482,0.068,16.0,2160,Joey Wheat,American Pale Wheat Ale,24,16.0
+483,0.07200000000000001,86.0,2158,3:33 Black IPA,American IPA,24,16.0
+484,0.068,,2072,MCA,American IPA,24,16.0
+485,0.055,40.0,2054,Pale Alement,American Pale Ale (APA),24,16.0
+486,0.05,14.0,2196,Couch Select Lager,American Pale Lager,197,12.0
+487,0.055999999999999994,36.0,668,Mucho Aloha Hawaiian Pale Ale,American Pale Ale (APA),517,12.0
+488,0.049,,52,Heinnieweisse Weissebier,Hefeweizen,556,12.0
+489,0.068,,51,Snapperhead IPA,American IPA,556,12.0
+490,0.049,,50,Moo Thunder Stout,Milk / Sweet Stout,556,12.0
+491,0.043,,49,Porkslap Pale Ale,American Pale Ale (APA),556,12.0
+492,0.09300000000000001,,2657,Blackbeard,American Double / Imperial Stout,5,12.0
+493,0.062,,2656,Rye Knot,American Brown Ale,5,12.0
+494,0.06,,2655,Dead Arm,American Pale Ale (APA),5,12.0
+495,0.048,,2654,32°/50° Kölsch ,Kölsch,5,16.0
+496,0.077,,2653,HopArt,American IPA,5,16.0
+497,0.09699999999999999,,2652,Boy King,American Double / Imperial IPA,5,16.0
+498,0.052000000000000005,,2252,Gran Sport,American Porter,182,16.0
+499,0.053,25.0,2214,Horny Toad Cerveza,American Blonde Ale,182,16.0
+500,0.063,35.0,2213,Native Amber,American Amber / Red Ale,182,16.0
+501,0.068,100.0,1442,F5 IPA,American IPA,182,16.0
+502,0.063,35.0,170,Native Amber (2013),American Amber / Red Ale,182,16.0
+503,0.053,25.0,169,Horny Toad Cerveza (2013),American Blonde Ale,182,16.0
+504,0.068,100.0,2315,Hopportunity Knocks IPA,American IPA,155,12.0
+505,0.06,,1808,Pilot Rock Porter,American Porter,155,12.0
+506,0.055999999999999994,55.0,1419,Caldera Pale Ale,American Pale Ale (APA),155,12.0
+507,0.039,16.0,878,Lawnmower Lager,American Adjunct Lager,155,12.0
+508,0.054000000000000006,24.0,794,Ashland Amber Ale (2009),American Amber / Red Ale,155,12.0
+509,0.061,94.0,793,Caldera IPA (2009),American IPA,155,12.0
+510,0.061,94.0,792,Caldera IPA (2007),American IPA,155,12.0
+511,0.055999999999999994,55.0,791,Caldera Pale Ale (2010),American Pale Ale (APA),155,12.0
+512,0.055999999999999994,55.0,790,Caldera Pale Ale (2009),American Pale Ale (APA),155,12.0
+513,0.055999999999999994,55.0,789,Caldera Pale Ale (2005),American Pale Ale (APA),155,12.0
+514,0.055999999999999994,55.0,788,Caldera Pale Ale (2007),American Pale Ale (APA),155,12.0
+515,0.055999999999999994,55.0,38,Caldera Pale Ale (2011),American Pale Ale (APA),155,12.0
+516,0.054000000000000006,24.0,37,Ashland Amber Ale,American Amber / Red Ale,155,12.0
+517,0.061,94.0,36,Caldera IPA,American IPA,155,12.0
+518,0.05,,2257,Remain in Light,American Pilsner,178,12.0
+519,0.065,,2256,Flower Child (2014),American IPA,178,12.0
+520,,,870,THP White (2006),Witbier,497,12.0
+521,,,869,THP Amber (2006),American Amber / Red Ale,497,12.0
+522,,,868,THP Light (2006),American Blonde Ale,497,12.0
+523,,,867,THP Dark (2006),English Dark Mild Ale,497,12.0
+524,0.099,43.0,2068,Imperial Pumpkin Stout,Pumpkin Ale,230,16.0
+525,0.09,130.0,2067,Dead-Eye DIPA,American Double / Imperial IPA,230,16.0
+526,0.055,64.0,2066,Fisherman's IPA,American IPA,230,12.0
+527,0.054000000000000006,35.0,2065,Fisherman's Pils,German Pilsener,230,12.0
+528,0.055,30.0,2064,Fisherman's Brew,American Amber / Red Ale,230,12.0
+529,0.055,35.0,1928,Cape Cod Red,American Amber / Red Ale,267,16.0
+530,0.049,10.0,1927,Beach Blonde,American Blonde Ale,267,16.0
+531,0.065,80.0,2227,Dark Voyage Black IPA (2013),American Black Ale,192,12.0
+532,0.052000000000000005,28.0,2226,Wisconsin Amber,Vienna Lager,192,12.0
+533,0.046,18.0,2225,Lake House,Munich Helles Lager,192,12.0
+534,0.055999999999999994,55.0,1954,Ghost Ship White IPA,American IPA,192,12.0
+535,0.046,18.0,1910,Lake House,Munich Helles Lager,192,16.0
+536,0.062,70.0,1177,Mutiny IPA,American IPA,192,12.0
+537,0.052000000000000005,,840,Wisconsin Amber (1998),Vienna Lager,192,12.0
+538,0.042,,180,Island Wheat,American Pale Wheat Ale,192,12.0
+539,0.052000000000000005,,63,Wisconsin Amber (2013),Vienna Lager,192,12.0
+540,0.05,,62,U.S. Pale Ale,American Pale Ale (APA),192,12.0
+541,,,61,Supper Club Lager,American Pale Lager,192,12.0
+542,0.04,,784,Carolina Lighthouse (2007),American Blonde Ale,504,12.0
+543,0.05,,783,Carolina Blonde (2006),American Blonde Ale,504,12.0
+544,0.035,,782,Carolina Blonde Light (2005),American Blonde Ale,504,12.0
+545,0.059000000000000004,22.0,2255,Santa's Secret,Winter Warmer,179,16.0
+546,0.057,,530,Flagship IPA,English India Pale Ale (IPA),179,12.0
+547,0.051,,427,Sky Blue Golden Ale,Kölsch,179,12.0
+548,0.099,100.0,2094,Epitome,American Black Ale,222,16.0
+549,0.039,9.0,1941,Monkey Chased the Weasel,Berliner Weissbier,222,16.0
+550,0.078,80.0,1940,077XX,American Double / Imperial IPA,222,16.0
+551,0.042,35.0,1439,Boat Beer,American IPA,222,12.0
+552,0.069,,1465,Granny Smith Hard Apple Cider,Cider,404,16.0
+553,0.069,,1464,Dry Hard Apple Cider,Cider,404,16.0
+554,0.055999999999999994,,1744,Farmer Ted's Cream Ale,Cream Ale,331,12.0
+555,0.052000000000000005,,1743,Firewater India Pale Ale,American IPA,331,12.0
+556,0.047,,1742,White Zombie Ale,Witbier,331,12.0
+557,0.07,,1719,King Winterbolt Winter Ale,Winter Warmer,331,12.0
+558,0.047,,638,White Zombie Ale,Witbier,331,12.0
+559,0.052000000000000005,,507,Firewater India Pale Ale,American IPA,331,12.0
+560,0.055999999999999994,,480,Farmer Ted's Farmhouse Cream Ale,Cream Ale,331,12.0
+561,0.048,16.0,1882,Whitecap Wit,Witbier,285,16.0
+562,0.078,16.0,1881,Seiche Scottish Ale,Scottish Ale,285,16.0
+563,0.057999999999999996,,2446,Peanut Butter Jelly Time,American Brown Ale,96,12.0
+564,0.054000000000000006,,2106,King Coconut,American Porter,96,12.0
+565,0.085,90.0,2600,Gone A-Rye,American Double / Imperial IPA,29,16.0
+566,,,2210,Special Release,,29,16.0
+567,0.068,70.0,2052,Dankosaurus,American IPA,29,16.0
+568,0.051,35.0,1584,Scruffy's Smoked Alt,Smoked Beer,29,16.0
+569,0.051,36.0,1182,Elliott's Phoned Home Pale Ale,American Pale Ale (APA),29,16.0
+570,0.05,18.0,1050,The Lawn Ranger,Cream Ale,29,16.0
+571,0.05,,1219,All American Blonde Ale,American Blonde Ale,452,12.0
+572,0.05,,1218,All American Red Ale,American Amber / Red Ale,452,12.0
+573,0.05,40.0,2377,Main St. Virginia Ale,Altbier,122,12.0
+574,0.045,24.0,1839,Chin Music Amber Lager,American Amber / Red Lager,122,12.0
+575,0.05,40.0,1248,Main St. Virginia Ale,Altbier,122,12.0
+576,0.052000000000000005,42.0,1247,Ray Ray’s Pale Ale,American Pale Ale (APA),122,12.0
+577,0.051,15.0,1649,Chai Ale,Herbed / Spiced Beer,350,16.0
+578,0.07200000000000001,85.0,1648,Lucky Day IPA,American IPA,350,16.0
+579,0.095,99.0,1647,Terrace Hill Double IPA,American Double / Imperial IPA,350,16.0
+580,0.075,77.0,1646,Catch 23,American Black Ale,350,16.0
+581,0.07,,2057,Stickin' In My Rye,Rye Beer,236,24.0
+582,0.06,45.0,2056,Black Me Stout,American Stout,236,12.0
+583,0.05,22.0,2055,Killer Kolsch,Kölsch,236,12.0
+584,0.07,65.0,1933,Missile IPA,American IPA,236,12.0
+585,0.045,,2019,Enlighten,Kölsch,250,16.0
+586,0.065,8.0,2018,Ale Cider,Fruit / Vegetable Beer,250,16.0
+587,0.055,30.0,2017,Pail Ale,American Pale Ale (APA),250,16.0
+588,0.045,,2016,Englishman,English Brown Ale,250,16.0
+589,0.08,69.0,2080,8 Barrel,American Strong Ale,226,16.0
+590,0.055,40.0,2079,Oktoberfest,Märzen / Oktoberfest,226,16.0
+591,0.057,58.0,2380,IPA #11,American IPA,121,16.0
+592,0.057,10.0,2379,Blood Orange Honey,Fruit / Vegetable Beer,121,16.0
+593,0.052000000000000005,,2354,Lighthouse Amber,Altbier,121,16.0
+594,0.08900000000000001,126.0,2440,Bay of Bengal Double IPA (2014),American Double / Imperial IPA,99,12.0
+595,0.049,29.0,567,Churchkey Pilsner Style Beer,American Pilsner,526,12.0
+596,0.05,,1342,First Press,Cider,425,12.0
+597,0.05,,1341,Magic Apple,Cider,425,12.0
+598,0.055,25.0,2349,Cubano Espresso,Bock,141,12.0
+599,0.062,65.0,2014,Operation Homefront,American IPA,141,12.0
+600,0.08199999999999999,65.0,2013,Wandering Pelican,American Black Ale,141,12.0
+601,0.055,,2012,Sugar Plum,American Brown Ale,141,12.0
+602,0.055,,2011,Oktoberfest,Märzen / Oktoberfest,141,12.0
+603,0.06,,2010,Puppy's Breath Porter,American Porter,141,12.0
+604,0.045,,2009,Happening Now,American IPA,141,12.0
+605,0.07,60.0,1726,Hopped on the High Seas (Hop #529),American IPA,141,12.0
+606,0.07,60.0,1725,Hopped on the High Seas (Calypso),American IPA,141,12.0
+607,0.063,,1695,Wiregrass Post-Prohibition Ale,American Pale Ale (APA),141,12.0
+608,0.07,60.0,1694,Dry-Hopped On The High Seas Caribbean-Style IPA,American IPA,141,12.0
+609,0.07,60.0,1693,Hopped on the High Seas (Citra),American IPA,141,12.0
+610,0.07,60.0,1692,Hopped on the High Seas (Ahtanum),American IPA,141,12.0
+611,0.055,,1369,Gwar Beer,American Pale Ale (APA),141,12.0
+612,0.052000000000000005,,1243,Tropical Heatwave,American Pale Wheat Ale,141,16.0
+613,0.075,70.0,1142,Humidor Series India Pale Ale,American IPA,141,12.0
+614,0.075,70.0,1141,Jai Alai IPA Aged on White Oak,American IPA,141,12.0
+615,0.08,65.0,1140,José Martí American Porter,American Porter,141,12.0
+616,0.05,,1139,Invasion Pale Ale,American Pale Ale (APA),141,12.0
+617,0.055,25.0,1138,Maduro Brown Ale,English Brown Ale,141,12.0
+618,0.055,25.0,571,Maduro Brown Ale,American Brown Ale,141,12.0
+619,0.05,,570,Hotter Than Helles Lager,Munich Helles Lager,141,12.0
+620,0.07200000000000001,75.0,569,Tocobaga Red Ale,American Amber / Red Ale,141,12.0
+621,0.075,70.0,546,Jai Alai IPA,American IPA,141,12.0
+622,0.05,18.0,545,Florida Cracker Belgian Wit,Witbier,141,12.0
+623,0.048,,2338,Shark Tracker Light lager,Light Lager,145,12.0
+624,0.06,,1365,Pumple Drumkin,Pumpkin Ale,145,12.0
+625,0.045,,1094,Grey Lady,Witbier,145,12.0
+626,0.062,,657,Summer of Lager,Munich Helles Lager,145,12.0
+627,0.065,,656,Indie Pale Ale,American IPA,145,12.0
+628,0.038,,359,Sankaty Light Lager,Light Lager,145,12.0
+629,0.055999999999999994,,56,Whale's Tale Pale Ale,English Pale Ale,145,12.0
+630,0.067,60.0,1772,Jacaranada Rye IPA,American IPA,320,16.0
+631,0.06,75.0,1393,Cascadian Dark Ale,American Black Ale,418,12.0
+632,0.044000000000000004,13.0,893,Wheat the People,American Pale Wheat Ale,418,16.0
+633,0.047,17.0,1407,Tybee Island Blonde,American Blonde Ale,415,12.0
+634,0.062,55.0,1406,Savannah Brown Ale,American Brown Ale,415,12.0
+635,0.046,11.0,2438,Rhode Island Blueberry,Kölsch,101,12.0
+636,0.065,75.0,2437,Newport Storm IPA,American IPA,101,12.0
+637,0.052000000000000005,24.0,751,Hurricane Amber Ale (2004),American Amber / Red Ale,101,12.0
+638,0.052000000000000005,24.0,120,Hurricane Amber Ale,American Amber / Red Ale,101,12.0
+639,0.057999999999999996,,2061,Big Blue Van,Fruit / Vegetable Beer,232,16.0
+640,0.068,75.0,970,Des Moines IPA,American IPA,482,16.0
+641,0.048,22.0,969,Capital Gold Golden Lager,German Pilsener,482,16.0
+642,0.055999999999999994,21.0,968,Farmer John's Multi-Grain Ale,American Blonde Ale,482,16.0
+643,0.05,,2351,Behemoth,American Pilsner,139,12.0
+644,0.052000000000000005,,1650,Arkansas Red,American Amber / Red Ale,139,12.0
+645,0.057,,1337,Core Oatmeal Stout,Oatmeal Stout,139,12.0
+646,0.061,,1336,Core ESB,Extra Special / Strong Bitter (ESB),139,12.0
+647,0.038,,737,Chester's Beer (2005),American Pale Lager,512,12.0
+648,0.05,,129,Heiner Brau Kölsch,Kölsch,553,12.0
+649,0.048,,716,Trigger Blonde Ale,American Blonde Ale,515,16.0
+650,0.075,29.0,659,Crabtree Oatmeal Stout,Oatmeal Stout,515,16.0
+651,0.077,71.0,556,Eclipse Black IPA,American Black Ale,515,16.0
+652,0.06,46.0,2538,Neomexicanus Native,American Pale Ale (APA),63,12.0
+653,0.075,25.0,2355,Old Soul,Belgian Strong Pale Ale,63,12.0
+654,0.059000000000000004,,1689,Snowcat Coffee Stout,American Stout,63,12.0
+655,,,1163,WinterWonderGrass Festival Ale,American Amber / Red Ale,63,12.0
+656,,,940,Boohai Red Ale,American Amber / Red Ale,63,12.0
+657,0.052000000000000005,15.0,685,Lava Lake Wit,Witbier,63,12.0
+658,0.06,,613,Mountain Livin' Pale Ale,American Pale Ale (APA),63,12.0
+659,0.052000000000000005,25.0,356,Crazy Mountain Amber Ale,American Amber / Red Ale,63,12.0
+660,0.065,65.0,2029,Tropicalia,American IPA,247,12.0
+661,0.045,,2028,Athena,Berliner Weissbier,247,12.0
+662,0.049,25.0,2293,Aviator Raspberry Blonde,American Blonde Ale,169,12.0
+663,0.055,,1105,3 Picket Porter,American Porter,169,12.0
+664,0.055999999999999994,,1104,Rusty Nail Pale Ale,American Pale Ale (APA),169,12.0
+665,0.065,,2145,Red Water Irish Style Red,American Amber / Red Ale,212,12.0
+666,0.066,,1804,Mjöllnir,Herbed / Spiced Beer,212,12.0
+667,0.055,,1602,Bear Butte Nut Brown Ale,American Brown Ale,212,12.0
+668,0.045,,1301,Easy Livin' Summer Ale,American Blonde Ale,212,12.0
+669,0.055,,542,Canyon Cream Ale,Cream Ale,212,12.0
+670,0.069,,272,Pile O'Dirt Porter,American Porter,212,12.0
+671,0.06,,271,11th Hour IPA,American IPA,212,12.0
+672,0.06,31.0,1057,South Ridge Amber Ale,American Amber / Red Ale,472,16.0
+673,0.052000000000000005,23.0,681,Summertime Ale,Kölsch,472,16.0
+674,0.049,,1789,Lost River Blonde Ale,American Blonde Ale,315,16.0
+675,0.054000000000000006,,1788,Monon Wheat,Witbier,315,16.0
+676,0.08,,1787,Floyd's Folly,Scottish Ale,315,16.0
+677,0.063,,1786,Half Court IPA,American IPA,315,16.0
+678,0.045,,1763,Geary's Pale Ale,English Pale Ale,323,12.0
+679,0.06,,1311,Geary's Summer Ale,Kölsch,323,12.0
+680,0.08,,2078,Stone of Arbroath,Scotch Ale / Wee Heavy,227,12.0
+681,0.05,15.0,1809,The Tradition,American Blonde Ale,227,12.0
+682,0.053,11.0,1263,El Hefe Speaks,Hefeweizen,227,12.0
+683,0.055,,1092,Penn Quarter Porter,American Porter,227,12.0
+684,0.092,115.0,851,On the Wings of Armageddon,American Double / Imperial IPA,227,12.0
+685,0.065,80.0,186,The Corruption,American IPA,227,12.0
+686,0.07,,185,The Citizen,Belgian Pale Ale,227,12.0
+687,0.06,,184,The Public,American Pale Ale (APA),227,12.0
+688,0.065,,1224,Dank IPA,American IPA,451,16.0
+689,0.065,,964,Dank IPA (2012),American IPA,451,16.0
+690,0.07200000000000001,,1623,Lift Off IPA,American IPA,358,16.0
+691,0.055,,110,BrewFarm Select Golden Lager,American Pale Lager,554,12.0
+692,0.05,,1735,Sprocket Blonde Ale (2006),American Blonde Ale,333,12.0
+693,0.05,,1734,Sprocket Pale Ale (2006),American Pale Ale (APA),333,12.0
+694,0.063,37.0,1746,Dead Armadillo Amber Ale,American Amber / Red Ale,330,12.0
+695,0.06,,2371,Neato Bandito,Euro Pale Lager,127,12.0
+696,0.075,33.0,2251,Oak Cliff Coffee Ale,American Brown Ale,127,12.0
+697,0.085,100.0,2166,Dream Crusher Double IPA,American Double / Imperial IPA,127,12.0
+698,0.06,,1827,Deep Ellum Pale Ale,American Pale Ale (APA),127,12.0
+699,0.07,,1203,Double Brown Stout,Baltic Porter,127,12.0
+700,0.048,25.0,1202,Farmhouse Wit,Saison / Farmhouse Ale,127,16.0
+701,0.046,,1161,Rye Pils Session Lager,German Pilsener,127,12.0
+702,0.052000000000000005,23.0,946,Dallas Blonde,American Blonde Ale,127,12.0
+703,0.07,70.0,943,Deep Ellum IPA,American IPA,127,12.0
+704,0.045,44.0,1886,Thrasher Session India Pale Ale,American IPA,283,12.0
+705,0.05,16.0,1885,Gutch English Style Mild Ale,English Pale Mild Ale,283,12.0
+706,0.059000000000000004,55.0,1213,Chuli Stout,Irish Dry Stout,453,12.0
+707,0.055999999999999994,46.0,1159,Mother Ale,American Blonde Ale,453,12.0
+708,0.065,71.0,947,Twister Creek India Pale Ale,American IPA,453,12.0
+709,0.057999999999999996,46.0,929,Single Engine Red,Irish Red Ale,453,12.0
+710,0.07,,1944,Incredible Pedal IPA,American IPA,263,12.0
+711,0.05,,1943,Graham Cracker Porter,American Porter,263,12.0
+712,0.05,40.0,1210,Mirror Pond Pale Ale,American Pale Ale (APA),454,12.0
+713,0.052000000000000005,16.0,2550,Weissenheimer,Hefeweizen,57,12.0
+714,0.049,22.0,2505,Abbey's Single (2015- ),Abbey Single Ale,57,12.0
+715,0.063,76.0,2025,Vertex IPA,American IPA,57,12.0
+716,0.05,12.0,2021,Here Gose Nothin',Gose,57,12.0
+717,0.05,,2015,Strawberry Blonde,Fruit / Vegetable Beer,57,12.0
+718,0.096,85.0,1888,Hoperation Overload,American Double / Imperial IPA,57,12.0
+719,0.049,22.0,1887,Abbey's Single Ale (Current),Abbey Single Ale,57,12.0
+720,0.044000000000000004,45.0,2051,Bravo Four Point,American Pale Ale (APA),237,12.0
+721,0.052000000000000005,26.0,1201,Striped Bass Pale Ale,American Pale Ale (APA),237,12.0
+722,0.054000000000000006,27.0,924,Deadicated Amber,American Amber / Red Ale,491,16.0
+723,,,731,Kaleidoscope Collaboration 2012,American Black Ale,491,16.0
+724,0.071,85.0,730,California Sunshine Rye IPA,American IPA,491,16.0
+725,0.07400000000000001,12.0,647,Full Boar Scotch Ale,Scotch Ale / Wee Heavy,491,16.0
+726,0.045,,1773,12 Man Pale Ale,American Pale Ale (APA),319,12.0
+727,0.065,72.0,1795,Filthy Hoppin' IPA,American IPA,311,16.0
+728,,,944,Dock Street Amber Beer (1992),American Amber / Red Ale,488,12.0
+729,,,524,Dolores River Hefeweizen,Hefeweizen,531,16.0
+730,,,450,Dolores River ESB,Extra Special / Strong Bitter (ESB),531,16.0
+731,,,449,Snaggletooth Double Pale Ale,American Double / Imperial IPA,531,16.0
+732,,,448,Dolores River Pale Ale,American Pale Ale (APA),531,16.0
+733,,,447,Dolores River Dry Stout,Irish Dry Stout,531,16.0
+734,,,446,Dolores River Mild,English Dark Mild Ale,531,16.0
+735,0.049,,1246,Cranberry Blend,Cider,446,12.0
+736,0.051,,977,Orignal Blend,Cider,446,12.0
+737,0.066,100.0,881,Hop Abomination,American IPA,496,12.0
+738,0.051,17.0,880,Apricot Blonde,Fruit / Vegetable Beer,496,12.0
+739,0.043,12.0,872,Dry Dock Hefeweizen,Hefeweizen,496,12.0
+740,0.057999999999999996,49.0,871,Dry Dock Amber Ale,American Amber / Red Ale,496,12.0
+741,0.061,64.0,1685,Category 3 IPA,American IPA,340,12.0
+742,0.045,18.0,457,Dundee Summer Wheat Beer,American Pale Wheat Ale,538,12.0
+743,0.05,,1590,Pumpkin Patch Ale,Pumpkin Ale,369,16.0
+744,0.078,74.0,1382,Crank Yanker IPA,American IPA,369,16.0
+745,0.06,,1110,River Runners Pale Ale,American Pale Ale (APA),369,16.0
+746,0.05,,1014,Pumpkin Patch Ale (2012),Pumpkin Ale,369,16.0
+747,0.055,,911,Mountain Fairy Raspberry Wheat,Fruit / Vegetable Beer,369,16.0
+748,0.045,,680,Boater Beer,German Pilsener,369,16.0
+749,0.078,74.0,395,Crank Yanker IPA (2011),American IPA,369,16.0
+750,0.057,,1642,Bleeding Buckeye Red Ale,Extra Special / Strong Bitter (ESB),352,16.0
+751,0.049,25.0,673,Dottie Seattle Lager,American Amber / Red Lager,516,16.0
+752,0.07,,1107,Nut Sack Imperial Brown Ale,American Brown Ale,465,12.0
+753,0.05,,1039,Underachiever,American Adjunct Lager,473,16.0
+754,0.052000000000000005,,2477,Lil' Brainless Raspberries,Fruit / Vegetable Beer,81,12.0
+755,0.052000000000000005,,2008,Element 29,American Pale Ale (APA),81,12.0
+756,0.05,,2004,Hop Syndrome,American Pale Lager,81,12.0
+757,0.062,,2003,Escape to Colorado,American IPA,81,12.0
+758,0.043,60.0,2292,Little Sister India Style Session Ale,American IPA,170,12.0
+759,0.062,80.0,1504,Country Boy IPA,American IPA,170,12.0
+760,0.049,23.0,2604,Blonde Czich,American Blonde Ale,26,16.0
+761,0.07,61.0,2432,White Reaper,Belgian IPA,26,16.0
+762,0.051,,2431,Bobblehead,American Pale Wheat Ale,26,16.0
+763,0.052000000000000005,,2430,Lucky Dog,American Pale Ale (APA),26,16.0
+764,0.048,,2429,Voodoo,American Porter,26,16.0
+765,0.054000000000000006,48.0,1967,General George Patton Pilsner,Czech Pilsener,26,16.0
+766,0.04,,2283,Nomader Weiss,Berliner Weissbier,173,12.0
+767,0.085,,2248,Molotov Lite,American Double / Imperial IPA,173,16.0
+768,0.055,,1287,Hipster Ale (Two Roads Brewing),American Pale Ale (APA),173,12.0
+769,0.027000000000000003,,1286,Bikini Beer,American IPA,173,12.0
+770,0.055,,640,Hipster Ale (Westbrook Brewing),American Pale Ale (APA),173,12.0
+771,0.05,32.0,1722,Iron Horse Pale Ale,American Pale Ale (APA),335,12.0
+772,0.045,19.0,1435,Stone's Throw IPA,Scottish Ale,335,12.0
+773,0.067,70.0,1434,Wood Chipper India Pale Ale,American IPA,335,12.0
+774,0.063,55.0,2089,Trail Head,American Pale Ale (APA),224,12.0
+775,0.07,80.0,2088,Hop Stalker Fresh Hop IPA,American IPA,224,16.0
+776,0.07,58.0,1455,Sudice American Stout,American Stout,405,16.0
+777,0.05,20.0,1454,Parcae Belgian Style Pale Ale,Belgian Pale Ale,405,16.0
+778,0.05,20.0,1453,Norns Roggenbier,Roggenbier,405,16.0
+779,0.05,20.0,1452,Laimas Kölsch Style Ale,Kölsch,405,16.0
+780,0.07,70.0,1451,Moirai India Pale Ale,American IPA,405,16.0
+781,0.075,53.0,2191,Loki Red Ale,American Amber / Red Ale,201,16.0
+782,0.046,,1731,Peaches & Cream,Fruit / Vegetable Beer,201,16.0
+783,0.051,,1022,Quaff India Style Session Ale,American IPA,201,16.0
+784,0.075,53.0,895,Loki Red Ale (2013),American Amber / Red Ale,201,16.0
+785,0.069,,682,Mjolnir Imperial IPA,American Double / Imperial IPA,201,16.0
+786,0.05,,112,Fearless Scottish Ale,Scottish Ale,201,16.0
+787,0.081,,2289,Mastermind,American Double / Imperial IPA,172,12.0
+788,0.08199999999999999,,2027,Hyzer Flip,American Double / Imperial IPA,172,16.0
+789,0.08199999999999999,80.0,1929,Second Fiddle,American Double / Imperial IPA,172,16.0
+790,0.055,30.0,1858,Hodad Porter,American Porter,172,16.0
+791,0.045,,2591,Weiss Weiss Baby,Kristalweizen,36,12.0
+792,0.055,45.0,2590,Czech Yo Self,Czech Pilsener,36,12.0
+793,0.048,20.0,1968,FMB 101,Kölsch,36,12.0
+794,0.09,,1981,Hardcore Chimera,American Double / Imperial IPA,256,16.0
+795,0.08,80.0,1664,Sobek & Set,American Black Ale,256,16.0
+796,0.086,,1663,Nuclear Winter,Belgian Strong Dark Ale,256,16.0
+797,0.05,22.0,1662,Wet Hot American Wheat Ale,American Pale Wheat Ale,256,16.0
+798,0.053,,941,Secret Stache Stout,American Stout,256,16.0
+799,0.08,72.0,935,Fascist Pig Ale,American Amber / Red Ale,256,16.0
+800,0.055,,809,Cut Throat Pale Ale,American Pale Ale (APA),256,16.0
+801,0.075,,481,Threadless IPA,American IPA,256,16.0
+802,0.055,,351,Cut Throat Pale Ale (2011),American Pale Ale (APA),256,16.0
+803,0.047,,350,Golden Wing Blonde Ale,American Blonde Ale,256,16.0
+804,0.045,47.0,2569,Easy Jack,American IPA,48,12.0
+805,0.075,75.0,2463,Union Jack,American IPA,48,12.0
+806,0.053,,2462,Pivo Pils,German Pilsener,48,12.0
+807,0.047,,1957,805 Blonde Ale,American Blonde Ale,48,12.0
+808,0.047,20.0,1733,805,American Blonde Ale,48,12.0
+809,0.065,,2624,Deflator,Doppelbock,16,16.0
+810,0.05,27.0,2284,Hinchtown Hammer Down,American Blonde Ale,16,16.0
+811,0.06,104.0,1610,Half Cycle IPA,American IPA,16,16.0
+812,,,520,Inclined Plane Ale,American IPA,532,12.0
+813,0.055,,2554,Moped Traveler,American Pale Ale (APA),54,16.0
+814,0.071,60.0,608,Snake Dog IPA,American IPA,521,12.0
+815,0.047,28.0,607,Underdog Atlantic Lager,American Pale Lager,521,12.0
+816,0.04,,2567,Flying Mouse 8,American Porter,50,12.0
+817,0.07,70.0,2566,Flying Mouse 4,American IPA,50,12.0
+818,0.078,,1899,La Ferme Urbaine Farmhouse Ale,Saison / Farmhouse Ale,279,12.0
+819,0.06,,983,Backyahd IPA,American IPA,279,12.0
+820,0.065,,982,Raincloud Robust Porter,American Porter,279,12.0
+821,0.045,,981,Barstool American Golden Ale,American Blonde Ale,279,12.0
+822,0.05,18.0,2111,What the Butler Saw,Witbier,217,12.0
+823,0.069,65.0,2110,1916 Shore Shiver,American IPA,217,12.0
+824,0.052000000000000005,,2172,Quick WIT,Belgian Pale Ale,206,12.0
+825,0.062,,2171,The Optimist,American IPA,206,12.0
+826,0.045,,1911,Suicide Squeeze IPA,American IPA,206,16.0
+827,0.065,,1803,Java the Hop,American IPA,206,16.0
+828,0.062,,1566,Next Adventure Black IPA,American Black Ale,206,16.0
+829,0.067,,1515,3-Way IPA (2013),American IPA,206,16.0
+830,0.057999999999999996,,1214,Tender Loving Empire NWPA,American Pale Ale (APA),206,16.0
+831,0.052000000000000005,,674,Quick Wit Belgianesque Ale,Witbier,206,16.0
+832,0.055,,562,Sunrise Oatmeal Pale Ale,American Pale Ale (APA),206,16.0
+833,0.08800000000000001,,552,Cavatica Stout,American Double / Imperial Stout,206,16.0
+834,0.051,,319,1811 Lager,American Amber / Red Lager,206,16.0
+835,0.07400000000000001,97.0,318,Vortex IPA,American IPA,206,16.0
+836,,,2322,Fort Pitt Ale,American Amber / Red Ale,151,12.0
+837,0.047,19.0,2661,Park,American Pale Wheat Ale,4,12.0
+838,0.055999999999999994,16.0,2660,Westfalia,American Amber / Red Ale,4,12.0
+839,0.046,17.0,2659,KSA,Kölsch,4,12.0
+840,0.063,42.0,2658,Villager,American IPA,4,12.0
+841,0.085,50.0,2625,Dirty Bastard,Scotch Ale / Wee Heavy,15,12.0
+842,0.07200000000000001,65.0,1565,Centennial IPA,American IPA,15,12.0
+843,0.047,42.0,1223,All Day IPA,American IPA,15,12.0
+844,0.076,73.0,1874,El Chingon IPA,American IPA,287,12.0
+845,0.057,40.0,1873,Block Party Robust Porter,American Porter,287,12.0
+846,0.052000000000000005,20.0,1872,Local Buzz,American Blonde Ale,287,12.0
+847,0.055,,2613,Feel Like Maplin' Love,Oatmeal Stout,22,16.0
+848,0.05,,2612,Father's Beer,Belgian Pale Ale,22,16.0
+849,0.06,,2611,The 26th,American IPA,22,16.0
+850,0.064,90.0,2610,The Gadget,American IPA,22,16.0
+851,0.04,,1657,Leprechaun Lager,American Pale Lager,348,12.0
+852,0.052000000000000005,17.0,2309,Sunbru Kölsch,Kölsch,160,12.0
+853,0.06,21.0,1635,Kilt Lifter Scottish-Style Ale,,160,12.0
+854,0.051,,1616,Pumpkin Porter,American Porter,160,12.0
+855,0.042,9.0,1585,Four Peaks Peach Ale,Fruit / Vegetable Beer,160,12.0
+856,0.067,47.0,358,Hop Knot IPA,American IPA,160,12.0
+857,0.06,21.0,179,Kilt Lifter Scottish-Style Ale (2009),Scottish Ale,160,12.0
+858,0.052000000000000005,,178,Sunbru Kölsch,Kölsch,160,12.0
+859,0.06,,2428,Four String Vanilla Porter,American Porter,105,12.0
+860,0.05,28.0,2427,Suncaster Summer Wheat,American Pale Wheat Ale,105,12.0
+861,0.057,36.0,2425,Brass Knuckle Pale Ale,American Pale Ale (APA),105,12.0
+862,0.07,70.0,2424,Big Star White IPA,American White IPA,105,12.0
+863,0.055999999999999994,,1998,Old Detroit,American Amber / Red Ale,253,12.0
+864,0.069,69.0,1556,Batch 69 IPA,American IPA,253,12.0
+865,0.055,18.0,1208,Twisted Helles Summer Lager,Munich Helles Lager,253,12.0
+866,0.053,27.0,2527,OktoberFiesta,,66,12.0
+867,0.065,33.0,2526,Texicali ,American Brown Ale,66,12.0
+868,0.06,,2525,Pinata Protest,Witbier,66,12.0
+869,0.042,20.0,2524,Bat Outta Helles,Munich Helles Lager,66,12.0
+870,0.068,,2523,Original,American Amber / Red Ale,66,12.0
+871,0.042,10.0,2522,Rye Wit,Witbier,66,12.0
+872,0.059000000000000004,70.0,2521,Soul Doubt,American IPA,66,12.0
+873,0.044000000000000004,5.0,2520,Yo Soy Un Berliner,Berliner Weissbier,66,12.0
+874,0.04,,1174,77 Fremont Select Spring Session IPA,American IPA,460,12.0
+875,0.045,,1116,Fremont Organic Pale Ale,American Pale Ale (APA),460,12.0
+876,0.08,,994,Abominable Ale,English Strong Ale,460,12.0
+877,0.065,35.0,901,Harvest Ale,Saison / Farmhouse Ale,460,12.0
+878,0.065,45.0,875,Fremont Summer Ale,American Pale Ale (APA),460,12.0
+879,0.055999999999999994,30.0,858,Universale Pale Ale,American Pale Ale (APA),460,12.0
+880,0.065,80.0,857,Interurban IPA,American IPA,460,12.0
+881,0.053,32.0,1300,Gateway Kolsch Style Ale,Kölsch,433,12.0
+882,0.07,24.0,1260,Wee-Heavy-Er Scotch Ale,Scotch Ale / Wee Heavy,433,12.0
+883,0.052000000000000005,42.0,1259,13 Rebels ESB,Extra Special / Strong Bitter (ESB),433,12.0
+884,0.07,73.0,2254,Salamander Slam,American IPA,180,16.0
+885,0.05,,1658,Cack-A-Lacky,American Pale Ale (APA),347,12.0
+886,0.07200000000000001,50.0,2077,No Wake IPA,American IPA,228,12.0
+887,0.049,15.0,2076,Boathouse Blonde,American Blonde Ale,228,12.0
+888,0.05,26.0,2075,Cedar Point,American Amber / Red Ale,228,12.0
+889,0.067,70.0,2426,Clean Shave IPA,American IPA,106,12.0
+890,0.07200000000000001,75.0,2045,Might As Well IPL,American Pale Lager,240,16.0
+891,0.057999999999999996,35.0,1960,Saison Pamplemousse,Saison / Farmhouse Ale,240,12.0
+892,0.07400000000000001,74.0,1777,2020 IPA,American IPA,240,16.0
+893,0.08,70.0,1698,Wolf Among Weeds IPA,American IPA,240,16.0
+894,0.094,92.0,1641,Better Weather IPA,American IPA,240,16.0
+895,0.059000000000000004,60.0,1490,Point the Way IPA,American IPA,240,16.0
+896,0.046,15.0,1489,Golden Road Hefeweizen,Hefeweizen,240,16.0
+897,0.068,65.0,1399,Heal the Bay IPA,American IPA,240,16.0
+898,0.059000000000000004,60.0,1296,Point the Way IPA,American IPA,240,12.0
+899,0.05,,1034,Cabrillo Kölsch,Kölsch,240,16.0
+900,0.055,20.0,991,Get Up Offa That Brown,American Brown Ale,240,16.0
+901,0.08,70.0,750,Burning Bush Smoked IPA,American IPA,240,16.0
+902,0.08,70.0,749,Wolf Among Weeds IPA (2012),American IPA,240,16.0
+903,0.059000000000000004,60.0,549,Point the Way IPA (2012),American IPA,240,16.0
+904,0.046,15.0,548,Golden Road Hefeweizen (2012),Hefeweizen,240,16.0
+905,0.07,11.0,2587,Vanilla Porter,American Porter,39,16.0
+906,0.07,70.0,1109,Descender IPA,American IPA,464,12.0
+907,0.06,18.0,1108,Sweet As Pacific Ale,American Pale Wheat Ale,464,12.0
+908,0.055999999999999994,36.0,1000,Good People Pale Ale,American Pale Ale (APA),478,12.0
+909,0.09300000000000001,103.0,312,Snake Handler Double IPA,American Double / Imperial IPA,478,12.0
+910,0.06,54.0,311,Coffee Oatmeal Stout,Oatmeal Stout,478,12.0
+911,0.06,64.0,309,Good People IPA,American IPA,478,12.0
+912,0.057999999999999996,36.0,308,Good People American Brown Ale,American Brown Ale,478,12.0
+913,0.055,40.0,2205,Mountain Rescue Pale Ale,American Pale Ale (APA),194,12.0
+914,0.059000000000000004,55.0,2198,Goose Island India Pale Ale,American IPA,196,12.0
+915,0.054000000000000006,30.0,2457,312 Urban Pale Ale,American Pale Ale (APA),88,16.0
+916,0.054000000000000006,30.0,2202,312 Urban Pale Ale,American Pale Ale (APA),88,12.0
+917,0.042,18.0,2201,312 Urban Wheat Ale,American Pale Wheat Ale,88,16.0
+918,0.042,18.0,1829,312 Urban Wheat Ale,American Pale Wheat Ale,88,12.0
+919,0.042,20.0,581,312 Urban Wheat Ale (2012),American Pale Wheat Ale,88,12.0
+920,0.052000000000000005,19.0,1383,Beaver Logger,American Pale Lager,420,12.0
+921,0.05,,477,White Water Wheat,American Pale Wheat Ale,536,12.0
+922,0.052000000000000005,,476,Grand Canyon American Pilsner,American Pilsner,536,12.0
+923,0.054000000000000006,,143,Grand Canyon Sunset Amber Ale,American Amber / Red Ale,536,12.0
+924,,,142,Black Iron India Pale Ale,American IPA,536,12.0
+925,0.043,21.0,2129,Monarch Classic American Wheat,American Pale Wheat Ale,213,12.0
+926,0.049,21.0,2127,Sir William's English Brown Ale,English Brown Ale,213,12.0
+927,0.055,35.0,2126,Lakefire Rye Pale Ale,American Pale Ale (APA),213,12.0
+928,0.053,22.0,2303,Beer Agent Re-Ignition,American Blonde Ale,165,16.0
+929,0.057,18.0,1990,Cherry Ale,Fruit / Vegetable Beer,165,16.0
+930,0.055999999999999994,33.0,1702,Bourbon Barrel Aged Coconut Porter,American Porter,165,16.0
+931,0.062,60.0,1701,Great Crescent IPA,American IPA,165,16.0
+932,0.057,27.0,1700,Aurora Lager,Dortmunder / Export Lager,165,16.0
+933,0.053,22.0,1699,Great Crescent Blonde Ale,American Blonde Ale,165,16.0
+934,0.055999999999999994,33.0,1269,Great Crescent Coconut Porter,American Porter,165,16.0
+935,0.057,25.0,930,Great Crescent Oktoberfest Lager,Märzen / Oktoberfest,165,16.0
+936,0.045,36.0,649,Great Crescent Brown Ale,American Brown Ale,165,16.0
+937,0.057,18.0,639,Cherry Ale (1),Fruit / Vegetable Beer,165,16.0
+938,0.057,27.0,626,Aurora Lager (2011),Dortmunder / Export Lager,165,16.0
+939,0.06,25.0,615,Frosted Fields Winter Wheat,American Dark Wheat Ale,165,16.0
+940,0.051,13.0,478,Great Crescent Belgian Style Wit,Witbier,165,16.0
+941,0.075,65.0,455,Bourbon's Barrel Stout,American Stout,165,16.0
+942,0.08,66.0,442,Great Crescent Stout,English Stout,165,16.0
+943,0.055999999999999994,33.0,441,Great Crescent Coconut Porter (2012),American Porter,165,16.0
+944,0.057,23.0,440,Great Crescent Dark Lager,Euro Dark Lager,165,16.0
+945,0.042,26.0,439,Great Crescent Mild Ale,English Dark Mild Ale,165,16.0
+946,0.062,60.0,436,Great Crescent IPA (2011),American IPA,165,16.0
+947,0.053,22.0,389,Great Crescent Blonde Ale (2011),American Blonde Ale,165,16.0
+948,0.05,,2650,Denver Pale Ale (Artist Series No. 1),American Pale Ale (APA),6,12.0
+949,0.087,,2649,Hibernation Ale,Old Ale,6,12.0
+950,0.061,,2648,Whitewater,American Pale Wheat Ale,6,12.0
+951,0.071,,2647,Rumble,American IPA,6,12.0
+952,0.083,,2646,Orabelle,Tripel,6,12.0
+953,0.05,,2645,Lasso,American IPA,6,12.0
+954,0.095,75.0,2644,Yeti  Imperial Stout,Russian Imperial Stout,6,12.0
+955,0.073,,2643,Colette,Saison / Farmhouse Ale,6,12.0
+956,0.071,,2642,Titan IPA,American IPA,6,12.0
+957,0.045,15.0,404,Black Star Double Hopped Golden Lager (24 oz.),American Pale Lager,543,24.0
+958,0.045,15.0,164,Black Star Double Hopped Golden Lager (12 oz.),American Pale Lager,543,12.0
+959,0.052000000000000005,49.0,1923,Commotion APA,American Pale Ale (APA),269,12.0
+960,0.052000000000000005,,1922,Southern Drawl Pale Lager,American Pale Lager,269,12.0
+961,0.05,5.0,1604,Chickawawa Lemonale,Fruit / Vegetable Beer,365,12.0
+962,0.07,22.0,1574,Barrel Aged Farmer,American Brown Ale,365,16.0
+963,0.048,,1446,Great River Golden Ale,American Blonde Ale,365,12.0
+964,0.048,,1275,Dirty Blonde Chocolate Ale,American Blonde Ale,365,12.0
+965,0.048,20.0,1244,Dos Pistolas,Vienna Lager,365,12.0
+966,0.05,30.0,1064,Owney Irish Style Red Ale,Irish Red Ale,365,16.0
+967,0.06,,1028,Aaah Bock Lager,Vienna Lager,365,16.0
+968,0.055,10.0,865,Widespread Wit,Witbier,365,16.0
+969,0.054000000000000006,30.0,864,Roller Dam Red Ale,Irish Red Ale,365,16.0
+970,0.053,48.0,863,483 Pale Ale,American Pale Ale (APA),365,16.0
+971,0.09,99.0,672,Hop A Potamus Double Dark Rye Pale Ale,Rye Beer,365,16.0
+972,0.07,22.0,655,Farmer Brown Ale,American Brown Ale,365,16.0
+973,0.07,70.0,540,Big Cock IPA,American IPA,365,16.0
+974,0.059000000000000004,25.0,539,Oktoberfest,Märzen / Oktoberfest,365,16.0
+975,0.048,25.0,517,40th Annual Bix Street Fest Copper Ale (Current),American Amber / Red Ale,365,16.0
+976,0.06,36.0,371,Redband Stout,American Stout,365,16.0
+977,0.053,48.0,190,483 Pale Ale (2010),American Pale Ale (APA),365,16.0
+978,0.054000000000000006,30.0,189,Roller Dam Red Ale (2010),Irish Red Ale,365,16.0
+979,0.05,30.0,1106,Pablo Beach Pale Ale,American Pale Ale (APA),466,12.0
+980,0.057,44.0,2314,Wild Trail Pale Ale,American Pale Ale (APA),156,12.0
+981,0.067,71.0,2313,Mothman Black IPA,American Black Ale,156,12.0
+982,0.057999999999999996,,2461,Autumn Winds Fest Beer,Märzen / Oktoberfest,86,16.0
+983,0.085,69.0,2044,Captain's Daughter,American Double / Imperial IPA,86,12.0
+984,0.057999999999999996,,1567,Autumn Winds,Märzen / Oktoberfest,379,16.0
+985,0.06,54.0,1505,Flying Jenny Extra Pale Ale,American Pale Ale (APA),379,12.0
+986,0.04,20.0,1186,Hazy Day Belgian-Style Wit,Witbier,379,16.0
+987,0.055,,1185,Bring Back the Beach Blonde Ale,American Blonde Ale,379,16.0
+988,0.06,34.0,984,Leaning Chimney Smoked Porter,American Porter,379,16.0
+989,0.06,54.0,693,Flying Jenny Extra Pale Ale (2012),American Pale Ale (APA),379,12.0
+990,0.049,22.0,631,Flagship Ale,Cream Ale,379,12.0
+991,0.045,6.0,2375,Mr. Blue Sky,American Pale Wheat Ale,124,16.0
+992,0.065,,2143,3 Scrooges,Winter Warmer,124,16.0
+993,0.05,25.0,2142,Screamin’ Pumpkin,Pumpkin Ale,124,16.0
+994,0.05,35.0,2141,Grand Trunk Bohemian Pils,Czech Pilsener,124,16.0
+995,0.065,25.0,2140,El Rojo,American Amber / Red Ale,124,16.0
+996,0.075,,2139,Norm's Raggedy Ass IPA,American IPA,124,16.0
+997,0.05,35.0,2138,Grind Line,American Pale Ale (APA),124,16.0
+998,0.04,55.0,2007,Norm's Gateway IPA,American IPA,124,12.0
+999,0.09,,1570,Lemon Shandy Tripel,Tripel,124,16.0
+1000,0.063,43.0,2339,Little Red Cap,Altbier,144,12.0
+1001,0.069,67.0,1857,Supergoose IPA,American IPA,290,12.0
+1002,0.047,,1440,Hale's Pale American Ale,American Pale Ale (APA),290,12.0
+1003,0.07,,1753,Heyoka IPA,American IPA,327,16.0
+1004,0.08,,1448,Guest Lager,American Double / Imperial Pilsner,327,16.0
+1005,0.057,,1134,Pony Pilsner,German Pilsener,327,16.0
+1006,0.055,,1066,Akari Shogun American Wheat Ale,American Pale Wheat Ale,327,16.0
+1007,0.06,,849,Meat Wave,English India Pale Ale (IPA),327,16.0
+1008,0.06,,352,Over Ale,American Brown Ale,327,16.0
+1009,0.042,,149,Gossamer Golden Ale,American Blonde Ale,327,16.0
+1010,0.052000000000000005,,148,Daisy Cutter Pale Ale,American Pale Ale (APA),327,16.0
+1011,0.07,40.0,2026,Pursuit,American IPA,248,12.0
+1012,0.052000000000000005,18.0,1361,Half Full Bright Ale,American Blonde Ale,248,12.0
+1013,0.046,17.0,1016,Orange Wheat,Fruit / Vegetable Beer,476,12.0
+1014,0.043,14.0,1015,Hangar 24 Helles Lager,Munich Helles Lager,476,12.0
+1015,0.075,70.0,1677,The Great Return,American IPA,343,16.0
+1016,0.044000000000000004,18.0,1331,Hardywood Cream Ale,Cream Ale,343,12.0
+1017,0.055999999999999994,55.0,1270,Capital Trail Pale Ale,American Pale Ale (APA),343,12.0
+1018,0.052000000000000005,15.0,2059,UFO Gingerland,Herbed / Spiced Beer,234,12.0
+1019,0.062,45.0,1653,The Long Thaw White IPA,American White IPA,234,12.0
+1020,0.048,,1558,Honey Cider,Cider,234,12.0
+1021,0.05,28.0,1380,Harpoon Summer Beer,Kölsch,234,12.0
+1022,0.059000000000000004,42.0,1379,Harpoon IPA,American IPA,234,12.0
+1023,0.059000000000000004,20.0,1340,UFO Pumpkin,Pumpkin Ale,234,12.0
+1024,0.055,30.0,1313,Harpoon Octoberfest,Märzen / Oktoberfest,234,12.0
+1025,0.059000000000000004,42.0,770,Harpoon IPA (2012),American IPA,234,12.0
+1026,0.05,28.0,769,Harpoon Summer Beer (2012),Kölsch,234,12.0
+1027,0.048,10.0,610,UFO White,American Pale Wheat Ale,234,12.0
+1028,0.05,28.0,192,Harpoon Summer Beer (2010),Kölsch,234,12.0
+1029,0.059000000000000004,42.0,126,Harpoon IPA (2010),American IPA,234,12.0
+1030,,,506,Great Falls Select Pale Ale,American Blonde Ale,535,12.0
+1031,0.048,,181,Beltian White,Witbier,535,12.0
+1032,0.049,,2183,Kaua'i Golden Ale,American Blonde Ale,204,12.0
+1033,0.054000000000000006,,2182,Sunset Amber,American Pale Ale (APA),204,12.0
+1034,0.064,,2181,Hapa Brown Ale,American Brown Ale,204,19.2
+1035,0.064,,2180,Hapa Brown Ale,American Brown Ale,204,12.0
+1036,0.083,,2179,Southern Cross,Flanders Red Ale,204,19.2
+1037,0.076,65.0,1895,Groupe G,Belgian IPA,280,16.0
+1038,0.062,40.0,1894,Pt. Bonita Rustic Lager,American Pale Lager,280,16.0
+1039,0.08800000000000001,77.0,1893,Hill 88 Double IPA,American Double / Imperial IPA,280,16.0
+1040,0.07200000000000001,45.0,990,Loose Cannon,American IPA,479,12.0
+1041,0.06,30.0,989,AARGHtoberfest!,Märzen / Oktoberfest,479,12.0
+1042,0.06,,988,Davy Jones Lager,Cream Ale,479,12.0
+1043,0.063,30.0,1351,Grazias,Cream Ale,423,16.0
+1044,0.08,86.0,1346,Habitus IPA,American IPA,423,16.0
+1045,0.099,85.0,904,Ex Umbris Rye Imperial Stout,American Double / Imperial Stout,423,16.0
+1046,0.063,21.0,2295,The Golden One,American Pilsner,168,12.0
+1047,0.07,68.0,2294,The Power of Zeus,American Pale Ale (APA),168,12.0
+1048,0.044000000000000004,22.0,824,Tonganoxie Honey Wheat,American Pale Wheat Ale,500,12.0
+1049,0.045,,616,Oregon Trail Unfiltered Raspberry Wheat,Fruit / Vegetable Beer,500,12.0
+1050,0.055,,96,Annie's Amber Ale,American Amber / Red Ale,500,12.0
+1051,0.045,32.0,1615,The 12th Can™,American Pale Ale (APA),362,16.0
+1052,0.055,34.0,889,Hilliard's Pils,Czech Pilsener,362,16.0
+1053,0.049,20.0,724,Hilliard's Blonde,American Blonde Ale,362,16.0
+1054,0.055,60.0,497,Hilliard's Amber Ale,American Amber / Red Ale,362,16.0
+1055,0.066,30.0,496,Hilliard's Saison,Saison / Farmhouse Ale,362,16.0
+1056,0.042,,1652,White Cap White IPA,American White IPA,349,16.0
+1057,0.042,25.0,1835,Provision,Saison / Farmhouse Ale,297,12.0
+1058,0.047,28.0,1834,One Nut Brown,American Brown Ale,297,12.0
+1059,0.057999999999999996,45.0,1833,Hop Farm IPA,American IPA,297,12.0
+1060,0.049,20.0,2195,Double D Blonde,American Blonde Ale,198,12.0
+1061,0.078,60.0,1605,Festeroo Winter Ale,American Strong Ale,198,12.0
+1062,0.063,70.0,1543,Proxima IPA,American IPA,198,12.0
+1063,0.049,20.0,1390,Double D Blonde (2013),American Blonde Ale,198,12.0
+1064,0.048,13.0,1354,541 American Lager,American Pale Lager,198,12.0
+1065,0.065,90.0,1353,Alphadelic IPA,American IPA,198,12.0
+1066,0.065,90.0,499,Alphadelic IPA (2011),American IPA,198,12.0
+1067,0.049,20.0,498,Double D Blonde (2011),American Blonde Ale,198,12.0
+1068,0.07,,1501,Green House India Pale Ale,American IPA,395,12.0
+1069,0.051,,1004,The One They Call Zoe,American Pale Lager,395,12.0
+1070,0.051,40.0,502,Alteration,Altbier,395,12.0
+1071,0.06,50.0,501,Pale Dog,American Pale Ale (APA),395,12.0
+1072,0.065,,2357,Porter Culture,American Porter,136,12.0
+1073,0.068,,2483,Hard Cider,Cider,80,16.0
+1074,0.027000000000000003,21.0,2482,Totally Radler,Radler,80,16.0
+1075,0.039,20.0,2400,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1076,0.039,20.0,2399,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1077,0.039,20.0,2398,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1078,0.039,20.0,2397,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1079,0.039,20.0,2396,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1080,0.039,20.0,2395,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1081,0.039,20.0,2394,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1082,0.039,20.0,2393,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1083,0.039,20.0,2392,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1084,0.039,20.0,2391,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1085,0.039,20.0,2390,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1086,0.039,20.0,2389,Nonstop Hef Hop,American Pale Wheat Ale,80,16.0
+1087,0.057999999999999996,60.0,2388,Rise Up Red,American Amber / Red Ale,80,16.0
+1088,0.057999999999999996,35.0,2200,Survival Stout,American Stout,80,16.0
+1089,0.066,75.0,2199,Hopworks IPA,American IPA,80,16.0
+1090,0.073,70.0,2193,Abominable Winter Ale,American Strong Ale,80,16.0
+1091,0.06,60.0,1398,Pigwar White India Pale Ale,American White IPA,80,16.0
+1092,0.057999999999999996,60.0,1085,Rise-Up Red (2014),American Amber / Red Ale,80,16.0
+1093,0.073,70.0,916,Abominable Winter Ale (2012),American Strong Ale,80,16.0
+1094,0.051,32.0,658,HUB Lager,Czech Pilsener,80,16.0
+1095,0.066,75.0,653,Hopworks IPA (2012),American IPA,80,16.0
+1096,0.055999999999999994,,2385,Watermelon Wheat,American Pale Wheat Ale,120,12.0
+1097,0.051,17.0,2384,Laka Laka Pineapple,Hefeweizen,120,12.0
+1098,0.06,,2383,Oktoberfest,Märzen / Oktoberfest,120,16.0
+1099,0.065,,1251,Trail Maker Pale Ale,American Pale Ale (APA),445,12.0
+1100,0.055,,1250,Action Man Lager,Vienna Lager,445,12.0
+1101,0.068,90.0,1903,Let It Ride IPA,American IPA,277,12.0
+1102,0.065,22.0,1691,Stir Crazy Winter Ale,Winter Warmer,277,12.0
+1103,0.05,10.0,1555,Sweet Yamma Jamma Ale,Fruit / Vegetable Beer,277,12.0
+1104,0.046,27.0,1115,Shenanigans Summer Ale,American Pale Wheat Ale,277,12.0
+1105,0.065,80.0,729,Midnight Ryder,American Black Ale,277,12.0
+1106,0.054000000000000006,45.0,728,Day Tripper Pale Ale,American Pale Ale (APA),277,12.0
+1107,0.048,32.0,2350,Oklahoma Suks,American Amber / Red Ale,140,12.0
+1108,0.055,42.0,2301,Power & Light,American Pale Ale (APA),140,12.0
+1109,0.059000000000000004,27.0,1904,White Rabbit ,Witbier,140,12.0
+1110,0.057999999999999996,58.0,2609,Tribute,American Pale Ale (APA),23,12.0
+1111,0.07,75.0,2038,Infamous IPA,American IPA,242,12.0
+1112,0.055,20.0,1774,Hijack,Cream Ale,242,12.0
+1113,0.045,20.0,559,Jon Boat Coastal Ale,American Blonde Ale,527,12.0
+1114,0.068,55.0,558,I-10 IPA,American IPA,527,12.0
+1115,0.053,28.0,553,People's Pale Ale,American Pale Ale (APA),527,12.0
+1116,0.049,,2376,Summer Ale,American Blonde Ale,123,12.0
+1117,,,1784,Appreciation Ale,American IPA,316,16.0
+1118,0.052000000000000005,18.0,2673,House Lager,Keller Bier / Zwickel Bier,2,16.0
+1119,0.048,15.0,2672,Leisure Time,American Pale Lager,2,12.0
+1120,0.07200000000000001,80.0,2671,Excess IPL,American India Pale Lager,2,16.0
+1121,0.067,65.0,2670,Hoponius Union,American India Pale Lager,2,12.0
+1122,0.049,45.0,2669,Calyptra,American India Pale Lager,2,12.0
+1123,0.05,,1405,Helen's Blend,Cider,416,12.0
+1124,0.051,,823,Jack's Hard Cider,Cider,416,12.0
+1125,0.055,37.0,1793,Thunder Ann,American Pale Ale (APA),312,12.0
+1126,0.055,,2453,Razz Wheat,Fruit / Vegetable Beer,92,12.0
+1127,0.065,,2363,Hop Ryot,American IPA,92,12.0
+1128,0.07,,689,Mystic Mama IPA,American IPA,92,12.0
+1129,0.05,,688,Firefly Amber Ale,American Amber / Red Ale,92,12.0
+1130,0.067,,687,Chomolungma Honey Nut Brown Ale,English Brown Ale,92,12.0
+1131,0.069,,2408,Welcome to Scoville,American IPA,114,12.0
+1132,,,2595,Bastian,American Strong Ale,32,12.0
+1133,0.045,,2480,Healani,Hefeweizen,32,12.0
+1134,0.055,,1525,Yabba Dhaba Chai Tea Porter,American Porter,32,12.0
+1135,0.055,,1524,A Capella Gluten Free Pale Ale,American Pale Ale (APA),32,12.0
+1136,0.06,,1523,Casper White Stout,American Blonde Ale,32,12.0
+1137,0.06,,1254,JP's Ould Sod Irish Red IPA,American IPA,32,12.0
+1138,0.05,15.0,2060,Weize Guy,Hefeweizen,233,12.0
+1139,0.05,50.0,469,Fox Tail Gluten Free Ale,American Pale Ale (APA),233,12.0
+1140,0.09300000000000001,90.0,468,Hop Box Imperial IPA,American Double / Imperial IPA,233,12.0
+1141,0.052000000000000005,15.0,467,Joseph James American Lager,American Adjunct Lager,233,12.0
+1142,0.071,,2163,Sucha Much IPA,American IPA,208,12.0
+1143,0.075,24.0,2162,Lewbricator Wheat Dopplebock ,Doppelbock,208,12.0
+1144,0.052000000000000005,16.0,2374,Weisse Versa (2012),Hefeweizen,125,12.0
+1145,0.057999999999999996,25.0,1560,Mother in Lager,Munich Dunkel Lager,125,12.0
+1146,0.055,40.0,1557,Weekend Warrior Pale Ale,American Pale Ale (APA),125,12.0
+1147,0.055,25.0,1458,Karbachtoberfest,Märzen / Oktoberfest,125,12.0
+1148,0.047,20.0,1235,Love Street Summer Seasonal (2014),Kölsch,125,12.0
+1149,0.066,20.0,1068,Barn Burner Saison,Saison / Farmhouse Ale,125,12.0
+1150,0.095,85.0,666,Rodeo Clown Double IPA,American Double / Imperial IPA,125,12.0
+1151,0.049,45.0,465,Sympathy for the Lager,American Amber / Red Lager,125,12.0
+1152,0.052000000000000005,15.0,464,Weisse Versa,Hefeweizen,125,12.0
+1153,0.066,70.0,463,Hopadillo India Pale Ale,American IPA,125,12.0
+1154,0.057,19.0,1678,KelSo Nut Brown Lager,Euro Dark Lager,342,12.0
+1155,0.06,64.0,1572,KelSo India Pale Ale,American IPA,342,12.0
+1156,0.055,23.0,1348,KelSo Pilsner,Czech Pilsener,342,12.0
+1157,0.057999999999999996,,1193,Skilak Scottish Ale,Scottish Ale,458,12.0
+1158,0.05,15.0,1187,Peninsula Brewers Reserve (PBR),American Blonde Ale,458,12.0
+1159,0.068,,349,Sunken Island IPA,American IPA,458,12.0
+1160,0.057999999999999996,,348,Skilak Scottish Ale (2011),Scottish Ale,458,12.0
+1161,0.065,11.0,760,Cold Smoke Scotch Ale (2007),Scotch Ale / Wee Heavy,510,16.0
+1162,0.065,65.0,759,Double Haul IPA (2009),American IPA,510,16.0
+1163,0.065,65.0,758,Double Haul IPA (2006),American IPA,510,16.0
+1164,0.055,50.0,87,Eddy Out Pale Ale,American Pale Ale (APA),510,16.0
+1165,0.065,65.0,86,Double Haul IPA,American IPA,510,16.0
+1166,0.065,11.0,85,Cold Smoke Scotch Ale,Scotch Ale / Wee Heavy,510,16.0
+1167,,,2472,U. P. Witbier,Witbier,84,12.0
+1168,,,779,November Gale Pale Ale,American Pale Ale (APA),84,12.0
+1169,,,364,Olde Ore Dock Scottish Ale,Scottish Ale,84,12.0
+1170,,,60,Widow Maker Black Ale,American Brown Ale,84,12.0
+1171,,,59,Lift Bridge Brown Ale,American Brown Ale,84,12.0
+1172,,,58,Pick Axe Blonde Ale,American Blonde Ale,84,12.0
+1173,,,57,Red Jacket Amber Ale,American Amber / Red Ale,84,12.0
+1174,0.051,,2436,Amber Ale,American Amber / Red Ale,102,12.0
+1175,0.055,,1706,King Street Pilsner,Czech Pilsener,102,12.0
+1176,0.06,70.0,1667,King Street IPA,American IPA,102,12.0
+1177,0.057,10.0,1666,King Street Hefeweizen,Hefeweizen,102,12.0
+1178,0.049,,1665,King Street Blonde Ale,American Blonde Ale,102,12.0
+1179,0.063,65.0,2460,India Pale Ale,American IPA,87,16.0
+1180,0.048,11.0,2459,Blackberry Wheat,American Pale Wheat Ale,87,16.0
+1181,0.046,18.0,1274,Longboard Island Lager,American Amber / Red Lager,439,24.0
+1182,0.046,18.0,1220,Longboard Island Lager,American Amber / Red Lager,439,16.0
+1183,0.046,18.0,1070,Longboard Island Lager,American Amber / Red Lager,439,12.0
+1184,0.046,18.0,590,Longboard Island Lager,American Amber / Red Lager,439,12.0
+1185,0.04,9.0,781,Choc Beer (2003),American Dark Wheat Ale,505,12.0
+1186,0.08,,1637,Bellingham Beer Week 2013 Collaboration,Belgian Strong Dark Ale,354,16.0
+1187,0.054000000000000006,15.0,1741,A Slice of Hefen,Hefeweizen,332,16.0
+1188,0.07200000000000001,100.0,664,Elevated IPA,American IPA,332,16.0
+1189,0.066,30.0,392,Rumspringa Golden Bock,Maibock / Helles Bock,545,12.0
+1190,0.048,28.0,195,Lancaster German Style Kölsch,Kölsch,545,12.0
+1191,0.045,,2547,Beach Cruiser,Hefeweizen,59,12.0
+1192,0.068,,2493,I.P. Eh!,American IPA,59,12.0
+1193,0.05,,2492,Schoolhouse Honey,American Amber / Red Ale,59,12.0
+1194,0.055,,2491,10 Degrees of Separation,English Brown Ale,59,12.0
+1195,0.05,12.0,2108,Laughing Dog Cream Ale,Cream Ale,218,12.0
+1196,0.048,9.0,1397,Two-One Niner,American Pilsner,218,12.0
+1197,0.064,66.0,1396,Laughing Dog IPA,American IPA,218,12.0
+1198,0.064,95.0,1675,Madra Allta,American IPA,345,12.0
+1199,0.055999999999999994,70.0,1249,Duluchan India Pale Ale,American IPA,345,12.0
+1200,0.05,,1445,Lazy Monk Bohemian Pilsner,Czech Pilsener,406,16.0
+1201,0.051,,475,Yellowstone Golden Ale,Kölsch,537,12.0
+1202,0.057,,474,Tumbleweed IPA,American IPA,537,12.0
+1203,0.05,,473,Lewis & Clark Amber Ale,American Amber / Red Ale,537,12.0
+1204,0.05,,472,Miner's Gold Hefeweizen,Hefeweizen,537,12.0
+1205,0.057,,471,Back Country Scottish Ale,Scottish Ale,537,12.0
+1206,0.052000000000000005,30.0,2036,Getaway,German Pilsener,244,16.0
+1207,0.06,30.0,1168,Farm Girl Saison,Saison / Farmhouse Ale,244,16.0
+1208,0.057999999999999996,40.0,1832,Adam's Stout,American Stout,298,12.0
+1209,0.057,42.0,1688,American Hero,American Amber / Red Ale,298,12.0
+1210,0.052000000000000005,20.0,1687,Schweet Ale,Fruit / Vegetable Beer,298,12.0
+1211,0.065,75.0,1686,Irregardless IPA,American IPA,298,12.0
+1212,0.057,40.0,2434,Peach Pale Ale,American Pale Ale (APA),104,12.0
+1213,0.06,,2332,Deadeye Jack,American Porter,149,12.0
+1214,0.075,,2330,Pistols at Dawn,American Stout,149,16.0
+1215,0.057,47.0,2329,Peacemaker Pale Ale,American Pale Ale (APA),149,12.0
+1216,0.057999999999999996,11.0,2327,Shotgun Betty,Hefeweizen,149,12.0
+1217,0.061,30.0,2326,Sweet Josie,American Brown Ale,149,12.0
+1218,0.059000000000000004,42.0,1926,Long Trail IPA,English India Pale Ale (IPA),268,12.0
+1219,0.046,30.0,1924,Long Trail Ale,American Amber / Red Ale,268,12.0
+1220,0.07200000000000001,33.0,1090,Double Bag,Altbier,268,16.0
+1221,0.04,8.0,574,Blackbeary Wheat,Fruit / Vegetable Beer,268,12.0
+1222,0.046,30.0,573,Long Trail Ale (1),Altbier,268,12.0
+1223,0.046,8.0,2584,Gose,Gose,41,16.0
+1224,0.048,20.0,2583,Vermont Pilsner,German Pilsener,41,16.0
+1225,0.055,,2582,Mosaic Single Hop IPA,American IPA,41,16.0
+1226,0.045,,2581,Lost Galaxy,American IPA,41,16.0
+1227,0.062,65.0,1309,Face Plant IPA,American IPA,430,12.0
+1228,0.055999999999999994,55.0,1308,Rhino Chasers Pilsner,Czech Pilsener,430,12.0
+1229,0.052000000000000005,29.0,1571,Slow Hand Stout,American Stout,377,16.0
+1230,0.062,,1204,Hips Don't Lie,Hefeweizen,456,16.0
+1231,0.052000000000000005,,1122,Ride Again Pale Ale,American Pale Ale (APA),456,16.0
+1232,0.048,,700,The Farmer's Daughter,American Blonde Ale,456,16.0
+1233,0.038,18.0,2033,Pub Ale,English Dark Mild Ale,245,12.0
+1234,0.051,31.0,2032,Ballistic Blonde,Belgian Pale Ale,245,12.0
+1235,0.054000000000000006,,2311,Knotty Pine,American Pale Ale (APA),158,12.0
+1236,0.053,20.0,1153,Lumberyard Pilsner,American Pilsner,158,12.0
+1237,0.061,,355,Lumberyard IPA,American IPA,158,12.0
+1238,0.057999999999999996,,125,Lumberyard Red Ale,American Amber / Red Ale,158,12.0
+1239,0.05,,962,Mac's Highlander Pale Ale (2000),American Pale Ale (APA),485,12.0
+1240,0.051,32.0,961,Mac's Scottish Style Amber Ale (2000),American Amber / Red Ale,485,12.0
+1241,0.05,,1475,Macon Progress Ale,American Pale Ale (APA),400,12.0
+1242,0.055,,1008,Macon History Ale,American Brown Ale,400,12.0
+1243,0.099,,2454,Galaxy High,American Double / Imperial IPA,91,12.0
+1244,0.043,18.0,2209,Sol Drifter,American Blonde Ale,91,12.0
+1245,0.085,,2133,Thunder Snow,Winter Warmer,91,12.0
+1246,0.079,18.0,1994,The Great Pumpcan,Fruit / Vegetable Beer,91,16.0
+1247,0.047,11.0,1816,LIFT,Kölsch,91,12.0
+1248,0.05,40.0,1815,SPRYE,American Pale Ale (APA),91,12.0
+1249,0.069,70.0,1126,Psychopathy,American IPA,91,12.0
+1250,0.07,32.0,1125,Gnarly Brown,American Brown Ale,91,12.0
+1251,0.06,30.0,1124,Happy Amber,American Amber / Red Ale,91,12.0
+1252,0.051,20.0,1813,#9,Fruit / Vegetable Beer,303,16.0
+1253,0.055,13.0,1113,Elder Betty,Hefeweizen,303,12.0
+1254,0.051,20.0,360,#9,Fruit / Vegetable Beer,303,12.0
+1255,0.042,,511,High Country Pilsner (Current),German Pilsener,534,12.0
+1256,0.065,,75,Epic IPA,American IPA,534,12.0
+1257,0.042,,74,Golden Trout Pilsner,German Pilsener,534,12.0
+1258,0.045,,73,Real McCoy Amber Ale (Current),American Amber / Red Ale,534,12.0
+1259,0.07200000000000001,,1628,Festivus (1),Winter Warmer,356,12.0
+1260,0.067,,1626,Manayunk Oktoberfest,Märzen / Oktoberfest,356,12.0
+1261,0.045,21.0,1625,Belgian Style Session Ale,Belgian Pale Ale,356,12.0
+1262,0.055,,1624,Manayunk IPA,American IPA,356,12.0
+1263,0.055,,1600,Yunkin' Punkin',Pumpkin Ale,356,12.0
+1264,0.05,18.0,1484,Summer Paradise,American Pale Wheat Ale,356,12.0
+1265,0.09,30.0,1356,Monk from the 'Yunk,Tripel,356,12.0
+1266,0.06,14.0,1355,Schuylkill Punch,Fruit / Vegetable Beer,356,12.0
+1267,0.085,85.0,1334,Dreamin' Double IPA,American Double / Imperial IPA,356,12.0
+1268,0.099,93.0,1674,Chaotic Double IPA,American Double / Imperial IPA,346,12.0
+1269,0.08,88.0,1673,Manzanita IPA,American IPA,346,12.0
+1270,0.06,25.0,1672,Riverwalk Blonde Ale,American Blonde Ale,346,12.0
+1271,0.095,49.0,1671,Gillespie Brown Ale,American Brown Ale,346,12.0
+1272,0.066,44.0,1670,Manzanita Pale Ale,American Pale Ale (APA),346,12.0
+1273,0.047,,1262,Marble Pilsner,German Pilsener,443,12.0
+1274,0.062,,845,Marble India Pale Ale,American IPA,443,12.0
+1275,0.07200000000000001,,1783,Toughcats IPA,American IPA,317,16.0
+1276,0.05,,1717,Tug Pale Ale,American Pale Ale (APA),317,16.0
+1277,0.099,,1716,Sexy Chaos,Russian Imperial Stout,317,16.0
+1278,0.063,,1516,Ace Hole American Pale Ale,American Pale Ale (APA),317,16.0
+1279,0.09699999999999999,,725,Cant Dog Imperial Pale Ale,American Double / Imperial IPA,317,16.0
+1280,0.05,20.0,2308,River House,Saison / Farmhouse Ale,161,16.0
+1281,0.065,47.0,2268,Pretzel Stout,American Stout,161,16.0
+1282,0.05,35.0,2197,Rubberneck Red,American Amber / Red Ale,161,16.0
+1283,0.08,,2120,The Imperial Texan,American Double / Imperial IPA,161,16.0
+1284,0.08,,1234,The Imperial Texan,American Double / Imperial IPA,161,12.0
+1285,0.05,,1233,Day Break 4-Grain Breakfast Beer,Rye Beer,161,16.0
+1286,0.05,,1232,River House Saison,Saison / Farmhouse Ale,161,12.0
+1287,0.065,,1231,There Will Be Stout,American Stout,161,12.0
+1288,0.065,60.0,1831,Our Legacy IPA,American IPA,299,12.0
+1289,0.042,,1359,Saranac Shandy,Shandy,299,12.0
+1290,0.065,60.0,1135,Our Legacy IPA,American IPA,299,16.0
+1291,0.051,,960,Saranac Golden Pilsener (2003),German Pilsener,299,12.0
+1292,0.045,,959,Saranac Adirondack Light (2002),Light Lager,299,12.0
+1293,0.045,,958,DAX Light (1998),Light Lager,299,12.0
+1294,0.048,,957,Saranac Traditional Lager (2000),American Pale Lager,299,12.0
+1295,0.047,,956,Pomegranate Wheat (2008),Fruit / Vegetable Beer,299,12.0
+1296,0.05,12.0,773,Blueberry Blonde Ale,American Blonde Ale,299,12.0
+1297,0.06,,686,Saranac White IPA,American IPA,299,12.0
+1298,0.047,,453,Saranac Summer Ale (2011),American Pale Wheat Ale,299,12.0
+1299,0.055,,150,Saranac Pale Ale (12 oz.),English Pale Ale,299,12.0
+1300,0.055,,133,Saranac Pale Ale (16 oz.),English Pale Ale,299,16.0
+1301,0.051,20.0,1578,Lahaina Town Brown,American Brown Ale,375,12.0
+1302,0.055,,1429,Pau Hana Pilsner,Czech Pilsener,375,12.0
+1303,0.05,,1271,Lemongrass Saison,Saison / Farmhouse Ale,375,12.0
+1304,0.07,,713,Aloha B’ak’tun,Belgian Strong Dark Ale,375,12.0
+1305,0.08199999999999999,,712,Liquid Breadfruit,Fruit / Vegetable Beer,375,12.0
+1306,0.06,24.0,690,Sobrehumano Palena'ole,American Amber / Red Ale,375,12.0
+1307,0.05,12.0,547,La Perouse White,Witbier,375,12.0
+1308,0.068,68.0,435,Flyin' HI.P.Hay,American IPA,375,12.0
+1309,0.055,15.0,313,Mana Wheat,American Pale Wheat Ale,375,12.0
+1310,0.045,18.0,33,Bikini Blonde Lager,Munich Helles Lager,375,12.0
+1311,0.057,30.0,32,CoCoNut Porter,American Porter,375,12.0
+1312,0.062,65.0,31,Big Swell IPA,American IPA,375,12.0
+1313,0.037000000000000005,34.0,1237,Pit Stop Chocolate Porter,American Porter,448,12.0
+1314,0.037000000000000005,21.0,1236,Pace Setter Belgian Style Wit,Witbier,448,12.0
+1315,0.037000000000000005,53.0,1047,Back in the Saddle Rye Pale Ale,American Pale Ale (APA),448,12.0
+1316,0.069,,1986,Bushwhacker Cider,Cider,254,16.0
+1317,0.069,,1985,Weim-R-Iner,Cider,254,16.0
+1318,0.069,,1984,Cherry Bomb,Cider,254,16.0
+1319,0.07200000000000001,75.0,2186,Tsunami IPA,American IPA,203,19.2
+1320,0.07200000000000001,75.0,2185,Tsunami IPA,American IPA,203,12.0
+1321,0.042,22.0,2184,Humpback Blonde Ale,American Blonde Ale,203,12.0
+1322,0.052000000000000005,27.0,2178,Hawaiian Crow Porter,American Porter,203,12.0
+1323,0.052000000000000005,23.0,2177,Volcano Red Ale,American Amber / Red Ale,203,12.0
+1324,0.054000000000000006,42.0,2176,Mauna Kea Pale Ale,American Pale Ale (APA),203,12.0
+1325,0.053,11.0,1508,Shark Bait,Fruit / Vegetable Beer,393,12.0
+1326,0.053,30.0,1507,Gator Tail Brown Ale,American Brown Ale,393,12.0
+1327,0.071,62.0,1506,Miami Vice IPA,American IPA,393,12.0
+1328,0.053,16.0,1325,Big Rod Coconut Ale,American Blonde Ale,393,12.0
+1329,0.055999999999999994,,174,Mickey Finn's Amber Ale,American Amber / Red Ale,552,12.0
+1330,0.063,61.0,2093,Pleasure Town,American IPA,223,12.0
+1331,0.063,61.0,1814,Pleasure Town IPA,American IPA,223,12.0
+1332,0.048,12.0,587,Snowshoe White Ale,Witbier,223,12.0
+1333,0.05,24.0,586,Kodiak Brown Ale,American Brown Ale,223,12.0
+1334,0.057,70.0,434,Sockeye Red IPA,American IPA,223,12.0
+1335,0.08,100.0,2668,Habitus (2014),American Double / Imperial IPA,3,16.0
+1336,0.075,85.0,2667,Solis,American IPA,3,16.0
+1337,0.06,24.0,2666,Jucundus,Wheat Ale,3,16.0
+1338,0.08,100.0,2664,Habitus,American Double / Imperial IPA,3,16.0
+1339,0.063,30.0,2663,Grazias,Cream Ale,3,16.0
+1340,0.057999999999999996,28.0,2662,Claritas,Kölsch,3,16.0
+1341,0.083,,2535,Vinyl Frontier,American Double / Imperial IPA,65,24.0
+1342,0.08,,2534,Disco Superfly,American IPA,65,24.0
+1343,0.075,,2533,Misty Mountain Hop,American IPA,65,24.0
+1344,0.075,,2532,One-Hit Wonderful,Belgian IPA,65,24.0
+1345,0.065,,2531,En Parfaite Harmonie,Saison / Farmhouse Ale,65,24.0
+1346,0.043,8.0,2530,Daft Funk,Berliner Weissbier,65,24.0
+1347,0.075,,2529,Love In An Ellavator,American IPA,65,24.0
+1348,0.053,,2528,Spin Doctor,American Pale Ale (APA),65,24.0
+1349,0.05,,1612,Keeper (Current),American Pilsner,363,12.0
+1350,0.068,,1611,Better Half,American IPA,363,12.0
+1351,0.048,,1273,SNO White Ale,Witbier,440,16.0
+1352,0.048,,365,BRIK Irish Red Ale,Irish Red Ale,440,16.0
+1353,,,273,AXL Pale Ale,American Pale Ale (APA),440,16.0
+1354,0.087,80.0,1884,Hop Freak,American Double / Imperial IPA,284,16.0
+1355,0.051,24.0,1272,Louie's Demise Amber Ale,American Amber / Red Ale,284,16.0
+1356,0.075,51.0,1080,Hop Happy,American IPA,284,16.0
+1357,0.065,20.0,932,Booyah Farmhouse Ale,Saison / Farmhouse Ale,284,16.0
+1358,0.092,,776,O-Gii,Witbier,284,16.0
+1359,0.048,18.0,172,Flaming Damsel Lager (2010),Vienna Lager,284,16.0
+1360,0.051,24.0,171,Louie’s Demise Immort-Ale (2010),American Amber / Red Ale,284,16.0
+1361,0.099,,2361,Axe Head Malt Liquor,American Malt Liquor,134,24.0
+1362,0.054000000000000006,,2359,Huber Bock (2014),Bock,134,16.0
+1363,0.04,,2358,Minhas Light (2012),Light Lager,134,12.0
+1364,0.05,,2282,Huber,American Pale Lager,134,12.0
+1365,0.062,,2281,Clear Creek Ice,American Pale Lager,134,16.0
+1366,0.062,,2280,Clear Creek Ice,American Pale Lager,134,12.0
+1367,0.055,,2279,Mountain Crest,American Pale Lager,134,16.0
+1368,0.055,,2278,Mountain Crest,American Pale Lager,134,12.0
+1369,0.055,,2277,Mountain Creek (2013),American Pale Lager,134,12.0
+1370,0.05,,2276,Boxer,American Adjunct Lager,134,24.0
+1371,0.042,,2275,Boxer Light,Light Lager,134,12.0
+1372,0.055,,2274,Boxer Ice,American Adjunct Lager,134,12.0
+1373,0.05,,2273,Boxer,American Adjunct Lager,134,12.0
+1374,0.05,,2442,Cortez Gold,Belgian Pale Ale,98,32.0
+1375,0.068,66.0,2441,Mission IPA,American IPA,98,32.0
+1376,0.048,44.0,1460,El Conquistador Extra Pale Ale,American Pale Ale (APA),98,32.0
+1377,0.092,75.0,1459,Shipwrecked Double IPA,American Double / Imperial IPA,98,32.0
+1378,0.04,,1476,Squeaky Bike Nut Brown Ale,American Brown Ale,399,16.0
+1379,0.04,,902,Dead Horse Amber,American Pale Wheat Ale,399,16.0
+1380,0.04,,645,Rocket Bike American Lager,California Common / Steam Beer,399,16.0
+1381,0.04,,644,Johnny's American IPA,American IPA,399,16.0
+1382,0.055,,337,Boneshaker Brown Ale,English Brown Ale,547,24.0
+1383,0.055999999999999994,,336,Iron Mike Pale Ale,American Pale Ale (APA),547,24.0
+1384,0.042,,2236,Monkadelic,American Pale Ale (APA),189,12.0
+1385,0.075,85.0,2159,City of the Sun,American IPA,209,16.0
+1386,0.068,75.0,2157,Booming Rollers,American IPA,209,16.0
+1387,0.052000000000000005,50.0,2156,Oneida,American Pale Ale (APA),209,16.0
+1388,0.067,75.0,2154,Aurora ,American Amber / Red Ale,209,16.0
+1389,0.055,30.0,1495,Lomaland,Saison / Farmhouse Ale,209,16.0
+1390,0.047,46.0,1494,Fortunate Islands,American Pale Wheat Ale,209,16.0
+1391,0.057999999999999996,40.0,1493,Black House,American Stout,209,16.0
+1392,0.065,115.0,1492,Blazing World,American Amber / Red Ale,209,16.0
+1393,0.05,,327,Wapiti Amber Ale,American Amber / Red Ale,549,12.0
+1394,0.054000000000000006,,719,Sweet Georgia Brown,American Brown Ale,514,16.0
+1395,0.087,,718,Rich Man's IIPA,American Double / Imperial IPA,514,16.0
+1396,0.057999999999999996,,717,Monkey Paw Oatmeal Pale Ale,American Pale Ale (APA),514,16.0
+1397,0.055999999999999994,28.0,1907,Montauk Summer Ale,American Blonde Ale,276,12.0
+1398,0.06,49.0,1906,Driftwood Ale,Extra Special / Strong Bitter (ESB),276,12.0
+1399,0.055999999999999994,18.0,1756,When Helles Freezes Over,Munich Helles Lager,326,12.0
+1400,0.049,24.0,1617,Morgan Street Oktoberfest,Märzen / Oktoberfest,326,12.0
+1401,0.047,14.0,1052,Honey Wheat,American Pale Wheat Ale,326,12.0
+1402,0.046,24.0,1051,Black Bear Dark Lager,Schwarzbier,326,12.0
+1403,0.05,35.0,1046,Golden Pilsner,German Pilsener,326,12.0
+1404,0.052000000000000005,21.0,2413,Cali Creamin',Cream Ale,111,12.0
+1405,0.05,,419,Second Wind Pale Ale,American Pale Ale (APA),540,12.0
+1406,0.05,,408,Sunny Haze,Hefeweizen,540,12.0
+1407,0.052000000000000005,21.0,2237,Towhead,American Blonde Ale,188,12.0
+1408,0.07,70.0,2208,Lil' Helper,American IPA,188,12.0
+1409,0.08199999999999999,,1952,Train Wreck,American Amber / Red Ale,260,16.0
+1410,0.085,,768,Full Moon Belgian White Ale,Witbier,507,12.0
+1411,0.07200000000000001,,625,Desert Magic IPA,American IPA,507,12.0
+1412,0.042,,326,Up River Light,Light Lager,507,12.0
+1413,0.085,,132,Full Moon Belgian White Ale (2007),Witbier,507,12.0
+1414,0.055,,131,Dry Heat Hefeweizen (2006),Hefeweizen,507,12.0
+1415,0.05,,1598,Mustang Sixty-Six,American Amber / Red Lager,366,12.0
+1416,0.04,,862,Mustang '33,American Pale Lager,366,12.0
+1417,0.04,,699,Session '33 (2011),American Pale Lager,366,12.0
+1418,0.053,10.0,421,Mustang Golden Ale,American Blonde Ale,366,12.0
+1419,0.053,14.0,420,Washita Wheat,American Pale Wheat Ale,366,12.0
+1420,0.037000000000000005,10.0,2345,Gansett Light,Light Lager,143,16.0
+1421,0.052000000000000005,30.0,2224,Bohemian Pils,American Pilsner,143,16.0
+1422,0.053,30.0,1775,Autocrat Coffee Milk Stout,Milk / Sweet Stout,143,16.0
+1423,0.086,35.0,1291,Narragansett Bohemian Pilsner,German Pilsener,143,16.0
+1424,0.042,24.0,1093,Narragansett Summer Ale,American Pale Wheat Ale,143,12.0
+1425,0.05,22.0,580,Narragansett Cream Ale,Cream Ale,143,16.0
+1426,0.042,24.0,403,Narragansett Summer Ale,American Pale Wheat Ale,143,16.0
+1427,0.07,22.0,316,Narragansett Porter,American Porter,143,16.0
+1428,0.065,32.0,315,Narragansett Bock,Bock,143,16.0
+1429,0.055,15.0,314,Narragansett Fest Lager,Märzen / Oktoberfest,143,16.0
+1430,0.053,,1537,Undun Blonde Ale,American Blonde Ale,387,16.0
+1431,0.07400000000000001,,1536,CuDa Cascadian Dark Ale,American Black Ale,387,16.0
+1432,0.085,86.0,1265,Old Grogham Imperial India Pale Ale,American Double / Imperial IPA,387,16.0
+1433,0.085,86.0,747,Old Grogham Imperial India Pale Ale (2012),American Double / Imperial IPA,387,16.0
+1434,0.07400000000000001,,746,CuDa Cascadian Dark Ale (2012),American Black Ale,387,16.0
+1435,0.053,,654,Undun Blonde Ale (2012),American Blonde Ale,387,16.0
+1436,0.061,11.0,1705,Wick For Brains,Pumpkin Ale,337,12.0
+1437,0.065,65.0,1148,Nebraska India Pale Ale,American IPA,337,12.0
+1438,0.048,10.0,1147,EOS Hefeweizen,Hefeweizen,337,12.0
+1439,0.048,15.0,1146,Brunette Nut Brown Ale,English Brown Ale,337,12.0
+1440,0.057,29.0,1145,Cardinal Pale Ale,American Pale Ale (APA),337,12.0
+1441,0.066,,1758,County Line IPA,American IPA,325,12.0
+1442,0.048,,1757,Trauger Pilsner,German Pilsener,325,12.0
+1443,0.045,40.0,2475,Slow Ride,American IPA,82,12.0
+1444,0.065,70.0,2230,Ranger IPA,American IPA,82,12.0
+1445,0.05,29.0,1987,Shift,American Pale Lager,82,12.0
+1446,0.055999999999999994,21.0,1978,1554 Black Lager,Euro Dark Lager,82,12.0
+1447,0.048,,1975,Blue Paddle,Czech Pilsener,82,12.0
+1448,0.055,,1737,California Route,American Amber / Red Lager,82,12.0
+1449,0.052000000000000005,,1707,Snapshot,American Pale Wheat Ale,82,16.0
+1450,0.048,,1690,Sunshine Wheat Beer,American Pale Wheat Ale,82,12.0
+1451,0.052000000000000005,18.0,1586,Fat Tire Amber Ale,American Amber / Red Ale,82,12.0
+1452,0.05,29.0,952,Shift (1),American Pale Lager,82,12.0
+1453,0.052000000000000005,18.0,748,Fat Tire Amber Ale (2011),American Amber / Red Ale,82,12.0
+1454,0.05,29.0,578,Shift,American Pale Lager,82,16.0
+1455,0.065,70.0,564,Ranger IPA,American IPA,82,16.0
+1456,0.052000000000000005,18.0,563,Fat Tire Amber Ale,American Amber / Red Ale,82,16.0
+1457,0.065,70.0,115,Ranger IPA (Current),American IPA,82,12.0
+1458,0.048,,72,Sunshine Wheat Beer (2009),American Pale Wheat Ale,82,12.0
+1459,0.052000000000000005,18.0,71,Fat Tire Amber Ale (2008),American Amber / Red Ale,82,12.0
+1460,0.034,6.0,1417,Weiss Trash Culture,Berliner Weissbier,410,12.0
+1461,0.062,,885,Sea Hag IPA,American IPA,410,12.0
+1462,0.05,,884,Elm City Pilsner,American Pilsner,410,12.0
+1463,0.05,,757,Atlantic Amber Ale (2004),American Amber / Red Ale,410,12.0
+1464,0.09,,568,668 Neighbor of the Beast12 oz.,Belgian Pale Ale,410,12.0
+1465,0.08800000000000001,85.0,320,Gandhi-Bot Double IPA (12 oz.),American Double / Imperial IPA,410,12.0
+1466,0.09,,43,668 Neighbor of the Beast (16 oz.) (2010),Belgian Pale Ale,410,16.0
+1467,0.08800000000000001,85.0,42,Gandhi-Bot Double IPA (16 oz.) (2010),American Double / Imperial IPA,410,16.0
+1468,0.05,,41,Elm City Lager (2007),American Pilsner,410,12.0
+1469,0.05,,40,Atlantic Amber Ale (2007),American Amber / Red Ale,410,12.0
+1470,0.062,,39,Sea Hag IPA (Current),American IPA,410,12.0
+1471,0.05,,2272,Rebirth Pale Ale,American Pale Ale (APA),174,12.0
+1472,0.068,,1582,Irish Channel Stout,American Stout,174,16.0
+1473,0.08800000000000001,,1114,MechaHopzilla,American Double / Imperial IPA,174,16.0
+1474,0.065,,486,Hopitoulas IPA,American IPA,174,16.0
+1475,0.039,,485,NOLA Brown Ale,English Dark Mild Ale,174,12.0
+1476,0.049,,484,NOLA Blonde Ale,American Blonde Ale,174,12.0
+1477,0.055999999999999994,20.0,2043,Skylight,Dunkelweizen,241,12.0
+1478,0.055999999999999994,30.0,2042,Kadigan,American Blonde Ale,241,12.0
+1479,0.052000000000000005,50.0,2041,Dammit Jim!,American Amber / Red Ale,241,12.0
+1480,0.054000000000000006,,646,Nut Brown Ale,English Brown Ale,518,12.0
+1481,0.046,,165,White Ale,Witbier,518,12.0
+1482,0.042,35.0,2050,Cream Ale,Cream Ale,238,12.0
+1483,0.07200000000000001,,915,Green Head IPA,American IPA,495,12.0
+1484,0.054000000000000006,,914,Plum Island Belgian White,Witbier,495,12.0
+1485,0.055,,913,Newburyport Pale Ale,American Pale Ale (APA),495,12.0
+1486,0.055,,1811,Marblehead,American Amber / Red Ale,305,16.0
+1487,0.051,31.0,1622,Jam Session,American Pale Ale (APA),359,16.0
+1488,0.07200000000000001,80.0,1621,Hop Drop 'N Roll IPA,American IPA,359,16.0
+1489,0.06,,1307,Paleo IPA,English India Pale Ale (IPA),431,12.0
+1490,0.061,,1306,Buck Snort Stout,American Stout,431,12.0
+1491,0.055,,1305,Station 33 Firehouse Red,Irish Red Ale,431,12.0
+1492,0.045,,1304,Slimy Pebble Pils,German Pilsener,431,12.0
+1493,0.045,50.0,2692,Get Together,American IPA,0,16.0
+1494,0.049,26.0,2691,Maggie's Leap,Milk / Sweet Stout,0,16.0
+1495,0.048,19.0,2690,Wall's End,English Brown Ale,0,16.0
+1496,0.06,38.0,2689,Pumpion,Pumpkin Ale,0,16.0
+1497,0.06,25.0,2688,Stronghold,American Porter,0,16.0
+1498,0.055999999999999994,47.0,2687,Parapet ESB,Extra Special / Strong Bitter (ESB),0,16.0
+1499,0.069,,1854,Blue Boots IPA,American IPA,293,16.0
+1500,0.063,,1227,Hoppy Bitch IPA,American IPA,450,16.0
+1501,0.063,42.0,1226,Three Skulls Ale Pale Ale,American Pale Ale (APA),450,16.0
+1502,0.045,,541,Walter's Premium Pilsener Beer,German Pilsener,529,12.0
+1503,0.045,,109,Floppin' Crappie,American Pale Wheat Ale,529,12.0
+1504,0.043,,1917,Left of the Dial IPA,American IPA,271,12.0
+1505,0.04,,1190,Notch Session Pils,Czech Pilsener,271,12.0
+1506,0.055,,1264,O'Fallon Pumpkin Beer,Pumpkin Ale,442,12.0
+1507,0.061,66.0,1258,5 Day IPA,American IPA,442,12.0
+1508,0.051,7.0,128,O'Fallon Wheach,Fruit / Vegetable Beer,442,12.0
+1509,0.067,70.0,2331,Watershed IPA,American IPA,150,12.0
+1510,0.054000000000000006,24.0,1669,Oakshire Amber Ale,American Amber / Red Ale,150,12.0
+1511,0.057999999999999996,27.0,1668,Overcast Espresso Stout,American Stout,150,12.0
+1512,0.067,70.0,999,Watershed IPA (2013),American IPA,150,12.0
+1513,0.08199999999999999,25.0,2247,Lake Monster,Baltic Porter,184,16.0
+1514,0.049,27.0,2071,London Homesick Ale,English Bitter,184,12.0
+1515,0.048,35.0,2070,Luchesa Lager,Keller Bier / Zwickel Bier,184,12.0
+1516,0.048,35.0,2069,Slow Ride,American Pale Ale (APA),184,12.0
+1517,0.047,,2192,Occidental Hefeweizen,American Pale Wheat Ale,200,16.0
+1518,0.051,,1130,Occidental Dunkel,Dunkelweizen,200,16.0
+1519,0.05,,1129,Occidental Altbier,Altbier,200,16.0
+1520,0.045,,1081,Occidental Kölsch,Kölsch,200,16.0
+1521,0.092,72.0,2335,Perpetual Darkness,Belgian Strong Dark Ale,148,12.0
+1522,0.087,29.0,2334,Clan Warrior,Scotch Ale / Wee Heavy,148,12.0
+1523,0.054000000000000006,36.0,2333,Psycho Penguin Vanilla Porter,American Porter,148,12.0
+1524,0.047,,1721,Heliocentric Hefeweizen,Hefeweizen,148,12.0
+1525,0.051,,1720,Ghose Drifter Pale Ale,American Pale Ale (APA),148,12.0
+1526,0.051,,1431,Ghost Rider Pale Ale (2013),American Pale Ale (APA),148,12.0
+1527,0.047,,1430,Helios Hefeweizen (2013),Hefeweizen,148,12.0
+1528,0.095,19.0,1059,The Hole in Hadrian's Wall,Scottish Ale,471,16.0
+1529,0.065,26.0,1058,33 Select Brown Ale,American Brown Ale,471,16.0
+1530,0.06,29.0,603,Midwest Charm Farmhouse Ale,Saison / Farmhouse Ale,471,16.0
+1531,0.05,45.0,602,Boji Blue Pale Ale,American Pale Ale (APA),471,16.0
+1532,0.057,26.0,601,Winter Games Select #32 Stout,American Stout,471,16.0
+1533,0.05,23.0,600,Boji Beach Golden Rye Ale,Rye Beer,471,16.0
+1534,0.06,,1828,Hopsmith Pale Lager,American Pale Lager,301,16.0
+1535,0.065,65.0,1487,Falling Down Brown Ale,American Brown Ale,301,16.0
+1536,0.068,,1486,Resolution Rye Stout,American Stout,301,16.0
+1537,0.055,,1485,Plowshare Porter,American Porter,301,16.0
+1538,0.046,20.0,1394,Old Forge Pumpkin Ale,Pumpkin Ale,301,16.0
+1539,0.045,,1381,Endless Sun Ale,American Pale Wheat Ale,301,16.0
+1540,0.065,,900,Celestial Blonde Ale,American Blonde Ale,301,16.0
+1541,0.075,,891,Overbite IPA,American IPA,301,16.0
+1542,0.055,,509,T-Rail Pale Ale,American Pale Ale (APA),301,16.0
+1543,0.048,,508,Endless Summer Ale (2011),American Pale Wheat Ale,301,16.0
+1544,0.053,,1530,Clem's Gold,American Pale Lager,390,16.0
+1545,0.055,,1529,Lizzy's Red,American Amber / Red Lager,390,16.0
+1546,0.067,,1528,Orlison India Pale Lager,American Pale Lager,390,16.0
+1547,0.042,,1527,Brünette,Euro Dark Lager,390,16.0
+1548,0.040999999999999995,,1526,Havanüther,Light Lager,390,16.0
+1549,0.065,,2113,Lyric Ale,Saison / Farmhouse Ale,216,12.0
+1550,0.053,,2112,Atalanta,Saison / Farmhouse Ale,216,12.0
+1551,0.049,35.0,2302,Pinner Throwback IPA,American IPA,166,12.0
+1552,0.052000000000000005,,1883,Centennial State Pale Ale,American Pale Ale (APA),166,19.2
+1553,0.08,,1859,Old Chub NITRO,Scotch Ale / Wee Heavy,166,16.0
+1554,,,1796,The CROWLER™,,166,32.0
+1555,,,1790,CAN'D AID Foundation,,166,12.0
+1556,,,1752,Icey.P.A.,American IPA,166,16.0
+1557,0.05,,1751,One Nut Brown,English Brown Ale,166,12.0
+1558,,,1750,Birth IPA,American IPA,166,12.0
+1559,0.065,65.0,1444,Dale's Pale Ale,American Pale Ale (APA),166,12.0
+1560,0.065,65.0,1252,Dale's Pale Ale,American Pale Ale (APA),166,12.0
+1561,0.053,35.0,1167,Mama's Little Yella Pils,Czech Pilsener,166,19.2
+1562,0.085,,993,oSKAr the G'Rauch,American IPA,166,19.2
+1563,0.085,,992,oSKAr the G'Rauch,American IPA,166,16.0
+1564,0.065,65.0,955,Dale's Pale Ale,American Pale Ale (APA),166,19.2
+1565,0.07,,933,The Deuce,American Brown Ale,166,16.0
+1566,0.065,65.0,892,Dale's Pale Ale (10 Year Anniversary),American Pale Ale (APA),166,12.0
+1567,0.065,65.0,828,Dale's Pale Ale (2012),American Pale Ale (APA),166,12.0
+1568,0.087,85.0,806,Gordon Imperial Red (2010),American Double / Imperial IPA,166,12.0
+1569,0.065,65.0,755,Dale's Pale Ale (2011),American Pale Ale (APA),166,12.0
+1570,0.065,65.0,754,Dale's Pale Ale (2010),American Pale Ale (APA),166,12.0
+1571,0.087,85.0,726,G'KNIGHT (16 oz.),American Double / Imperial IPA,166,16.0
+1572,0.09,,720,15th Anniversary Abbey Ale (2012),Belgian Dark Ale,166,16.0
+1573,0.08,,661,Chaka,Belgian Strong Pale Ale,166,16.0
+1574,0.08,70.0,585,HGH (Home Grown Hops): Part Duh,American Strong Ale,166,12.0
+1575,0.08,,565,Deviant Dale's IPA,American Double / Imperial IPA,166,16.0
+1576,0.09,60.0,391,One Hit Wonder,American Double / Imperial IPA,166,12.0
+1577,0.087,85.0,388,G'KNIGHT (12 oz.),American Double / Imperial IPA,166,12.0
+1578,0.099,98.0,8,Ten Fidy Imperial Stout,Russian Imperial Stout,166,12.0
+1579,0.053,35.0,7,Mama's Little Yella Pils,Czech Pilsener,166,12.0
+1580,0.099,100.0,6,GUBNA Imperial IPA,American Double / Imperial IPA,166,12.0
+1581,0.08,35.0,5,Old Chub,Scottish Ale,166,12.0
+1582,0.087,85.0,4,Gordon Ale (2009),American Double / Imperial IPA,166,12.0
+1583,0.065,65.0,1,Dale's Pale Ale,American Pale Ale (APA),166,12.0
+1584,0.092,85.0,805,Gordon (2005),American Double / Imperial IPA,503,12.0
+1585,0.095,98.0,804,Ten Fidy Imperial Stout (2008),Russian Imperial Stout,503,12.0
+1586,0.099,98.0,803,Ten Fidy Imperial Stout (2007),Russian Imperial Stout,503,12.0
+1587,0.08,35.0,787,Old Chub (2008),Scottish Ale,503,12.0
+1588,0.08,35.0,786,Old Chub (2004),Scottish Ale,503,12.0
+1589,0.08,35.0,785,Old Chub (2003),Scottish Ale,503,12.0
+1590,0.065,65.0,745,Dale's Pale Ale (2008),American Pale Ale (APA),503,12.0
+1591,0.065,65.0,744,Dale's Pale Ale (2006),American Pale Ale (APA),503,12.0
+1592,0.065,65.0,743,Dale's Pale Ale (2004),American Pale Ale (APA),503,12.0
+1593,0.065,65.0,742,Dale's Pale Ale (2003),American Pale Ale (APA),503,12.0
+1594,0.065,65.0,741,Dale's Pale Ale (2002),American Pale Ale (APA),503,12.0
+1595,0.052000000000000005,,734,Leroy (2005),American Brown Ale,503,12.0
+1596,0.087,60.0,733,Gordon Beer (2006),American Double / Imperial IPA,503,12.0
+1597,0.087,85.0,1533,G'KNIGHT,American Double / Imperial IPA,389,12.0
+1598,0.099,98.0,1532,Ten Fidy,Russian Imperial Stout,389,12.0
+1599,0.08,85.0,1328,Deviant Dale's IPA,American Double / Imperial IPA,389,16.0
+1600,0.08,35.0,1175,Old Chub,Scottish Ale,389,12.0
+1601,0.065,65.0,1166,Dale's Pale Ale,American Pale Ale (APA),389,19.2
+1602,0.065,65.0,1065,Dale's Pale Ale,American Pale Ale (APA),389,12.0
+1603,0.055,45.0,1908,Fresh Slice White IPA,American White IPA,275,12.0
+1604,0.055,55.0,1946,Overgrown American Pale Ale,American Pale Ale (APA),261,12.0
+1605,0.04,39.0,1961,Ozark American Pale Ale,American Pale Ale (APA),259,12.0
+1606,0.048,,1684,Hula Hoppie Session IPA,American IPA,341,12.0
+1607,0.053,,927,Dirty Hippie Dark Wheat,American Dark Wheat Ale,341,12.0
+1608,0.052000000000000005,23.0,1268,Rustic Red,Irish Red Ale,441,16.0
+1609,0.053,48.0,697,Stimulator Pale Ale,American Pale Ale (APA),441,16.0
+1610,0.045,22.0,696,Old Town Ale,Kölsch,441,16.0
+1611,0.044000000000000004,28.0,695,Car 21,English Bitter,441,16.0
+1612,0.05,24.0,694,Cache La Porter,American Porter,441,16.0
+1613,0.042,35.0,1805,Rodeo Rye Pale Ale,American Pale Ale (APA),307,12.0
+1614,0.062,65.0,1048,Outlaw IPA,American IPA,307,12.0
+1615,0.044000000000000004,,1043,North Fork Lager,American Pale Lager,307,12.0
+1616,0.048,35.0,890,Payette Pale Ale,American Pale Ale (APA),307,12.0
+1617,0.055,25.0,775,Mutton Buster,American Brown Ale,307,12.0
+1618,0.05,,1087,Side Kick Kölsch,Kölsch,468,12.0
+1619,0.046,,1931,Fresh Cut Pilsner,American Pilsner,266,12.0
+1620,0.05,61.0,1930,Summer Session Ale,American Pale Wheat Ale,266,12.0
+1621,0.04,12.0,2238,Lobo Lito,Light Lager,187,12.0
+1622,0.05,17.0,2144,Robert Earl Keen Honey Pils,American Pilsner,187,12.0
+1623,0.065,77.0,2175,Mound Builder IPA,American IPA,205,12.0
+1624,0.062,62.0,2168,Amazon Princess IPA,American IPA,205,12.0
+1625,0.042,,1956,Farmer's Daughter Wheat,American Pale Wheat Ale,205,12.0
+1626,0.045,,1794,People's Pilsner,German Pilsener,205,12.0
+1627,0.055,10.0,2633,Hotbox Brown,American Brown Ale,13,12.0
+1628,0.048,15.0,2632,Gold,American Blonde Ale,13,12.0
+1629,0.057999999999999996,,2631,Black,American Black Ale,13,12.0
+1630,0.065,65.0,2630,98 Problems (Cuz A Hop Ain't One),American IPA,13,12.0
+1631,0.05,40.0,2629,Veteran’s Pale Ale (VPA),American Pale Ale (APA),13,12.0
+1632,0.05,35.0,2628,Grapefruit IPA,American IPA,13,12.0
+1633,0.051,,1062,Pete's ESP Lager (1998),American Pale Lager,470,12.0
+1634,0.047,,1061,Pete's Wicked Summer Brew (1995),American Pale Wheat Ale,470,12.0
+1635,0.049,,1060,Pete's Wicked Bohemian Pilsner (1997),Czech Pilsener,470,12.0
+1636,,,1056,Pete's Wicked Pale Ale (1997),American Pale Ale (APA),470,12.0
+1637,0.047,,1055,Pete's Wicked Summer Brew (2002),American Pale Wheat Ale,470,12.0
+1638,0.047,,1054,Pete's Wicked Summer Brew (1997),American Pale Wheat Ale,470,12.0
+1639,0.047,,1053,Pete's Wicked Summer Brew (1996),American Pale Wheat Ale,470,12.0
+1640,0.040999999999999995,12.0,2635,Sparkle,American Pale Lager,11,16.0
+1641,0.059000000000000004,25.0,1404,North 45 Amber Ale,American Amber / Red Ale,11,16.0
+1642,0.069,20.0,1403,Horny Monk,Dubbel,11,16.0
+1643,0.067,74.0,1402,Mind's Eye PA,American IPA,11,16.0
+1644,0.061,60.0,2312,Camelback,American IPA,157,12.0
+1645,0.055999999999999994,,1636,Local 5 Pale Ale,American Pale Ale (APA),355,16.0
+1646,0.073,,1518,Devils Head Red Ale,American Amber / Red Ale,355,16.0
+1647,0.07,75.0,1384,Elephant Rock IPA,American IPA,355,12.0
+1648,0.05,,1797,Black Bay Milk Stout,Milk / Sweet Stout,310,12.0
+1649,0.05,,1437,Atom Splitter Pale Ale,American Pale Ale (APA),310,12.0
+1650,0.06,20.0,1791,Hot Date Ale,Chile Beer,314,16.0
+1651,0.07,,1540,Masked Bandit IPA,American Black Ale,314,16.0
+1652,0.06,24.0,1491,Sweet Potato Ale,Fruit / Vegetable Beer,314,16.0
+1653,0.045,18.0,1335,Float Trip Ale,American Blonde Ale,314,16.0
+1654,0.055,25.0,847,Old Tom Porter,American Porter,314,16.0
+1655,0.045,18.0,846,Black Walnut Wheat,American Dark Wheat Ale,314,16.0
+1656,0.055,20.0,521,McKinney Eddy Amber Ale,American Amber / Red Ale,314,16.0
+1657,0.07,70.0,479,Missouri Mule India Pale Ale,American IPA,314,16.0
+1658,0.065,,2559,Blood of the Unicorn,American Amber / Red Ale,52,16.0
+1659,0.069,51.0,1760,GreyBeard™ IPA,American IPA,324,12.0
+1660,0.057,31.0,1759,Pisgah Pale Ale,American Pale Ale (APA),324,12.0
+1661,0.045,,1589,PONTO S.I.P.A.,American IPA,370,16.0
+1662,0.049,,1457,Chronic Ale,American Amber / Red Ale,370,16.0
+1663,0.068,,1191,Swami's India Pale Ale,American IPA,370,16.0
+1664,0.05,,2336,New Cleveland Palesner,American Pilsner,147,12.0
+1665,0.054000000000000006,45.0,2553,Mazzie,American Pale Ale (APA),55,12.0
+1666,0.099,,1909,Big Chuck Barleywine,American Barleywine,274,12.0
+1667,,,335,Ponderosa IPA,American IPA,548,12.0
+1668,,,64,Liquid Amber Ale,American Amber / Red Ale,548,12.0
+1669,0.059000000000000004,14.0,2360,Morning Wood Wheat (Current),American Pale Wheat Ale,135,12.0
+1670,0.069,17.0,1463,Hideout Helles,Munich Helles Lager,135,12.0
+1671,0.06,15.0,1462,Dead Eye Dunkel,Munich Dunkel Lager,135,12.0
+1672,0.057999999999999996,21.0,1461,Peacemaker Pilsner,Czech Pilsener,135,12.0
+1673,0.057,68.0,711,Over the Rail Pale Ale,American Pale Ale (APA),135,12.0
+1674,0.057999999999999996,21.0,188,Pallavicini Pilsner (2009),Czech Pilsener,135,12.0
+1675,0.059000000000000004,14.0,130,Morning Wood Wheat (Current),American Pale Wheat Ale,135,12.0
+1676,0.052000000000000005,18.0,399,Pyramid Hefeweizen (2011),Hefeweizen,544,12.0
+1677,0.052000000000000005,18.0,82,Haywire Hefeweizen (2010),Hefeweizen,544,16.0
+1678,0.045,35.0,2031,Golden Fleece,Belgian Pale Ale,246,12.0
+1679,0.055,30.0,2030,Smoking Mirror,American Porter,246,12.0
+1680,0.046,,2269,Rahr's Blonde,Munich Helles Lager,176,12.0
+1681,0.057999999999999996,60.0,2229,Pride of Texas Pale Ale,American Pale Ale (APA),176,12.0
+1682,0.044000000000000004,5.0,2370,18th Anniversary Gose,Gose,128,12.0
+1683,0.046,25.0,2211,White (2015),Witbier,128,12.0
+1684,0.099,85.0,1861,BLAKKR,American Black Ale,128,12.0
+1685,0.051,21.0,1718,Firemans #4 Blonde Ale (2013),American Blonde Ale,128,12.0
+1686,0.059000000000000004,,1290,The Sword Iron Swan Ale,English Pale Ale,128,12.0
+1687,0.053,52.0,1091,Hans' Pils (2015),German Pilsener,128,12.0
+1688,0.06,50.0,1086,Four Squared (2015),American Blonde Ale,128,12.0
+1689,0.051,21.0,830,Firemans #4 Blonde Ale (2015),American Blonde Ale,128,12.0
+1690,0.07200000000000001,55.0,1021,Watership Brown Ale,American Brown Ale,475,12.0
+1691,0.062,55.0,938,Gangway IPA,American IPA,475,12.0
+1692,0.049,,715,Long Day Lager,Czech Pilsener,475,12.0
+1693,0.051,17.0,2516,Farmer's Daughter Blonde,American Blonde Ale,68,16.0
+1694,0.055,45.0,2515,Pump House IPA,American IPA,68,16.0
+1695,0.07,,2514,Suicide Blonde IPA,Belgian IPA,68,16.0
+1696,0.047,25.0,2513,Vanilla Porter,American Porter,68,16.0
+1697,0.057999999999999996,18.0,2512,Honey Rye,Rye Beer,68,16.0
+1698,0.055,,1467,Happy Cider,Cider,403,16.0
+1699,0.065,44.0,945,Long Hammer IPA,American IPA,487,16.0
+1700,0.065,44.0,583,Long Hammer IPA,American IPA,487,12.0
+1701,0.057999999999999996,27.0,339,Copper Hook (2011),American Amber / Red Ale,487,12.0
+1702,0.08,,1375,Nectar of the Hops,Mead,421,16.0
+1703,0.08,,1374,Sunshine Nectar,Mead,421,16.0
+1704,0.08,,1373,Black Raspberry Nectar,Mead,421,16.0
+1705,0.05,16.0,2087,Blood Orange Wit,Witbier,225,16.0
+1706,0.05,40.0,2414,Consilium,American Pale Ale (APA),110,12.0
+1707,0.09,60.0,1581,Hammer & Sickle,Russian Imperial Stout,110,12.0
+1708,0.07,100.0,1176,Redacted Rye IPA,American IPA,110,16.0
+1709,0.099,100.0,1006,Elevation Triple India Pale Ale,American Double / Imperial IPA,110,12.0
+1710,0.05,25.0,1005,5:00 O'Clock Afternoon Ale,American Blonde Ale,110,16.0
+1711,0.07,100.0,636,Ryeteous Rye IPA (2012),American IPA,110,16.0
+1712,0.064,,1538,Stout Ol' Friend,American Stout,386,16.0
+1713,0.064,,1075,Stout Ol' Friend (2012),American Stout,386,16.0
+1714,,,710,Rye Porter,American Porter,386,16.0
+1715,0.05,,709,Miner's Gold,American Blonde Ale,386,16.0
+1716,0.046,,708,Vienna Lager,Vienna Lager,386,16.0
+1717,0.055999999999999994,,706,Jessie's Garage,American Pale Ale (APA),386,16.0
+1718,0.062,,220,Colorado Red Ale,American Amber / Red Ale,386,12.0
+1719,,,219,Miner's Gold,American Blonde Ale,386,12.0
+1720,0.055,40.0,2576,Fist City,American Pale Ale (APA),44,12.0
+1721,0.068,,1133,A Little Crazy,Belgian Pale Ale,44,12.0
+1722,0.057999999999999996,15.0,609,Rosa Hibiscus Ale,Herbed / Spiced Beer,44,12.0
+1723,0.061,31.0,418,Fistmas Ale,Herbed / Spiced Beer,44,12.0
+1724,0.057,25.0,417,Oktoberfest Revolution,Märzen / Oktoberfest,44,12.0
+1725,0.068,28.0,416,Eugene Porter,American Porter,44,12.0
+1726,0.065,70.0,415,Anti-Hero IPA,American IPA,44,12.0
+1727,0.05,14.0,414,Bottom Up Belgian Wit,Witbier,44,12.0
+1728,0.057,42.0,2452,Hustle,American Amber / Red Ale,93,12.0
+1729,0.055,42.0,2451,Pure Fury,American Pale Ale (APA),93,12.0
+1730,0.06,60.0,2132,Dad,American Amber / Red Ale,93,12.0
+1731,0.057999999999999996,35.0,1993,Panther,American Porter,93,12.0
+1732,0.052000000000000005,21.0,1992,Franz,Märzen / Oktoberfest,93,12.0
+1733,0.043,45.0,1935,Zen,American Pale Ale (APA),93,12.0
+1734,0.07200000000000001,75.0,1852,Truth,American IPA,93,12.0
+1735,0.048,25.0,1851,Cougar,American Blonde Ale,93,12.0
+1736,0.038,,2307,Smooth Operator,Cream Ale,162,16.0
+1737,0.035,,2580,Gose,Gose,42,16.0
+1738,0.043,,1807,Maine Island Trail Ale,American Pale Ale (APA),42,16.0
+1739,0.05,,1180,River North White Ale,Witbier,459,16.0
+1740,0.05,,1179,River North Ale,American Amber / Red Ale,459,16.0
+1741,0.05,55.0,1771,Lil SIPA,American IPA,321,16.0
+1742,0.055,60.0,1654,Hop Bomber Rye Pale Ale,American Pale Ale (APA),321,16.0
+1743,0.05,100.0,2579,Jah Mon,American IPA,43,12.0
+1744,0.062,,2373,Oktoberfest,Märzen / Oktoberfest,43,12.0
+1745,0.08,,2049,Headless Wylie,Pumpkin Ale,43,12.0
+1746,0.05,,2048,Dayman IPA,American IPA,43,12.0
+1747,0.071,,1880,All Aboard! Anniversary Stout,Oatmeal Stout,43,12.0
+1748,0.062,,1879,Hop Lace,American White IPA,43,12.0
+1749,0.048,,1878,OH-PA Session Pale Ale,American Pale Ale (APA),43,12.0
+1750,0.08,,1877,Patrick's Poison,American Amber / Red Ale,43,12.0
+1751,0.081,,1764,Rudolph's Red,American Amber / Red Ale,43,12.0
+1752,0.053,,1103,Babbling Blonde,American Blonde Ale,43,12.0
+1753,0.051,,1102,Maxwell's Scottish Ale,Scottish Ale,43,12.0
+1754,0.061,,1101,Grateful White,Witbier,43,12.0
+1755,0.055,,1100,RT Lager,American Amber / Red Lager,43,12.0
+1756,0.062,,1099,Old Wylie's IPA,American IPA,43,12.0
+1757,0.048,,1098,Hala Kahiki Pineapple Beer,Fruit / Vegetable Beer,43,12.0
+1758,0.045,,1330,Track 1 Amber Lager,American Amber / Red Lager,427,16.0
+1759,0.053,,2074,Pine Knob Pilsner,Czech Pilsener,229,16.0
+1760,,,1724,Cal and Co. Black Cherry Porter,American Porter,229,16.0
+1761,0.055,,1280,Lazy Daze Lager,American Adjunct Lager,229,16.0
+1762,0.059000000000000004,,899,Rochester Red Ale,American Amber / Red Ale,229,16.0
+1763,0.05,,363,Milkshake Stout,Milk / Sweet Stout,229,16.0
+1764,0.07,,158,Cornerstone IPA,American IPA,229,16.0
+1765,0.055,,97,Lazy Daze Lager,American Adjunct Lager,229,12.0
+1766,0.051,,1860,Rogue American Amber Ale,American Amber / Red Ale,289,16.0
+1767,0.076,78.0,1577,12th Round,American Strong Ale,376,16.0
+1768,0.07,80.0,1576,RoughTail IPA,American IPA,376,16.0
+1769,0.08,,1575,Polar Night Stout,American Stout,376,16.0
+1770,0.071,36.0,2304,Sundown,Saison / Farmhouse Ale,164,12.0
+1771,0.099,,2249,Sanctified,Belgian Strong Pale Ale,164,12.0
+1772,0.051,,2053,Fear of a Brett Planet,American Pale Ale (APA),164,12.0
+1773,0.055999999999999994,40.0,1842,Original Slacker Ale,English Brown Ale,164,12.0
+1774,0.07200000000000001,,1841,Alpha Blackback,American Black Ale,164,12.0
+1775,0.063,,1782,Kiss Off IPA,American IPA,164,12.0
+1776,0.045,28.0,1552,Dog Days Summer Ale,Kölsch,164,12.0
+1777,0.055999999999999994,35.0,1479,1881 California Red,American Amber / Red Ale,397,12.0
+1778,0.073,55.0,1478,CAPT Black IPA,American Black Ale,397,12.0
+1779,0.048,42.0,1370,Ruhstaller's Gilt Edge Lager Beer,American Amber / Red Lager,397,12.0
+1780,0.073,55.0,883,CAPT Black IPA,American Black Ale,397,16.0
+1781,0.055999999999999994,35.0,882,1881 California Red Ale,American Amber / Red Ale,397,16.0
+1782,0.05,15.0,1868,Saint Archer White Ale,Witbier,288,12.0
+1783,0.068,66.0,1867,Saint Archer IPA,American IPA,288,12.0
+1784,0.052000000000000005,40.0,1865,Saint Archer Pale Ale,American Pale Ale (APA),288,12.0
+1785,0.048,22.0,1864,Saint Archer Blonde,Kölsch,288,12.0
+1786,0.069,20.0,2599,Sex Panther,American Porter,30,12.0
+1787,0.095,25.0,2073,Winter Warmer (Vault Series),Winter Warmer,30,16.0
+1788,0.091,99.0,2063,Count Hopula (Vault Series),American Double / Imperial IPA,30,16.0
+1789,0.055,,1995,Oktoberfest,Märzen / Oktoberfest,30,12.0
+1790,0.05,15.0,1934,SunSpot Golden Ale,American Blonde Ale,30,12.0
+1791,0.06,,1329,I.W.A. (2011),American Pale Wheat Ale,30,12.0
+1792,0.065,,1299,Supermonk I.P.A.,Belgian IPA,30,12.0
+1793,0.055,20.0,1073,Epicenter Amber Ale,American Amber / Red Ale,30,12.0
+1794,0.05,15.0,1072,SanTan HefeWeizen,Hefeweizen,30,12.0
+1795,0.07,85.0,1071,Hop Shock IPA,American IPA,30,12.0
+1796,0.069,20.0,852,Sex Panther (2014),American Porter,30,12.0
+1797,0.055,45.0,850,Devil’s Ale,American Pale Ale (APA),30,12.0
+1798,0.081,,839,Rail Slide Imperial Spiced Ale,Herbed / Spiced Beer,30,12.0
+1799,0.05,20.0,777,Mr. Pineapple,Fruit / Vegetable Beer,30,12.0
+1800,0.055,45.0,764,American Idiot Ale (2012),American Pale Ale (APA),30,12.0
+1801,0.07,85.0,317,Hop Shock IPA (2010),American IPA,30,12.0
+1802,0.05,15.0,286,SanTan HefeWeizen (2010),Hefeweizen,30,12.0
+1803,0.055,45.0,285,Devil’s Ale (2010),American Pale Ale (APA),30,12.0
+1804,0.055,20.0,124,Epicenter Amber Ale (2010),American Amber / Red Ale,30,12.0
+1805,0.057999999999999996,20.0,1392,Sanitas Saison Ale,Saison / Farmhouse Ale,419,12.0
+1806,0.068,65.0,1391,Sanitas Black IPA,American Black Ale,419,12.0
+1807,0.08900000000000001,88.0,2002,Giant DIPA,American Double / Imperial IPA,252,16.0
+1808,0.054000000000000006,,1683,Dread Brown Ale,American Brown Ale,252,12.0
+1809,0.07,,1362,Casinos IPA,English India Pale Ale (IPA),252,16.0
+1810,0.055,30.0,1519,Saison 88,Saison / Farmhouse Ale,392,12.0
+1811,0.071,95.0,967,Black IPA,American Black Ale,392,12.0
+1812,0.045,,599,Santa Fe Irish Red Ale,Irish Red Ale,392,12.0
+1813,,,307,Santa Fe Oktoberfest,Märzen / Oktoberfest,392,12.0
+1814,0.08,,305,Imperial Java Stout,Russian Imperial Stout,392,12.0
+1815,0.055,,304,Freestyle Pilsner,German Pilsener,392,12.0
+1816,0.066,,217,Happy Camper IPA,American IPA,392,12.0
+1817,0.05,11.0,1477,Oval Beach Blonde Ale,American Blonde Ale,398,16.0
+1818,0.065,,1503,Oak Aged Cider,Cider,394,12.0
+1819,0.065,,1466,Ginger Cider,Cider,394,12.0
+1820,0.065,,1245,Schilling Hard Cider,Cider,394,12.0
+1821,0.05,45.0,1324,Schlafly Yakima Wheat Ale,American Pale Wheat Ale,428,12.0
+1822,0.05,,1323,Schlafly Black Lager,Schwarzbier,428,12.0
+1823,0.045,30.0,1078,Schlafly IPA,American IPA,428,12.0
+1824,0.05,30.0,1077,Schlafly American Brown Ale,American Brown Ale,428,12.0
+1825,0.040999999999999995,16.0,588,Schlafly Hefeweizen,Hefeweizen,428,12.0
+1826,0.045,17.0,53,Schlafly Summer Lager,Munich Helles Lager,428,12.0
+1827,0.047,,815,Sea Dog Wild Blueberry Wheat Ale,Fruit / Vegetable Beer,502,12.0
+1828,0.07400000000000001,60.0,1302,Blur India Pale Ale,American IPA,432,12.0
+1829,0.065,,1416,Dry Cider,Cider,411,16.0
+1830,0.065,,1415,Dry Hard Cider,Cider,411,16.0
+1831,0.07,105.0,918,Frankenlou's IPA,American IPA,494,16.0
+1832,0.07,55.0,917,Becky's Black Cat Porter,American Porter,494,16.0
+1833,0.077,40.0,2250,Seventh Son of a Seventh Son,American Strong Ale,183,16.0
+1834,0.053,20.0,1768,Stone Fort Brown Ale,English Brown Ale,183,16.0
+1835,0.077,40.0,1767,Seventh Son Hopped Red Ale,American Amber / Red Ale,183,16.0
+1836,0.06,53.0,1766,Humulus Nimbus Super Pale Ale,American Pale Ale (APA),183,16.0
+1837,0.07,68.0,1765,Golden Ratio IPA,American IPA,183,16.0
+1838,0.068,,2368,Black Hop IPA,American Black Ale,130,12.0
+1839,0.05,,738,Archer's Ale (2004),English Pale Ale,511,12.0
+1840,0.069,65.0,1539,Monkey Fist IPA,American IPA,385,12.0
+1841,0.051,,975,Shipyard Summer Ale,American Pale Wheat Ale,385,12.0
+1842,0.047,,814,Pumpkinhead Ale,Pumpkin Ale,385,12.0
+1843,0.051,,727,Shipyard Export,American Blonde Ale,385,12.0
+1844,0.052000000000000005,,2474,Nooner,German Pilsener,83,12.0
+1845,0.07200000000000001,65.0,2239,Torpedo,American IPA,83,12.0
+1846,0.06,,1919,Yonder Bock,Maibock / Helles Bock,83,12.0
+1847,0.06,,1918,CANfusion Rye Bock,Rye Beer,83,12.0
+1848,0.055999999999999994,37.0,1905,Sierra Nevada Pale Ale,American Pale Ale (APA),83,16.0
+1849,0.048,26.0,1338,Old Chico Crystal Wheat,American Pale Wheat Ale,83,12.0
+1850,0.05,28.0,1295,Summerfest,Czech Pilsener,83,12.0
+1851,0.07200000000000001,65.0,426,Torpedo,American IPA,83,16.0
+1852,0.055999999999999994,37.0,400,Sierra Nevada Pale Ale,American Pale Ale (APA),83,12.0
+1853,0.069,,2353,Sietsema Red Label,Cider,137,16.0
+1854,0.042,,212,Bear Ass Brown,American Brown Ale,551,12.0
+1855,0.06,,161,Red Mountain Ale,American Amber / Red Ale,551,12.0
+1856,0.068,,160,Ice Pick Ale,American IPA,551,12.0
+1857,0.1,52.0,2574,4Beans,Baltic Porter,46,12.0
+1858,0.042,16.0,2479,Jammer,Gose,46,12.0
+1859,0.08,,2443,Abigale,Belgian Pale Ale,46,12.0
+1860,0.032,7.0,2266,Rad,Fruit / Vegetable Beer,46,16.0
+1861,0.065,62.0,2090,Bengali,American IPA,46,24.0
+1862,0.047,50.0,1962,Sensi Harvest,American Pale Ale (APA),46,12.0
+1863,0.099,111.0,1696,Hi-Res,American Double / Imperial IPA,46,12.0
+1864,0.07,70.0,1608,Global Warmer,American Strong Ale,46,12.0
+1865,0.067,74.0,1591,Autumnation (2013),American IPA,46,16.0
+1866,0.054000000000000006,42.0,1388,The Crisp,German Pilsener,46,16.0
+1867,0.052000000000000005,34.0,1387,Sweet Action,Cream Ale,46,16.0
+1868,0.063,57.0,1386,Righteous Ale,Rye Beer,46,16.0
+1869,0.064,62.0,1385,Bengali Tiger,American IPA,46,16.0
+1870,0.099,85.0,1020,3Beans,Baltic Porter,46,12.0
+1871,0.059000000000000004,47.0,778,Brownstone,American Brown Ale,46,16.0
+1872,0.052000000000000005,11.0,630,Apollo,American Pale Wheat Ale,46,16.0
+1873,0.049,35.0,629,Harbinger,Saison / Farmhouse Ale,46,16.0
+1874,0.091,103.0,628,Resin,American Double / Imperial IPA,46,12.0
+1875,0.063,69.0,525,Diesel,American Stout,46,16.0
+1876,0.06,48.0,512,Autumnation (2011-12) (2011),Pumpkin Ale,46,16.0
+1877,0.054000000000000006,42.0,425,The Crisp (2011),German Pilsener,46,16.0
+1878,0.052000000000000005,34.0,424,Sweet Action (2011),Cream Ale,46,16.0
+1879,0.063,57.0,423,Righteous Ale (2011),Rye Beer,46,16.0
+1880,0.064,62.0,422,Bengali Tiger (2011),American IPA,46,16.0
+1881,0.045,,1942,Rudie Session IPA,American IPA,264,12.0
+1882,0.07400000000000001,,1708,Taster's Choice,Doppelbock,264,12.0
+1883,0.068,65.0,1521,Modus Hoperandi,American IPA,264,12.0
+1884,0.057999999999999996,15.0,1297,Estival Cream Stout,American Stout,264,12.0
+1885,0.057999999999999996,,1192,Vernal Minthe Stout,American Stout,264,12.0
+1886,0.08,,1013,Hibernal Vinifera Stout,Foreign / Export Stout,264,12.0
+1887,,,774,Autumnal Molé Stout,American Stout,264,12.0
+1888,0.042,18.0,386,Mexican Logger,American Pale Lager,264,12.0
+1889,0.053,,70,True Blonde Ale,American Blonde Ale,264,12.0
+1890,0.061,,69,Euphoria Pale Ale,American Pale Ale (APA),264,12.0
+1891,0.057,58.0,68,ESB Special Ale,Extra Special / Strong Bitter (ESB),264,12.0
+1892,0.068,65.0,67,Modus Hoperandi,American IPA,264,12.0
+1893,0.057999999999999996,39.0,1792,Iron Butt Red Ale,American Amber / Red Ale,313,12.0
+1894,0.071,92.0,1609,Initial Point India Pale Ale,American IPA,313,12.0
+1895,0.085,,2537,Monkey Dancing On A Razor Blade,Belgian IPA,64,24.0
+1896,0.08199999999999999,,2536,Tripel Deke,Tripel,64,24.0
+1897,0.049,,30,Urban Wilderness Pale Ale,English Pale Ale,557,12.0
+1898,0.06,70.0,2305,Homefront IPA,American IPA,163,12.0
+1899,0.055,16.0,1588,Sly Fox Christmas Ale 2013,Winter Warmer,371,12.0
+1900,0.055999999999999994,25.0,1363,Grisette,Grisette,371,12.0
+1901,0.062,,1211,360° India Pale Ale,American IPA,371,12.0
+1902,0.049,18.0,1123,Helles Golden Lager,Munich Helles Lager,371,12.0
+1903,0.055,16.0,926,Sly Fox Christmas Ale 2012 (2012),Winter Warmer,371,12.0
+1904,0.084,90.0,894,Odyssey Imperial IPA,American Double / Imperial IPA,371,12.0
+1905,0.057999999999999996,25.0,166,Oktoberfest Lager,Märzen / Oktoberfest,371,12.0
+1906,0.07,113.0,24,113 IPA,American IPA,371,12.0
+1907,0.053,21.0,23,Dunkel Lager,Munich Dunkel Lager,371,12.0
+1908,0.055999999999999994,11.0,22,Royal Weisse Ale,Hefeweizen,371,12.0
+1909,0.049,44.0,21,Pikeland Pils,German Pilsener,371,12.0
+1910,0.051,40.0,20,Phoenix Pale Ale,American Pale Ale (APA),371,12.0
+1911,0.07,88.0,2407,Rule G IPA,American IPA,115,12.0
+1912,0.057999999999999996,35.0,2406,Murphy's Law,American Amber / Red Ale,115,12.0
+1913,0.062,33.0,2405,Alter Ego ,Saison / Farmhouse Ale,115,12.0
+1914,0.05,,2234,Monarch Pilsner,American Pilsner,191,12.0
+1915,0.06,55.0,1606,Snow King Pale Ale,American Pale Ale (APA),191,12.0
+1916,0.054000000000000006,36.0,617,Zonker Stout,Foreign / Export Stout,191,12.0
+1917,0.05,22.0,407,OB-1 Organic Ale,English Brown Ale,191,12.0
+1918,0.05,18.0,406,Snake River Lager,Vienna Lager,191,12.0
+1919,0.052000000000000005,32.0,402,Snake River Pale Ale,American Pale Ale (APA),191,12.0
+1920,0.068,60.0,393,Pako’s EyePA,American IPA,191,12.0
+1921,0.05,,1798,Thanksgiving Ale,Kölsch,309,12.0
+1922,0.092,,1655,Double Dagger Imperial IPA,American Double / Imperial IPA,309,12.0
+1923,0.063,100.0,1596,Dagger Falls IPA,American IPA,309,12.0
+1924,0.063,100.0,1595,Dagger Falls IPA,American IPA,309,12.0
+1925,0.06,,1482,Socktoberfest,Märzen / Oktoberfest,309,16.0
+1926,0.079,,1447,Hopnoxious Imperial IPA,American Double / Imperial IPA,309,12.0
+1927,0.099,,1425,Barrel Aged Seven Devils Imperial Stout,American Double / Imperial Stout,309,12.0
+1928,0.055,,1424,Boise Co-Op Two Score Ale,Saison / Farmhouse Ale,309,16.0
+1929,0.05,,1298,Sockeye Belgian Style Summer Ale,Witbier,309,16.0
+1930,0.064,,1181,Sockeye Maibock,Maibock / Helles Bock,309,12.0
+1931,0.099,100.0,1160,Old Devil's Tooth,American Barleywine,309,12.0
+1932,0.043,,1152,Galena Golden,American Blonde Ale,309,12.0
+1933,0.052000000000000005,32.0,1151,Hell-Diver Pale Ale,American Pale Ale (APA),309,12.0
+1934,0.046,12.0,1150,Woolybugger Wheat,American Pale Wheat Ale,309,12.0
+1935,0.057,,1076,Power House Porter,American Porter,309,12.0
+1936,0.084,90.0,995,Winterfest,American Strong Ale,309,16.0
+1937,0.063,100.0,879,Dagger Falls IPA,American IPA,309,12.0
+1938,0.07,18.0,1972,LuckenBock,Bock,257,16.0
+1939,0.055,40.0,1971,Texas Pale Ale (TPA),American IPA,257,16.0
+1940,0.08,,1970,6 String Saison,Saison / Farmhouse Ale,257,16.0
+1941,0.05,22.0,1969,Kol' Beer,Kölsch,257,16.0
+1942,0.035,,2024,Montauk Light,Light Lager,249,12.0
+1943,0.048,32.0,1283,Na Zdraví Pilsner,Czech Pilsener,436,16.0
+1944,0.055,65.0,1282,Nice Rack IPA,American IPA,436,16.0
+1945,0.075,72.0,2362,2014 IPA Cicada Series,American IPA,133,16.0
+1946,0.077,65.0,2346,Sinister Minister Black IPA,American IPA,133,16.0
+1947,0.053,45.0,2320,Jack the Sipper,Extra Special / Strong Bitter (ESB),133,12.0
+1948,0.057999999999999996,60.0,2297,Devil's Harvest Extra Pale Ale,American Pale Ale (APA),133,12.0
+1949,0.05,20.0,2296,Suzy B Dirty Blonde Ale,American Blonde Ale,133,12.0
+1950,0.08,80.0,1745,Mississippi Fire Ant,American Amber / Red Ale,133,16.0
+1951,0.057999999999999996,40.0,1120,Hipster Breakfast,Oatmeal Stout,133,16.0
+1952,0.05,20.0,1118,Suzy B Dirty Blonde Ale,American Blonde Ale,133,16.0
+1953,0.057999999999999996,60.0,1117,Devil's Harvest Extra Pale Ale,American Pale Ale (APA),133,16.0
+1954,0.065,45.0,2387,Pine Belt Pale Ale,American Pale Ale (APA),118,12.0
+1955,0.055,,2267,Walloon,Saison / Farmhouse Ale,118,12.0
+1956,0.069,23.0,1740,Le Mort Vivant,Bière de Garde,118,12.0
+1957,0.085,110.0,1728,Red Cockaded Ale,American Double / Imperial IPA,118,12.0
+1958,0.092,100.0,1497,Valkyrie Double IPA,American Double / Imperial IPA,118,12.0
+1959,0.085,110.0,1011,Red Cockaded Ale (2013),American Double / Imperial IPA,118,12.0
+1960,0.07200000000000001,40.0,1010,Old Potentate,Old Ale,118,12.0
+1961,0.05,20.0,856,Bombshell Blonde,American Blonde Ale,118,16.0
+1962,0.099,100.0,853,PRO-AM (2012) (2012),American Double / Imperial IPA,118,12.0
+1963,0.055,,691,Walloon (2014),Saison / Farmhouse Ale,118,12.0
+1964,0.069,23.0,555,Le Mort Vivant (2011),Bière de Garde,118,12.0
+1965,0.083,50.0,46,Buried Hatchet Stout,Foreign / Export Stout,118,12.0
+1966,0.065,45.0,45,Pine Belt Pale Ale,American Pale Ale (APA),118,16.0
+1967,0.05,20.0,44,Bombshell Blonde,American Blonde Ale,118,12.0
+1968,0.047,35.0,2486,Baby Daddy Session IPA,American IPA,78,12.0
+1969,,,763,Hopluia (2004),English India Pale Ale (IPA),508,16.0
+1970,0.057999999999999996,,2271,Ball & Chain (2014),American Pale Ale (APA),175,16.0
+1971,0.096,,2206,Bitter Biker Double IPA,American Double / Imperial IPA,175,16.0
+1972,0.08199999999999999,,2136,God Damn Pigeon Porter,American Porter,175,16.0
+1973,0.079,,2135,Working for the Weekend,American Double / Imperial IPA,175,16.0
+1974,0.06,,2134,Angry Adam,American Amber / Red Ale,175,16.0
+1975,0.055,,2109,Freedom Fries,American Stout,175,16.0
+1976,0.096,,1821,Bitter Biker Double IPA,American Double / Imperial IPA,175,12.0
+1977,0.073,,1820,Ghost Bike Pale Ale,American Pale Ale (APA),175,16.0
+1978,0.062,,1819,Spiteful IPA,American IPA,175,12.0
+1979,0.06,,1634,Alley Time,American Pale Ale (APA),175,12.0
+1980,0.057999999999999996,,1633,Fat Badger,Irish Red Ale,175,12.0
+1981,0.055,,1632,In the Weeds,American Pale Wheat Ale,175,12.0
+1982,0.05,22.0,855,Special Amber,Vienna Lager,498,12.0
+1983,0.05,22.0,445,Special Amber,Vienna Lager,498,12.0
+1984,0.055999999999999994,,1587,Seven Gates Pale Ale,American Pale Ale (APA),372,12.0
+1985,0.052000000000000005,,2242,Gunga Din,Cider,186,16.0
+1986,0.042,20.0,1544,Starr Pils,German Pilsener,383,12.0
+1987,0.065,52.0,1205,Northern Lights India Pale Ale,American IPA,383,16.0
+1988,0.048,12.0,369,Festie,Märzen / Oktoberfest,383,12.0
+1989,0.065,52.0,368,Northern Lights India Pale Ale,American IPA,383,12.0
+1990,0.065,65.0,2386,Third Eye Enlightened Pale Ale,American Pale Ale (APA),119,12.0
+1991,0.049,17.0,92,Colorado Kölsch,Kölsch,119,12.0
+1992,0.057,25.0,91,Steam Engine Lager,American Amber / Red Lager,119,12.0
+1993,0.065,65.0,90,Third Eye Pale Ale,American IPA,119,12.0
+1994,0.047,9.0,2366,Point Special (Current),American Adjunct Lager,131,12.0
+1995,0.047,9.0,2365,Point Special,American Adjunct Lager,131,12.0
+1996,0.054000000000000006,33.0,2270,Point Cascade Pale Ale (2013),American Pale Ale (APA),131,12.0
+1997,0.047,9.0,2228,Point Special,American Adjunct Lager,131,12.0
+1998,0.052000000000000005,9.0,2151,Onyx Black Ale,American Black Ale,131,12.0
+1999,0.063,64.0,2150,Beyond The Pale IPA,American IPA,131,12.0
diff --git a/core/riot-core/src/test/resources/beers2.csv b/core/riot-core/src/test/resources/beers2.csv
new file mode 100755
index 000000000..9777612a5
--- /dev/null
+++ b/core/riot-core/src/test/resources/beers2.csv
@@ -0,0 +1,411 @@
+,abv,ibu,id,name,style,brewery_id,ounces
+2000,0.047,9.0,2122,Point Special (2013),American Adjunct Lager,131,12.0
+2001,0.047,9.0,2121,Point Special (2012),American Adjunct Lager,131,12.0
+2002,0.047,9.0,2115,Point Special Lager,American Adjunct Lager,131,16.0
+2003,0.062,,1450,St. Benedict's Winter Ale,Winter Warmer,131,12.0
+2004,0.057,15.0,1357,Point Oktoberfest,Märzen / Oktoberfest,131,16.0
+2005,0.052000000000000005,7.0,1225,Point Nude Beach Summer Wheat,American Pale Wheat Ale,131,16.0
+2006,0.05,7.0,816,Point Nude Beach Summer Wheat,American Pale Wheat Ale,131,12.0
+2007,0.05,7.0,772,Point Nude Beach Summer Wheat (2011),American Pale Wheat Ale,131,12.0
+2008,0.035,,684,Drop Dead Blonde,American Blonde Ale,131,12.0
+2009,0.049,13.0,650,Three Kings Ale,Kölsch,131,12.0
+2010,0.057,15.0,456,Point Oktoberfest,Märzen / Oktoberfest,131,12.0
+2011,0.054000000000000006,32.0,357,2012 Black Ale,American Brown Ale,131,12.0
+2012,0.05,7.0,141,Point Nude Beach Summer Wheat (2010),American Pale Wheat Ale,131,12.0
+2013,0.054000000000000006,33.0,140,Point Cascade Pale Ale,American Pale Ale (APA),131,12.0
+2014,0.047,14.0,139,Point Amber Classic,American Amber / Red Lager,131,12.0
+2015,0.047,9.0,138,Point Special Lager,American Adjunct Lager,131,12.0
+2016,0.051,31.0,953,Wisco Disco,American Amber / Red Ale,486,16.0
+2017,0.05,,1983,Brontide,American Black Ale,255,12.0
+2018,0.05,,1631,Brontide,American Black Ale,255,12.0
+2019,0.045,,1344,Classique,Saison / Farmhouse Ale,255,12.0
+2020,0.045,,922,Sunsplash Golden Ale (2004),American Blonde Ale,492,12.0
+2021,0.051,25.0,1410,Sand Island Lighthouse,Kölsch,412,12.0
+2022,0.05,30.0,925,Lily Flagg Milk Stout,Milk / Sweet Stout,412,12.0
+2023,0.07200000000000001,70.0,637,Monkeynaut IPA,American IPA,412,12.0
+2024,0.05,,2369,Straub Beer (Current),American Adjunct Lager,129,12.0
+2025,0.040999999999999995,8.0,2233,American Lager,American Adjunct Lager,129,12.0
+2026,0.040999999999999995,8.0,2232,American Amber,American Amber / Red Lager,129,12.0
+2027,0.032,13.0,2231,American Light,Light Lager,129,12.0
+2028,0.053,49.0,2352,Extra Pale Ale,American Pale Ale (APA),138,12.0
+2029,0.053,40.0,2549,Make It So,Extra Special / Strong Bitter (ESB),58,12.0
+2030,0.047,55.0,2473,Hopvale Organic Ale,American Pale Ale (APA),58,16.0
+2031,0.083,100.0,2415,Unchained #18 Hop Silo,American Double / Imperial IPA,58,16.0
+2032,0.052000000000000005,29.0,2605,Tip Off,Altbier,25,16.0
+2033,0.054000000000000006,,2215,Java Mac,Scottish Ale,25,16.0
+2034,0.054000000000000006,23.0,2164,Cowbell,American Porter,25,16.0
+2035,0.057999999999999996,20.0,2085,Hop Up Offa That Brett (2014),Belgian Pale Ale,25,16.0
+2036,0.083,23.0,2084,PV Muckle (2013),Scotch Ale / Wee Heavy,25,16.0
+2037,0.099,36.0,2083,Bourbon Barrel Batch 666: Sympathy for the Devil,Belgian Dark Ale,25,16.0
+2038,0.09,30.0,2082,Whip Fight,Scotch Ale / Wee Heavy,25,16.0
+2039,0.053,23.0,2081,Port Barrel Wee Mac ,Scotch Ale / Wee Heavy,25,16.0
+2040,0.064,75.0,2001,Fistful Of Hops Red,American IPA,25,16.0
+2041,0.063,75.0,2000,Fistful of Hops Orange,American IPA,25,16.0
+2042,0.064,75.0,1999,Fistful Of Hops Blue,American IPA,25,16.0
+2043,0.064,75.0,1996,Fistful of Hops Green,American IPA,25,16.0
+2044,,,1948,30 Min Coma,Belgian IPA,25,16.0
+2045,0.09,30.0,1656,Wee Muckle,Scotch Ale / Wee Heavy,25,16.0
+2046,0.065,55.0,1599,Royal Brat,Extra Special / Strong Bitter (ESB),25,16.0
+2047,0.075,77.0,1420,Grapefruit Jungle (GFJ),American IPA,25,16.0
+2048,0.055999999999999994,50.0,1389,Osiris Pale Ale,American Pale Ale (APA),25,16.0
+2049,0.099,75.0,1367,Bourbon Barrel Aged Timmie,Russian Imperial Stout,25,16.0
+2050,0.063,23.0,1366,Stupid Sexy Flanders,Flanders Oud Bruin,25,16.0
+2051,,,1347,Bourbon Barrel Cowbell,American Porter,25,16.0
+2052,0.054000000000000006,,1314,Popcorn Pilsner,German Pilsener,25,16.0
+2053,0.071,27.0,1128,Ring of Dingle,Irish Dry Stout,25,16.0
+2054,0.054000000000000006,23.0,1127,Bourbon Barrel Wee Mac,Scottish Ale,25,16.0
+2055,0.099,60.0,1049,Bourbon Barrel Johan,English Barleywine,25,16.0
+2056,0.07,,934,The Deuce,American Brown Ale,25,16.0
+2057,0.09,24.0,923,The Velvet Fog,Quadrupel (Quad),25,16.0
+2058,0.055,23.0,874,Sun King Oktoberfest,Märzen / Oktoberfest,25,16.0
+2059,0.052000000000000005,24.0,739,Indianapolis Indians Lager,Dortmunder / Export Lager,25,16.0
+2060,0.052000000000000005,24.0,698,Indians Victory Lager (2012),Dortmunder / Export Lager,25,16.0
+2061,0.08,,660,Chaka,Belgian Strong Pale Ale,25,16.0
+2062,0.091,91.0,651,Isis,American Double / Imperial IPA,25,16.0
+2063,0.09,30.0,584,Wee Muckle (2011),Scotch Ale / Wee Heavy,25,16.0
+2064,0.075,77.0,532,Grapefruit Jungle (GFJ) (2011),American IPA,25,16.0
+2065,0.055,23.0,526,Sun King Oktoberfest (2011),Märzen / Oktoberfest,25,16.0
+2066,0.099,60.0,394,Johan the Barleywine,English Barleywine,25,16.0
+2067,0.054000000000000006,23.0,213,Wee Mac Scottish-Style Ale,Scottish Ale,25,16.0
+2068,0.053,20.0,55,Sunlight Cream Ale,Cream Ale,25,16.0
+2069,0.055999999999999994,50.0,54,Osiris Pale Ale (2010),American Pale Ale (APA),25,16.0
+2070,0.045,,1207,Dam Lager,American Amber / Red Lager,455,12.0
+2071,0.07,,1206,Red Clay IPA,American IPA,455,12.0
+2072,0.07200000000000001,,2543,Todd the Axe Man,American IPA,61,16.0
+2073,0.057,,2409,Doomtree,Extra Special / Strong Bitter (ESB),61,16.0
+2074,0.099,85.0,1739,BLAKKR,American Black Ale,61,16.0
+2075,0.073,69.0,1112,Overrated! West Coast Style IPA,American IPA,61,16.0
+2076,0.075,90.0,329,WET,American IPA,61,16.0
+2077,0.04,37.0,19,Bitter Brewer,English Bitter,61,16.0
+2078,0.055,34.0,18,SurlyFest,Rye Beer,61,16.0
+2079,0.051,45.0,17,Coffee Bender,American Brown Ale,61,16.0
+2080,0.051,45.0,16,Bender,American Brown Ale,61,16.0
+2081,0.09699999999999999,120.0,15,Abrasive Ale,American Double / Imperial IPA,61,16.0
+2082,0.051,20.0,14,Hell,Keller Bier / Zwickel Bier,61,16.0
+2083,0.067,33.0,13,CynicAle,Saison / Farmhouse Ale,61,16.0
+2084,0.062,99.0,12,Furious,American IPA,61,16.0
+2085,0.073,50.0,1242,Big Nose,American IPA,447,12.0
+2086,0.05,10.0,1241,Cotton Mouth,Witbier,447,12.0
+2087,0.055999999999999994,35.0,1240,Stump Knocker Pale Ale,American Pale Ale (APA),447,12.0
+2088,0.05,38.0,1239,Midnight Oil,Oatmeal Stout,447,12.0
+2089,0.059000000000000004,18.0,1238,Wild Night,Cream Ale,447,12.0
+2090,0.045,,1554,Bermuda Triangle Ginger Beer,Herbed / Spiced Beer,381,12.0
+2091,0.055,35.0,2568,Take Two Pils,German Pilsener,49,12.0
+2092,0.057,,2551,Waterkeeper,Hefeweizen,49,12.0
+2093,0.064,,1710,SweetWater IPA,American IPA,49,12.0
+2094,0.054000000000000006,,1709,420 Extra Pale Ale,American Pale Ale (APA),49,12.0
+2095,0.08,95.0,1229,Dodgy Knight Imperial IPA,American Double / Imperial IPA,449,12.0
+2096,0.05,,1164,TailGate Saison,Saison / Farmhouse Ale,449,12.0
+2097,0.05,44.0,663,TailGate IPA,American IPA,449,24.0
+2098,0.05,44.0,662,TailGate IPA,American IPA,449,12.0
+2099,0.049,28.0,623,TailGate Hefeweizen,Hefeweizen,449,24.0
+2100,0.05,19.0,622,Blacktop Blonde,American Blonde Ale,449,24.0
+2101,0.05,19.0,362,Blacktop Blonde,American Blonde Ale,449,12.0
+2102,0.049,28.0,361,TailGate Hefeweizen,Hefeweizen,449,12.0
+2103,0.085,34.0,2575,Wooden Rooster,Tripel,45,16.9
+2104,0.048,20.0,2555,Ginger Peach Saison,Saison / Farmhouse Ale,45,16.0
+2105,0.062,35.0,1736,Zombie Monkie,American Porter,45,16.0
+2106,0.055999999999999994,20.0,1196,Wild Plum Farmhouse Ale,Saison / Farmhouse Ale,45,16.0
+2107,0.05,20.0,1063,Vanilla Bean Buffalo Sweat,Oatmeal Stout,45,16.0
+2108,0.068,110.0,1017,Ethos IPA,American IPA,45,16.0
+2109,0.044000000000000004,12.0,1009,Tallgrass Pub Ale,American Brown Ale,45,16.0
+2110,0.07200000000000001,93.0,912,Oasis,Extra Special / Strong Bitter (ESB),45,16.0
+2111,0.05,20.0,765,Buffalo Sweat,Milk / Sweet Stout,45,16.0
+2112,0.05,20.0,676,Halcyon Unfiltered Wheat,American Pale Wheat Ale,45,16.0
+2113,0.052000000000000005,,595,8-Bit Pale Ale,American Pale Ale (APA),45,16.0
+2114,0.085,,537,Velvet Rooster,Tripel,45,16.0
+2115,0.05,20.0,412,Halcyon Unfiltered Wheat,American Pale Wheat Ale,45,12.0
+2116,0.05,16.0,105,Köld Lager (2010),German Pilsener,45,16.0
+2117,0.07200000000000001,93.0,104,Oasis (2010),American Double / Imperial IPA,45,16.0
+2118,0.044000000000000004,22.0,103,Tallgrass Ale,American Brown Ale,45,16.0
+2119,0.05,20.0,102,Buffalo Sweat (2010),Milk / Sweet Stout,45,16.0
+2120,0.063,60.0,101,Tallgrass IPA,American IPA,45,16.0
+2121,0.068,,1433,Hat Trick Hop IPA,American IPA,409,16.0
+2122,0.055999999999999994,,1432,Yard Sale Amber Ale,American Amber / Red Ale,409,16.0
+2123,0.055,,936,Loafin Bräu,Altbier,490,16.0
+2124,0.07,80.0,544,Old Elephant Foot IPA,American IPA,490,16.0
+2125,0.065,35.0,2640,Peck's Porter,American Porter,7,16.0
+2126,0.07,,2448,Reactor,American IPA,7,16.0
+2127,0.057,,2447,Mr. Orange,Witbier,7,16.0
+2128,0.08,22.0,2601,Deduction,Dubbel,28,12.0
+2129,0.057,,973,Face Down Brown Ale,American Brown Ale,480,12.0
+2130,0.064,,827,Tempter IPA,American IPA,480,12.0
+2131,0.055,,589,Bridal Veil Rye Pale Ale,American Pale Ale (APA),480,12.0
+2132,0.048,,2155,Smittytown,Extra Special / Strong Bitter (ESB),210,12.0
+2133,0.04,,1982,Greenwood Beach,Fruit / Vegetable Beer,210,12.0
+2134,0.066,,1939,Gatecrasher,English India Pale Ale (IPA),210,12.0
+2135,0.047,42.0,1082,RecreationAle,American Pale Ale (APA),469,12.0
+2136,0.055,35.0,2119,First Stand,Saison / Farmhouse Ale,215,12.0
+2137,0.063,23.0,2118,Battle LIne,American Brown Ale,215,12.0
+2138,0.055999999999999994,12.0,2117,Broken Bridge,Dunkelweizen,215,12.0
+2139,0.071,69.0,2116,Brutus,English India Pale Ale (IPA),215,12.0
+2140,0.06,,1916,Petit Mutant,American Wild Ale,272,16.0
+2141,0.096,,1915,The Crusher,American Double / Imperial IPA,272,16.0
+2142,0.08,,1914,Beelzebub,American Double / Imperial Stout,272,16.0
+2143,0.07,,1810,Focal Banger,American IPA,272,16.0
+2144,0.08,120.0,1111,Heady Topper,American Double / Imperial IPA,272,16.0
+2145,0.08,120.0,379,Heady Topper,American Double / Imperial IPA,272,16.0
+2146,0.046,20.0,1200,Bomber Mountain Amber Ale (2013),American Amber / Red Ale,457,12.0
+2147,0.07,75.0,1199,Indian Paintbrush IPA,American IPA,457,12.0
+2148,0.048,16.0,1198,Saddle Bronc Brown Ale (2013),English Brown Ale,457,12.0
+2149,0.059000000000000004,15.0,1197,Wagon Box Wheat Beer,American Pale Wheat Ale,457,12.0
+2150,0.05,,1945,Birdhouse Pale Ale,Belgian Pale Ale,262,12.0
+2151,0.073,,1079,Ozzy,Belgian Pale Ale,262,12.0
+2152,0.07,,94,Resurrection,Dubbel,262,12.0
+2153,0.052000000000000005,16.0,1748,Bronx Summer Pale Ale,American Pale Ale (APA),329,16.0
+2154,0.057,46.0,1747,Bronx Black Pale Ale,American Black Ale,329,16.0
+2155,0.063,50.0,1037,Bronx Pale Ale,American Pale Ale (APA),329,16.0
+2156,0.052000000000000005,35.0,2594,Surfrider,American Pale Ale (APA),33,16.0
+2157,0.055,,2035,Kolschtal Eddy,Kölsch,33,16.0
+2158,0.05,,2034,South Bay Session IPA,American IPA,33,16.0
+2159,0.069,34.0,1562,Grandma's Pecan,English Brown Ale,33,16.0
+2160,0.099,101.0,1561,Double Trunk,American Double / Imperial IPA,33,16.0
+2161,0.046,45.0,1749,Just IPA,American IPA,328,12.0
+2162,0.045,,2455,Lionshead,American Pilsner,90,12.0
+2163,,,963,Manhattan Gold Lager (1990),American Amber / Red Lager,484,12.0
+2164,0.052000000000000005,,2638,G. B. Russo’s Italian Pistachio Pale Ale,American Pale Ale (APA),9,16.0
+2165,0.057999999999999996,,1278,Northern Hawk Owl Amber,American Amber / Red Ale,438,12.0
+2166,0.059000000000000004,,1277,CEO Stout,American Stout,438,16.0
+2167,0.047,,1276,Will Power Pale Ale,American Pale Ale (APA),438,16.0
+2168,0.044000000000000004,,1732,Curious Traveler Shandy,Shandy,334,12.0
+2169,0.048,18.0,2347,Hunny Do Wheat,American Pale Wheat Ale,142,12.0
+2170,0.052000000000000005,,1781,Three Way Pale Ale,American Pale Ale (APA),142,12.0
+2171,0.040999999999999995,,1780,Rise to the Top,Cream Ale,142,12.0
+2172,0.049,,1779,Lost Trout Brown Ale,American Brown Ale,142,12.0
+2173,0.051,11.0,2421,Watermelon Ale,Fruit / Vegetable Beer,108,12.0
+2174,0.04,18.0,2319,Knotty Blonde Ale,American Blonde Ale,153,12.0
+2175,0.062,40.0,2317,Fivepine Chocolate Porter,American Porter,153,12.0
+2176,0.062,82.0,2316,Hoodoo Voodoo IPA,American IPA,153,12.0
+2177,0.053,22.0,1913,Hydraulion Red,Irish Red Ale,273,12.0
+2178,0.06,50.0,1912,40 Mile IPA,American IPA,273,12.0
+2179,0.055,64.0,2617,Citra Faced,American Pale Wheat Ale,21,16.0
+2180,0.055,31.0,2616,Pole Barn Stout,Oatmeal Stout,21,16.0
+2181,0.054000000000000006,37.0,2615,Pale,American Pale Ale (APA),21,16.0
+2182,0.053,27.0,2614,Yoshi's Nectar,California Common / Steam Beer,21,16.0
+2183,0.052000000000000005,,1889,Leatherhead Red,American Amber / Red Ale,282,12.0
+2184,0.065,,1222,Cropduster Mid-American IPA,American IPA,282,12.0
+2185,0.075,,122,Golden Frau Honey Wheat,Braggot,282,12.0
+2186,,,121,Cornstalker Dark Wheat,American Dark Wheat Ale,282,12.0
+2187,0.057999999999999996,20.0,2623,Cafe Leche,American Porter,17,16.0
+2188,0.052000000000000005,12.0,2622,Damascene Apricot Sour,Fruit / Vegetable Beer,17,16.0
+2189,0.12,90.0,2621,Csar,Russian Imperial Stout,17,16.0
+2190,0.055,,1817,Klingon Warnog Roggen Dunkel,Roggenbier,17,16.0
+2191,0.085,115.0,1449,Overlord Imperial IPA,American Double / Imperial IPA,17,16.0
+2192,0.057999999999999996,36.0,951,Alloy,American IPA,17,16.0
+2193,0.051,22.0,950,Rivet Irish Red Ale,Irish Red Ale,17,16.0
+2194,0.052000000000000005,50.0,949,3 Gear Robust Porter,American Porter,17,16.0
+2195,0.045,35.0,948,Circuit Bohemian Pilsner,Czech Pilsener,17,16.0
+2196,0.055,,2321,Turnrow Harvest Ale,American Blonde Ale,152,12.0
+2197,0.07,60.0,1755,Juke Joint IPA,American IPA,152,12.0
+2198,0.07,35.0,1754,Parade Ground Coffee Porter,American Porter,152,12.0
+2199,0.05,21.0,1428,Tin Roof Watermelon Wheat,Fruit / Vegetable Beer,152,12.0
+2200,0.045,18.0,529,Tin Roof Blonde Ale,American Blonde Ale,152,12.0
+2201,0.055,37.0,495,Voodoo Bengal Pale Ale,American Pale Ale (APA),152,12.0
+2202,0.045,28.0,494,Perfect Tin Amber,American Amber / Red Ale,152,12.0
+2203,0.073,87.0,1856,IPA & a Half,American IPA,291,12.0
+2204,0.055,33.0,736,Ornery Amber Lager (2003),Vienna Lager,291,12.0
+2205,0.05,,1027,Big Island Shandy,Shandy,474,16.0
+2206,0.068,,1026,Preservation IPA,American IPA,474,16.0
+2207,0.062,72.0,1938,Almanac IPA,American IPA,265,12.0
+2208,0.065,,1937,Milk Mustachio Stout,Milk / Sweet Stout,265,12.0
+2209,0.06,30.0,1936,Farmer's Tan Red Ale,American Amber / Red Ale,265,12.0
+2210,0.057,,594,Triangle India Pale Ale,American IPA,524,12.0
+2211,0.05,,114,Triangle White Ale,Witbier,524,12.0
+2212,0.08,,113,Triangle Belgian Golden Ale,Belgian Strong Pale Ale,524,12.0
+2213,0.08199999999999999,,2445,Troegenator,Doppelbock,97,16.0
+2214,0.075,93.0,2444,Nugget Nectar,American Amber / Red Ale,97,16.0
+2215,0.045,45.0,2203,Sunshine Pils,American Pilsner,97,12.0
+2216,0.08199999999999999,25.0,1510,Troegenator Doublebock,Doppelbock,97,16.0
+2217,0.075,85.0,1509,Perpetual IPA,American IPA,97,12.0
+2218,0.055,52.0,433,Greenville Pale Ale,American Pale Ale (APA),539,12.0
+2219,0.062,65.0,641,Hoppy Boy,American IPA,520,16.0
+2220,0.054000000000000006,26.0,2588,Cow Creek,American Amber / Red Lager,38,12.0
+2221,0.075,63.0,2458,Chupahopra,American IPA,38,12.0
+2222,0.051,19.0,2212,Twisted X,American Adjunct Lager,38,12.0
+2223,0.040999999999999995,41.0,2235,Day Hike Session,American IPA,190,12.0
+2224,0.048,48.0,1661,Trailhead ISA,American IPA,190,12.0
+2225,0.052000000000000005,27.0,1660,Immersion Amber,American Amber / Red Ale,190,12.0
+2226,0.062,70.0,1659,Evo IPA,American IPA,190,12.0
+2227,0.048,,1438,Presidential Pils,Czech Pilsener,190,12.0
+2228,0.062,70.0,1173,Evolutionary IPA (2012),American IPA,190,12.0
+2229,0.057,36.0,560,Persnickety Pale,American Pale Ale (APA),190,12.0
+2230,0.054000000000000006,20.0,519,SoDo Brown Ale,American Brown Ale,190,12.0
+2231,0.052000000000000005,27.0,518,Immersion Amber Ale (2011),American Amber / Red Ale,190,12.0
+2232,0.062,70.0,505,Evolutionary IPA (2011),American IPA,190,12.0
+2233,0.048,48.0,482,Trailhead India Style Session Ale (2011),American IPA,190,12.0
+2234,0.046,,451,Panorama Wheat Ale,American Pale Wheat Ale,190,12.0
+2235,0.063,69.0,2497,Wobble,American IPA,74,16.0
+2236,0.057999999999999996,43.0,2246,Night Cat,American Dark Wheat Ale,74,12.0
+2237,0.057999999999999996,43.0,1630,Night Cat (2014),American Dark Wheat Ale,74,12.0
+2238,0.051,17.0,1284,Dog Days Lager,Dortmunder / Export Lager,74,12.0
+2239,0.051,36.0,1121,Sidekick Extra Pale Ale,American Pale Ale (APA),74,12.0
+2240,0.077,23.0,1042,Atom Smasher,Märzen / Oktoberfest,74,12.0
+2241,0.045,,1041,Testudo,Bière de Garde,74,12.0
+2242,0.065,,1040,Hobnob B & B Pale Ale,American Pale Ale (APA),74,12.0
+2243,0.07,68.0,861,Cane and Ebel,American Strong Ale,74,12.0
+2244,0.065,,642,Outlaw IPA (2015),American IPA,74,12.0
+2245,0.045,,2037,The Gilded Age,Munich Helles Lager,243,12.0
+2246,0.05,,1285,No Limits Hefeweizen,Hefeweizen,435,16.0
+2247,0.06,,1189,Honeyspot Road White IPA,American White IPA,435,12.0
+2248,0.07200000000000001,,1171,Road 2 Ruin Double IPA,American Double / Imperial IPA,435,12.0
+2249,0.048,,1170,Workers Comp Saison,Saison / Farmhouse Ale,435,12.0
+2250,0.05,,1169,Ol' Factory Pils,German Pilsener,435,12.0
+2251,0.05,10.0,2310,PUNK'N,Pumpkin Ale,159,12.0
+2252,0.04,22.0,2100,Yard Sale Winter Lager,American Amber / Red Lager,159,12.0
+2253,0.04,42.0,1925,Trader Session IPA,American IPA,159,12.0
+2254,0.073,83.0,1723,Hop Nosh IPA,American IPA,159,12.0
+2255,0.04,17.0,1212,SUM'R,American Blonde Ale,159,12.0
+2256,0.04,32.0,1097,Organic Baba Black Lager,Schwarzbier,159,12.0
+2257,0.073,82.0,1089,Hop Notch IPA (2013),American IPA,159,12.0
+2258,0.04,34.0,1088,Cutthroat Pale Ale,American Pale Ale (APA),159,12.0
+2259,0.04,29.0,974,WYLD Extra Pale Ale,American Pale Ale (APA),159,12.0
+2260,0.055,,98,Pilsner Ukiah,German Pilsener,555,12.0
+2261,0.06,75.0,2372,The Green Room,American IPA,126,16.0
+2262,0.047,25.0,2367,Humbucker Helles,Maibock / Helles Bock,126,16.0
+2263,0.065,,1704,Uncle John's Apple Cherry Cider,Cider,338,16.0
+2264,0.065,,1703,Uncle John's Apricot Apple Cider,Cider,338,16.0
+2265,0.065,,877,Draught Hard Apple Cider,Cider,338,16.0
+2266,0.001,,606,Scotty K NA,Low Alcohol Beer,522,16.0
+2267,0.068,,543,Bacon Brown Ale,American Brown Ale,522,16.0
+2268,0.064,,347,Golden State Ale,Belgian Pale Ale,522,16.0
+2269,0.078,,346,Baltic Porter,Baltic Porter,522,16.0
+2270,0.085,,25,Siamese twin,Dubbel,522,16.0
+2271,0.085,90.0,2507,Double Duckpin,American Double / Imperial IPA,71,12.0
+2272,0.042,10.0,2506,Old Pro,Gose,71,12.0
+2273,0.055,,829,Duckpin Pale Ale,American Pale Ale (APA),71,12.0
+2274,0.06,,582,Balt Altbier,Altbier,71,12.0
+2275,0.045,50.0,2190,Campside Session IPA,American IPA,202,16.0
+2276,0.045,15.0,1951,Upland Wheat Ale,Witbier,202,16.0
+2277,0.06,,1950,Dragonfly IPA,American IPA,202,16.0
+2278,0.128,,2565,Lee Hill Series Vol. 5 - Belgian Style Quadrupel Ale,Quadrupel (Quad),51,19.2
+2279,0.10400000000000001,,2564,Lee Hill Series Vol. 4 - Manhattan Style Rye Ale,Rye Beer,51,19.2
+2280,0.068,24.0,2563,Lee Hill Series Vol. 2 - Wild Saison,American Wild Ale,51,19.2
+2281,0.099,51.0,2562,Lee Hill Series Vol. 3 - Barrel Aged Imperial Stout,American Double / Imperial Stout,51,19.2
+2282,0.076,,2561,Lee Hill Series Vol. 1 - Barrel Aged Brown Ale,American Brown Ale,51,19.2
+2283,0.06,,2560,Blood Orange Saison,Saison / Farmhouse Ale,51,12.0
+2284,0.065,33.0,1932,Thai Style White IPA,American White IPA,51,12.0
+2285,0.075,30.0,1853,Ferus Fluxus Wild Belgian Pale Ale,American Wild Ale,51,19.2
+2286,0.099,90.0,1315,Upslope Imperial India Pale Ale,American Double / Imperial IPA,51,19.2
+2287,0.08199999999999999,,907,Upslope Christmas Ale,Winter Warmer,51,16.0
+2288,0.077,,906,Upslope Pumpkin Ale,Pumpkin Ale,51,16.0
+2289,0.075,30.0,683,Upslope Belgian Style Pale Ale,Belgian Pale Ale,51,12.0
+2290,0.069,,614,Upslope Foreign Style Stout,Foreign / Export Stout,51,12.0
+2291,0.048,15.0,466,Top Rope Mexican-style Craft Lager,Vienna Lager,51,12.0
+2292,0.048,22.0,444,Upslope Craft Lager,Vienna Lager,51,12.0
+2293,0.067,,345,Upslope Brown Ale,English Brown Ale,51,12.0
+2294,0.057999999999999996,,80,Upslope Pale Ale,American Pale Ale (APA),51,12.0
+2295,0.07200000000000001,,79,Upslope India Pale Ale,American IPA,51,12.0
+2296,0.053,22.0,382,Common Sense Kentucky Common Ale,American Brown Ale,546,16.0
+2297,0.065,70.0,381,Upstate I.P.W.,American IPA,546,12.0
+2298,0.04,,1826,Squatters Full Suspension Pale Ale,American Pale Ale (APA),302,12.0
+2299,0.09,75.0,1825,Squatters Hop Rising Double IPA,American Double / Imperial IPA,302,12.0
+2300,0.08,,1824,Devastator Double Bock,Doppelbock,302,12.0
+2301,0.06,,1823,Wasatch Ghostrider White IPA,American White IPA,302,12.0
+2302,0.06,,1682,Wasatch Ghostrider White IPA (2014),American White IPA,302,12.0
+2303,0.04,,1681,Wasatch Apricot Hefeweizen,Fruit / Vegetable Beer,302,12.0
+2304,0.09,75.0,1680,Squatters Hop Rising Double IPA (2014),American Double / Imperial IPA,302,12.0
+2305,0.04,,1679,Squatters Full Suspension Pale Ale,American Pale Ale (APA),302,12.0
+2306,0.068,,2245,Nunica Pine,Cider,185,16.0
+2307,0.069,,2244,Ginger Peach,Cider,185,16.0
+2308,0.068,,1378,Totally Roasted,Cider,185,16.0
+2309,0.068,,1377,Blue Gold,Cider,185,16.0
+2310,0.068,,1376,Hard Apple,Cider,185,16.0
+2311,0.052000000000000005,,2411,Nitro Can Coffee Stout,American Stout,113,12.0
+2312,0.092,25.0,1770,Voodoo Love Child,Tripel,322,12.0
+2313,0.079,23.0,1769,White Magick of the Sun,Witbier,322,12.0
+2314,0.075,31.0,1730,Wynona's Big Brown Ale,American Brown Ale,322,12.0
+2315,0.092,25.0,1729,Gran Met,Belgian Strong Pale Ale,322,12.0
+2316,0.073,85.0,1603,Good Vibes IPA,American IPA,322,12.0
+2317,0.075,85.0,1488,Pilzilla,American Double / Imperial Pilsner,322,12.0
+2318,0.04,37.0,1846,Wachusett Light IPA,American IPA,295,12.0
+2319,0.06,55.0,1845,Green Monsta IPA,American IPA,295,12.0
+2320,0.055999999999999994,50.0,1844,Wachusett IPA,American IPA,295,12.0
+2321,0.047,,1843,Strawberry White,Witbier,295,12.0
+2322,0.085,85.0,1418,Larry Imperial IPA,American Double / Imperial IPA,295,12.0
+2323,0.047,,1038,Wachusett Summer,American Pale Wheat Ale,295,12.0
+2324,0.051,17.0,1030,Country Pale Ale,English Pale Ale,295,12.0
+2325,0.04,37.0,1029,Wachusett Light IPA (2013),American IPA,295,12.0
+2326,0.052000000000000005,20.0,908,Pumpkan,Pumpkin Ale,295,12.0
+2327,0.045,10.0,619,Wachusett Blueberry Ale,Fruit / Vegetable Beer,295,12.0
+2328,0.06,55.0,618,Green Monsta IPA,American IPA,295,12.0
+2329,0.047,,780,T-6 Red Ale (2004),American Amber / Red Ale,506,12.0
+2330,0.052000000000000005,67.0,2450,Self Starter,American IPA,94,16.0
+2331,0.054000000000000006,20.0,2223,Ermal's,Cream Ale,94,16.0
+2332,0.07,,2222,10 Ton,Oatmeal Stout,94,16.0
+2333,0.07,,2221,Flyin' Rye,American IPA,94,16.0
+2334,0.09,,2439,Christmas Ale,Herbed / Spiced Beer,100,12.0
+2335,0.07,,2356,Pay It Forward Cocoa Porter,American Porter,100,12.0
+2336,0.055,,1069,West Sixth Amber Ale,American Amber / Red Ale,100,12.0
+2337,,,652,West Sixth IPA,American IPA,100,12.0
+2338,0.055,,1542,One Claw,American Pale Ale (APA),384,12.0
+2339,0.04,5.0,1312,Westbrook Gose,Gose,384,12.0
+2340,0.05,16.0,576,White Thai,Witbier,384,12.0
+2341,0.068,65.0,575,Westbrook IPA,American IPA,384,12.0
+2342,0.057,22.0,1645,Westfield Octoberfest,Märzen / Oktoberfest,351,12.0
+2343,0.052000000000000005,,1551,Pop's Old Fashioned Lager,American Amber / Red Lager,351,12.0
+2344,0.057999999999999996,55.0,1550,Charlie in the Rye,American IPA,351,12.0
+2345,,,2364,Royal Lager,American Pale Lager,132,16.0
+2346,0.08,,2348,Rip Van Winkle (Current),Bock,132,12.0
+2347,,,2344,O’Malley’s Stout,English Stout,132,12.0
+2348,0.075,89.0,2343,O’Malley’s IPA,American IPA,132,12.0
+2349,,,2342,O’Malley’s Irish Style Cream Ale,Cream Ale,132,12.0
+2350,0.049,28.0,2341,L'il Lucy's Hot Pepper Ale,Chile Beer,132,12.0
+2351,0.052000000000000005,,2340,Drop Kick Ale,American Amber / Red Ale,132,12.0
+2352,0.055,,2573,Raspberry Berliner Weisse,Berliner Weissbier,47,12.0
+2353,0.05,,2572,Hop Session,American IPA,47,12.0
+2354,0.055,,2571,Blueberry Berliner Weisse,Berliner Weissbier,47,12.0
+2355,0.055,,2570,Berliner Weisse,Berliner Weissbier,47,12.0
+2356,0.06,,1498,Super G IPA,American IPA,396,16.0
+2357,0.049,30.0,1838,Hefe Lemon,Radler,296,12.0
+2358,0.049,30.0,1837,Hefe Black,Hefeweizen,296,12.0
+2359,0.049,30.0,1836,Widmer Brothers Hefeweizen,Hefeweizen,296,12.0
+2360,0.08199999999999999,100.0,1619,Hop Slayer Double IPA,American Double / Imperial IPA,361,12.0
+2361,0.045,,1618,Pumpkin Ale,Pumpkin Ale,361,12.0
+2362,0.05,,1364,Big Bowl Blonde Ale,American Brown Ale,361,12.0
+2363,0.052000000000000005,27.0,971,Phat Chance,American Blonde Ale,361,12.0
+2364,0.08199999999999999,100.0,740,Hop Slayer Double IPA (2011),American Double / Imperial IPA,361,12.0
+2365,0.08199999999999999,100.0,430,Hop Slayer Double IPA (2011),American Double / Imperial IPA,361,12.0
+2366,0.042,13.0,398,Wild Onion Summer Wit,Witbier,361,12.0
+2367,0.06,23.0,366,Jack Stout,Oatmeal Stout,361,12.0
+2368,0.045,,334,Wild Onion Pumpkin Ale (2010),Pumpkin Ale,361,12.0
+2369,0.055999999999999994,41.0,162,Paddy Pale Ale,American Pale Ale (APA),361,12.0
+2370,0.068,21.0,2253,Blonde Hunny,Belgian Pale Ale,181,12.0
+2371,0.057,20.0,1318,Wild Wolf Wee Heavy Scottish Style Ale,Scotch Ale / Wee Heavy,181,12.0
+2372,0.045,25.0,1195,Wild Wolf American Pilsner,American Pilsner,181,12.0
+2373,0.051,45.0,1194,Alpha Ale,American Pale Ale (APA),181,12.0
+2374,0.054000000000000006,,826,Mystical Stout,Irish Dry Stout,499,16.0
+2375,0.075,,825,Bodacious Bock,Bock,499,16.0
+2376,0.05,,813,Ambitious Lager,Munich Helles Lager,499,16.0
+2377,0.07200000000000001,,324,Wyoming Pale Ale,American Pale Ale (APA),550,16.0
+2378,0.05,,323,Wind River Blonde Ale,American Blonde Ale,550,16.0
+2379,0.07400000000000001,83.0,762,Ace IPA,American IPA,509,16.0
+2380,0.08,31.0,761,P-51 Porter,American Porter,509,16.0
+2381,0.055,,2149,#001 Golden Amber Lager,American Amber / Red Lager,211,12.0
+2382,0.071,60.0,2148,#002 American I.P.A.,American IPA,211,12.0
+2383,0.052000000000000005,,2147,#003 Brown & Robust Porter,American Porter,211,12.0
+2384,0.048,38.0,2146,#004 Session I.P.A.,American IPA,211,12.0
+2385,0.059000000000000004,,2047,Tarasque,Saison / Farmhouse Ale,239,12.0
+2386,0.062,61.0,1470,Ananda India Pale Ale,American IPA,239,12.0
+2387,0.045,23.0,1469,Tiny Bomb,American Pilsner,239,12.0
+2388,0.057999999999999996,72.0,2627,Train Hopper,American IPA,14,12.0
+2389,0.045,,2626,Edward’s Portly Brown,American Brown Ale,14,12.0
+2390,0.059000000000000004,135.0,1676,Troopers Alley IPA,American IPA,344,12.0
+2391,0.047,15.0,1468,Wolverine Premium Lager,American Pale Lager,402,12.0
+2392,0.05,,822,Woodchuck Amber Hard Cider,Cider,501,12.0
+2393,0.065,82.0,2417,4000 Footer IPA,American IPA,109,12.0
+2394,0.027999999999999997,15.0,2306,Summer Brew,American Pilsner,109,12.0
+2395,0.065,69.0,1697,Be Hoppy IPA,American IPA,339,16.0
+2396,0.069,69.0,2194,Worthy IPA,American IPA,199,12.0
+2397,0.045,25.0,1514,Easy Day Kolsch,Kölsch,199,12.0
+2398,0.077,30.0,1513,Lights Out Vanilla Cream Extra Stout,American Double / Imperial IPA,199,12.0
+2399,0.069,69.0,1512,Worthy IPA (2013),American IPA,199,12.0
+2400,0.06,50.0,1511,Worthy Pale,American Pale Ale (APA),199,12.0
+2401,0.042,,1345,Patty's Chile Beer,Chile Beer,424,12.0
+2402,0.08199999999999999,,1316,Colorojo Imperial Red Ale,American Strong Ale,424,12.0
+2403,0.055,,1045,Wynkoop Pumpkin Ale,Pumpkin Ale,424,12.0
+2404,0.075,,1035,Rocky Mountain Oyster Stout,American Stout,424,12.0
+2405,0.067,45.0,928,Belgorado,Belgian IPA,424,12.0
+2406,0.052000000000000005,,807,Rail Yard Ale,American Amber / Red Ale,424,12.0
+2407,0.055,,620,B3K Black Lager,Schwarzbier,424,12.0
+2408,0.055,40.0,145,Silverback Pale Ale,American Pale Ale (APA),424,12.0
+2409,0.052000000000000005,,84,Rail Yard Ale (2009),American Amber / Red Ale,424,12.0
diff --git a/plugins/riot/riot.gradle b/plugins/riot/riot.gradle
index 69687b2fb..600691dc4 100644
--- a/plugins/riot/riot.gradle
+++ b/plugins/riot/riot.gradle
@@ -60,7 +60,9 @@ dependencies {
     annotationProcessor group: 'info.picocli', name: 'picocli-codegen', version: picocliVersion
     implementation group: 'me.tongfei', name: 'progressbar', version: progressbarVersion
     implementation group: 'org.codehaus.plexus', name: 'plexus-utils', version:plexusVersion
-    runtimeOnly 'org.slf4j:slf4j-simple'
+    implementation 'org.slf4j:slf4j-simple'
+    testImplementation group: 'com.redis', name: 'spring-batch-redis', version: springBatchRedisVersion, classifier: 'tests'
+    testImplementation group: 'org.awaitility', name: 'awaitility', version: awaitilityVersion
 }
 
 bootStartScripts.enabled = false
diff --git a/plugins/riot/src/main/java/com/redis/riot/cli/AbstractCommand.java b/plugins/riot/src/main/java/com/redis/riot/cli/AbstractCommand.java
index aa2c380da..12f8d589e 100644
--- a/plugins/riot/src/main/java/com/redis/riot/cli/AbstractCommand.java
+++ b/plugins/riot/src/main/java/com/redis/riot/cli/AbstractCommand.java
@@ -1,37 +1,21 @@
 package com.redis.riot.cli;
 
-import org.slf4j.event.Level;
-
 import com.redis.riot.core.Executable;
 
 import picocli.CommandLine.Command;
 import picocli.CommandLine.ParentCommand;
 
 @Command
-abstract class AbstractCommand extends BaseCommand implements Runnable {
-
-    protected static final String SLF4J_LOGGER = "org.slf4j.simpleLogger.";
+public abstract class AbstractCommand extends BaseCommand implements Runnable {
 
     @ParentCommand
-    protected C parent;
+    protected Main parent;
 
     @Override
     public void run() {
-        setup();
         getExecutable().execute();
     }
 
-    protected void setup() {
-        setLogLevel("defaultLogLevel", Level.ERROR);
-    }
-
-    protected void setLogLevel(String logger, Level level) {
-        if (level == null) {
-            return;
-        }
-        System.setProperty(SLF4J_LOGGER + logger, level.name().toLowerCase());
-    }
-
     protected abstract Executable getExecutable();
 
 }
diff --git a/plugins/riot/src/main/java/com/redis/riot/cli/AbstractImportCommand.java b/plugins/riot/src/main/java/com/redis/riot/cli/AbstractImportCommand.java
index 8b9c1129b..c0838111d 100644
--- a/plugins/riot/src/main/java/com/redis/riot/cli/AbstractImportCommand.java
+++ b/plugins/riot/src/main/java/com/redis/riot/cli/AbstractImportCommand.java
@@ -11,6 +11,7 @@
 import com.redis.riot.cli.operation.HsetCommand;
 import com.redis.riot.cli.operation.JsonSetCommand;
 import com.redis.riot.cli.operation.LpushCommand;
+import com.redis.riot.cli.operation.OperationCommand;
 import com.redis.riot.cli.operation.RpushCommand;
 import com.redis.riot.cli.operation.SaddCommand;
 import com.redis.riot.cli.operation.SetCommand;
@@ -19,7 +20,6 @@
 import com.redis.riot.cli.operation.XaddCommand;
 import com.redis.riot.cli.operation.ZaddCommand;
 import com.redis.riot.core.AbstractMapImport;
-import com.redis.riot.core.operation.OperationBuilder;
 import com.redis.spring.batch.writer.Operation;
 
 import picocli.CommandLine.ArgGroup;
@@ -29,7 +29,7 @@
         RpushCommand.class, SaddCommand.class, SetCommand.class, XaddCommand.class, ZaddCommand.class, SugaddCommand.class,
         JsonSetCommand.class,
         TsAddCommand.class }, subcommandsRepeatable = true, synopsisSubcommandLabel = "[REDIS COMMAND...]", commandListHeading = "Redis commands:%n")
-abstract class AbstractImportCommand extends AbstractJobCommand {
+public abstract class AbstractImportCommand extends AbstractJobCommand {
 
     @ArgGroup(exclusive = false, heading = "Processor options%n")
     private MapProcessorArgs processorArgs = new MapProcessorArgs();
@@ -37,18 +37,18 @@ abstract class AbstractImportCommand extends AbstractJobCommand {
     /**
      * Initialized manually during command parsing
      */
-    private List commands = new ArrayList<>();
+    private List commands = new ArrayList<>();
 
-    public List getCommands() {
+    public List getCommands() {
         return commands;
     }
 
-    public void setCommands(List commands) {
+    public void setCommands(List commands) {
         this.commands = commands;
     }
 
     protected List>> operations() {
-        return commands.stream().map(OperationBuilder::build).collect(Collectors.toList());
+        return commands.stream().map(OperationCommand::operation).collect(Collectors.toList());
     }
 
     @Override
diff --git a/plugins/riot/src/main/java/com/redis/riot/cli/AbstractJobCommand.java b/plugins/riot/src/main/java/com/redis/riot/cli/AbstractJobCommand.java
index c62cecf7c..a0d45140b 100644
--- a/plugins/riot/src/main/java/com/redis/riot/cli/AbstractJobCommand.java
+++ b/plugins/riot/src/main/java/com/redis/riot/cli/AbstractJobCommand.java
@@ -6,9 +6,8 @@
 import io.lettuce.core.AbstractRedisClient;
 import picocli.CommandLine.ArgGroup;
 
-abstract class AbstractJobCommand extends AbstractLoggingCommand
{ +abstract class AbstractJobCommand extends AbstractCommand { - // @Option(names = "--progress", description = "Style of progress bar: ${COMPLETION-CANDIDATES} (default: // ${DEFAULT-VALUE}),", paramLabel = "