You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by am...@apache.org on 2016/03/16 00:34:54 UTC

[1/3] incubator-asterixdb-hyracks git commit: Support Change Feeds and Ingestion of Records with MetaData

Repository: incubator-asterixdb-hyracks
Updated Branches:
  refs/heads/master 3f2f53914 -> 7dabc19f7


http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexBulkLoadOperatorNodePushable.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexBulkLoadOperatorNodePushable.java b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexBulkLoadOperatorNodePushable.java
index 142c64d..36b46a7 100644
--- a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexBulkLoadOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexBulkLoadOperatorNodePushable.java
@@ -41,11 +41,11 @@ public class IndexBulkLoadOperatorNodePushable extends AbstractUnaryInputUnaryOu
     protected final long numElementsHint;
     protected final boolean checkIfEmptyIndex;
     protected final IIndexDataflowHelper indexHelper;
+    protected final IRecordDescriptorProvider recDescProvider;
+    protected final PermutingFrameTupleReference tuple = new PermutingFrameTupleReference();
     protected FrameTupleAccessor accessor;
     protected IIndex index;
     protected IIndexBulkLoader bulkLoader;
-    protected IRecordDescriptorProvider recDescProvider;
-    protected PermutingFrameTupleReference tuple = new PermutingFrameTupleReference();
 
     public IndexBulkLoadOperatorNodePushable(IIndexOperatorDescriptor opDesc, IHyracksTaskContext ctx, int partition,
             int[] fieldPermutation, float fillFactor, boolean verifyInput, long numElementsHint,
@@ -90,6 +90,7 @@ public class IndexBulkLoadOperatorNodePushable extends AbstractUnaryInputUnaryOu
                 throw new HyracksDataException(e);
             }
         }
+
         FrameUtils.flushFrame(buffer, writer);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
index cf44305..9438632 100644
--- a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
@@ -64,7 +64,7 @@ public class IndexInsertUpdateDeleteOperatorNodePushable extends AbstractUnaryIn
         this.indexHelper = opDesc.getIndexDataflowHelperFactory().createIndexDataflowHelper(opDesc, ctx, partition);
         this.recordDescProvider = recordDescProvider;
         this.op = op;
-        tuple.setFieldPermutation(fieldPermutation);
+        this.tuple.setFieldPermutation(fieldPermutation);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/TreeIndexCreateOperatorDescriptor.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/TreeIndexCreateOperatorDescriptor.java b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/TreeIndexCreateOperatorDescriptor.java
index b315f8b..e3d00d5 100644
--- a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/TreeIndexCreateOperatorDescriptor.java
+++ b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/TreeIndexCreateOperatorDescriptor.java
@@ -43,8 +43,8 @@ public class TreeIndexCreateOperatorDescriptor extends AbstractTreeIndexOperator
             ILocalResourceFactoryProvider localResourceFactoryProvider,
             IModificationOperationCallbackFactory modificationOpCallbackFactory) {
         super(spec, 0, 0, null, storageManager, lifecycleManagerProvider, fileSplitProvider, typeTraits,
-                comparatorFactories, bloomFilterKeyFields, dataflowHelperFactory, null, false,
-                false, null, localResourceFactoryProvider, NoOpOperationCallbackFactory.INSTANCE, modificationOpCallbackFactory);
+                comparatorFactories, bloomFilterKeyFields, dataflowHelperFactory, null, false, false, null,
+                localResourceFactoryProvider, NoOpOperationCallbackFactory.INSTANCE, modificationOpCallbackFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/TypeAwareTupleWriter.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/TypeAwareTupleWriter.java b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/TypeAwareTupleWriter.java
index c44cb6b..1d55d4d 100644
--- a/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/TypeAwareTupleWriter.java
+++ b/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/TypeAwareTupleWriter.java
@@ -29,7 +29,7 @@ import org.apache.hyracks.util.encoding.VarLenIntEncoderDecoder;
 
 public class TypeAwareTupleWriter implements ITreeIndexTupleWriter {
 
-    protected ITypeTraits[] typeTraits;
+    protected final ITypeTraits[] typeTraits;
     protected VarLenIntEncoderDecoder.VarLenIntDecoder decoder = VarLenIntEncoderDecoder.createDecoder();
 
     public TypeAwareTupleWriter(ITypeTraits[] typeTraits) {
@@ -114,7 +114,7 @@ public class TypeAwareTupleWriter implements ITreeIndexTupleWriter {
     }
 
     protected int getNullFlagsBytes(ITupleReference tuple) {
-        return (int) Math.ceil((double) tuple.getFieldCount() / 8.0);
+        return (int) Math.ceil(tuple.getFieldCount() / 8.0);
     }
 
     protected int getFieldSlotsBytes(ITupleReference tuple) {
@@ -128,7 +128,7 @@ public class TypeAwareTupleWriter implements ITreeIndexTupleWriter {
     }
 
     protected int getNullFlagsBytes(int numFields) {
-        return (int) Math.ceil((double) numFields / 8.0);
+        return (int) Math.ceil(numFields / 8.0);
     }
 
     protected int getFieldSlotsBytes(ITupleReference tuple, int startField, int numFields) {
@@ -145,10 +145,6 @@ public class TypeAwareTupleWriter implements ITreeIndexTupleWriter {
         return typeTraits;
     }
 
-    public void setTypeTraits(ITypeTraits[] typeTraits) {
-        this.typeTraits = typeTraits;
-    }
-
     @Override
     public int getCopySpaceRequired(ITupleReference tuple) {
         return bytesRequired(tuple);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeUtils.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeUtils.java b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeUtils.java
index c175336..332ea78 100644
--- a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeUtils.java
+++ b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeUtils.java
@@ -168,7 +168,8 @@ public class LSMBTreeUtils {
             buddyBtreeCmpFactories[i] = cmpFactories[buddyBTreeFields[i]];
         }
 
-        TypeAwareTupleWriterFactory buddyBtreeTupleWriterFactory = new TypeAwareTupleWriterFactory(buddyBtreeTypeTraits);
+        TypeAwareTupleWriterFactory buddyBtreeTupleWriterFactory = new TypeAwareTupleWriterFactory(
+                buddyBtreeTypeTraits);
         ITreeIndexFrameFactory buddyBtreeInteriorFrameFactory = new BTreeNSMInteriorFrameFactory(
                 buddyBtreeTupleWriterFactory);
         ITreeIndexFrameFactory buddyBtreeLeafFrameFactory = new BTreeNSMLeafFrameFactory(buddyBtreeTupleWriterFactory);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java
index 7ee5802..4b8fc9b 100644
--- a/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java
@@ -27,9 +27,9 @@ import org.apache.hyracks.storage.am.lsm.common.api.LSMOperationType;
 
 public abstract class AbstractMemoryLSMComponent extends AbstractLSMComponent {
 
-    private int writerCount;
     private final IVirtualBufferCache vbc;
     private final AtomicBoolean isModified;
+    private int writerCount;
     private boolean requestedToBeActive;
 
     public AbstractMemoryLSMComponent(IVirtualBufferCache vbc, boolean isActive, ILSMComponentFilter filter) {
@@ -90,7 +90,7 @@ public abstract class AbstractMemoryLSMComponent extends AbstractLSMComponent {
             case REPLICATE:
             case SEARCH:
                 if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE
-                || state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
+                        || state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
                     readerCount++;
                 } else {
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
index efcd386..c4d2fcc 100644
--- a/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
@@ -37,6 +37,8 @@ import org.apache.hyracks.storage.common.buffercache.IBufferCache;
 import org.apache.hyracks.storage.common.buffercache.ICachedPage;
 
 public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
+    protected final ILSMIndexOperationContext opCtx;
+    protected final boolean returnDeletedTuples;
     protected PriorityQueueElement outputElement;
     protected IIndexCursor[] rangeCursors;
     protected PriorityQueueElement[] pqes;
@@ -46,8 +48,6 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
     protected boolean needPush;
     protected boolean includeMutableComponent;
     protected ILSMHarness lsmHarness;
-    protected final ILSMIndexOperationContext opCtx;
-    protected final boolean returnDeletedTuples;
 
     protected List<ILSMComponent> operationalComponents;
 
@@ -67,8 +67,10 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
         if (outputPriorityQueue == null) {
             outputPriorityQueue = new PriorityQueue<PriorityQueueElement>(pqInitSize, pqCmp);
             pqes = new PriorityQueueElement[pqInitSize];
-            for (int i = 0; i < rangeCursors.length; i++) {
+            for (int i = 0; i < pqInitSize; i++) {
                 pqes[i] = new PriorityQueueElement(i);
+            }
+            for (int i = 0; i < rangeCursors.length; i++) {
                 pushIntoPriorityQueue(pqes[i]);
             }
         } else {
@@ -183,7 +185,7 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
     }
 
     protected void checkPriorityQueue() throws HyracksDataException, IndexException {
-        while (!outputPriorityQueue.isEmpty() || needPush == true) {
+        while (!outputPriorityQueue.isEmpty() || (needPush == true)) {
             if (!outputPriorityQueue.isEmpty()) {
                 PriorityQueueElement checkElement = outputPriorityQueue.peek();
                 // If there is no previous tuple or the previous tuple can be ignored
@@ -234,7 +236,7 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
 
     public class PriorityQueueElement {
         private ITupleReference tuple;
-        private final int cursorIndex;
+        private int cursorIndex;
 
         public PriorityQueueElement(int cursorIndex) {
             tuple = null;
@@ -256,7 +258,7 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
 
     public class PriorityQueueComparator implements Comparator<PriorityQueueElement> {
 
-        protected final MultiComparator cmp;
+        protected MultiComparator cmp;
 
         public PriorityQueueComparator(MultiComparator cmp) {
             this.cmp = cmp;
@@ -287,7 +289,6 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor {
     }
 
     protected void setPriorityQueueComparator() {
-        // is there a case where cmp != pqCmp ??
         if (pqCmp == null || cmp != pqCmp.getMultiComparator()) {
             pqCmp = new PriorityQueueComparator(cmp);
         }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index fe44a12..cc25c34 100644
--- a/pom.xml
+++ b/pom.xml
@@ -156,7 +156,6 @@
            <exclude>**/src/test/resources/results/**</exclude>
            <exclude>**/src/test/resources/expected/**</exclude>
            <exclude>**/testcases/*.piglet</exclude>
-           <exclude>**/data/**/*.txt</exclude>
            <exclude>**/data/**/*.tbl</exclude>
            <exclude>**/data/**/*.ddl</exclude>
            <exclude>**/data/**/*.tsv</exclude>
@@ -174,6 +173,8 @@
            <exclude>**/target/**</exclude>
            <exclude>**/*.iml</exclude>
            <exclude>**/*.prefs</exclude>
+           <exclude>**/data/*.txt</exclude>
+           <exclude>**/data/**/*.txt</exclude>
            <exclude>**/.classpath</exclude>
            <exclude>**/.project</exclude>
       </excludes>


[2/3] incubator-asterixdb-hyracks git commit: Support Change Feeds and Ingestion of Records with MetaData

Posted by am...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-dataflow-std/src/test/resources/data/beer.txt
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-dataflow-std/src/test/resources/data/beer.txt b/hyracks/hyracks-dataflow-std/src/test/resources/data/beer.txt
new file mode 100644
index 0000000..f42700a
--- /dev/null
+++ b/hyracks/hyracks-dataflow-std/src/test/resources/data/beer.txt
@@ -0,0 +1,7308 @@
+id,flags,expiration,cas,value,rev,vbid,dtype
+alameda_brewhouse,0,0,244368670720,"{""name"":""Alameda Brewhouse"",""city"":""Portland"",""state"":""Oregon"",""code"":""97213"",""country"":""United States"",""phone"":""1-503-460-9025"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""4765 NE Fremont""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":45.5484,""lon"":-122.619}}",1,30,1
+abbey_wright_brewing_valley_inn,0,0,244371881984,"{""name"":""Abbey Wright Brewing/Valley Inn"",""city"":""Williamsport"",""state"":""Pennsylvania"",""code"":""17702"",""country"":""United States"",""phone"":""570.326.3383"",""website"":""http://www.valleyinnonline.com/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""204 Valley Street""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":41.2225,""lon"":-77.0369}}",1,36,1
+allguer_brauhaus_ag_kempten,0,0,244377518080,"{""name"":""Allguer Brauhaus AG Kempten"",""city"":""Kempten"",""state"":""Bayern"",""code"":"""",""country"":""Germany"",""phone"":""49-(0)831-/-2050-0"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Beethovenstrae 7""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":47.7487,""lon"":10.5694}}",1,51,1
+ali_i_brewing,0,0,244368670721,"{""name"":""Ali`i Brewing"",""city"":""Honolulu"",""state"":""Hawaii"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":21.3069,""lon"":-157.858}}",1,30,1
+asheville_pizza_and_brewing_co,0,0,244371947520,"{""name"":""Asheville Pizza and Brewing Co."",""city"":""Asheville"",""state"":""North Carolina"",""code"":""28804"",""country"":""United States"",""phone"":""(828) 254-1281"",""website"":""http://www.ashevillepizza.com/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Asheville Brewpub, Brewery, Movie Theater and Pizzeria all rolled into 2 great places to meet and eat. Award winning beer and award winning pizza."",""address"":[""675 Merrimon Avenue""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":35.6221,""lon"":-82.5536}}",1,36,1
+amstel_brouwerij-amstel_light,0,0,244377583616,"{""name"":""Amstel Light"",""abv"":3.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""amstel_brouwerij"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Light Lager"",""category"":""North American Lager""}",1,51,1
+allagash_brewing-allagash_fluxus_09,0,0,244368736256,"{""name"":""Allagash Fluxus 09"",""abv"":8.3,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""allagash_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""French & Belgian-Style Saison"",""category"":""Belgian and French Ale""}",1,30,1
+atwater_block_brewing-dirty_blond,0,0,244372013056,"{""name"":""Dirty Blond"",""abv"":4.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""atwater_block_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""Made with unmalted wheat, coriander and orange peel to help you live smart and enjoy everyday!"",""style"":""Light American Wheat Ale or Lager"",""category"":""Other Style""}",1,36,1
+andechser_klosterbrauerei,0,0,244377649152,"{""name"":""Andechser Klosterbrauerei"",""city"":""Andechs"",""state"":""Bayern"",""code"":"""",""country"":""Germany"",""phone"":""49-(0)8152-/-376-0"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Bergstrae 2""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":47.9775,""lon"":11.185}}",1,51,1
+allentown_brew_works,0,0,244368736257,"{""name"":""Allentown Brew Works"",""city"":""Allentown"",""state"":""Pennsylvania"",""code"":""18101"",""country"":""United States"",""phone"":""610.433.7777"",""website"":""http://www.thebrewworks.com/allentown-brewworks/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""The Allentown Brew Works is housed inside the historic Harold's Furniture Building at 812 W Hamilton Street. Years in the making, the new Allentown restaurant and brewery are part of the continuing vision of the Fegley family that established the original Bethlehem Brew Works in 1998. Proud to be part of the resurging downtown, the 400 seat restaurant is a testament to the vibrant heartbeat that thrives in this Queen City. Offering two and a half levels of dining, plus state of the art banquet facilities in The Hamilton Room, and multiple bars offering different atmospheres, as well as an outdoor casual Biergarten and a new seductive lower level lou
 nge � Silk."",""address"":[""814 W Hamilton St""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":40.6016,""lon"":-75.474}}",1,30,1
+atwater_block_brewing-dunkel,0,0,244372013057,"{""name"":""Dunkel"",""abv"":5.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""atwater_block_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""Our malty, sweet dark lager is a hometown favorite. Our Dunkel is packed with subtle roasted malt flavors without the excessive bitterness and heaviness of many dark beers and has a balanced hop finish.\r\n\r\nGABF Gold Winner"",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,36,1
+anheuser_busch-budweiser,0,0,244377649153,"{""name"":""Budweiser"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""anheuser_busch"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Light Lager"",""category"":""North American Lager""}",1,51,1
+allguer_brauhaus_ag_kempten-bayrisch_hell,0,0,244368801792,"{""name"":""Bayrisch Hell"",""abv"":4.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""allguer_brauhaus_ag_kempten"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+atwater_block_brewing-pilsner,0,0,244372078592,"{""name"":""Pilsner"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""atwater_block_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+arcadia_brewing-india_pale_ale,0,0,244377649154,"{""name"":""India Pale Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""arcadia_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,51,1
+american_river_brewing,0,0,244368801793,"{""name"":""American River Brewing"",""city"":""Auburn"",""state"":""California"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":38.8966,""lon"":-121.077}}",1,30,1
+atwater_block_brewing-x_line,0,0,244372078593,"{""name"":""X-Line"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""atwater_block_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+august_schell_brewing-caramel_bock,0,0,244377714688,"{""name"":""Caramel Bock"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""august_schell_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+anderson_valley_brewing-summer_solstice_cerveza_crema,0,0,244368867328,"{""name"":""Summer Solstice Cerveza Crema"",""abv"":5.6,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""anderson_valley_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""\""This copper colored ale is smooth, malty, and lightly sweet, with a delicate hint of spice for that oh-so-drinkable, extra velvety flavor.  The character is lighter in body than its cousin our wildly popular Winter Solstice Seasonal Ale.  This is a silky, creamy dream, perfect as a warm weather beer.\"""",""style"":""American-Style Cream Ale or Lager"",""category"":""Other Style""}",1,30,1
+avery_brewing_company-czar_imperial_stout,0,0,244372078594,"{""name"":""Czar Imperial Stout"",""abv"":11.9,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""avery_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,36,1
+bbc_brewing_co_llc-dark_star,0,0,244377714689,"{""name"":""Dark Star"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bbc_brewing_co_llc"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Porter"",""category"":""Irish Ale""}",1,51,1
+augusta_brewing-tannhauser,0,0,244368867329,"{""name"":""Tannhauser"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""augusta_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,30,1
+bear_republic_brewery-apex,0,0,244372078595,"{""name"":""Apex"",""abv"":7.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bear_republic_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Crafted with a blend of American and English malts and aggressively hopped with Pacific Northwest hops, this beer reflects what our brewers believe to be the Apex of IPA."",""style"":""Imperial or Double India Pale Ale"",""category"":""North American Ale""}",1,36,1
+big_time_brewing-trombipulator,0,0,244377714690,"{""name"":""Trombipulator"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""big_time_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+augustiner_brau_munchen-weissbier,0,0,244368932864,"{""name"":""Weißbier"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""augustiner_brau_munchen"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Light American Wheat Ale or Lager"",""category"":""Other Style""}",1,30,1
+bierbrouwerij_st_christoffel-robertus,0,0,244372078596,"{""name"":""Robertus"",""abv"":6.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bierbrouwerij_st_christoffel"",""updated"":""2010-07-22 20:00:20"",""description"":""Christoffel Robertus is a low-fermenting ruby-red beer, brewed in the Münchener-style. It is a malty, fresh beer with a light sweetness. The typical hop bitterness found in Blond, is very lightly present in Robertus. The use of an extensive amount of selected barley gives Robertus the special malty taste and aroma."",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,36,1
+boston_beer_company-samuel_adams_irish_red,0,0,244377780224,"{""name"":""Samuel Adams Irish Red"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boston_beer_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Malty and slightly sweet, balanced by earthy notes from the hops.  The gentle rain and fertile soil of Ireland helped inspire this style of ale, known for being remarkably balanced. Pale and Caramel malts give the beer its rich, deep red color and distinctive caramel flavor. The sweetness of the malt is pleasantly balanced by a pronounced hop bitterness and an earthy note from the East Kent Goldings hops. Samuel Adams® Irish Red finishes smooth and leaves you wanting to take another sip."",""style"":""Irish-Style Red Ale"",""category"":""Irish Ale""}",1,51,1
+baron_brewing_company-baron_pilsner,0,0,244368932865,"{""name"":""Baron Pilsner"",""abv"":4.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""baron_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Our pilsner is a traditional Northern German Style Pilsner. It has a fantastic malty aroma with a slight spice from the hops. The head is brilliant white and floats on the clean pale lager. The sparkling mouthfeel gives way to a soft malt sweetness that is followed by a long, dry, crisp finish. The balanced clean finish taunts the mouth to take another drink. Lagered for a minimum of 8-12 weeks to ensure smoothness and drinkability.\r\n\r\nAll ingredients for the beer are imported from Germany. Brewed in accordance to the German Beer Purity Law (Reinheitsgebot) of 1516."",""style"":""German-Style Pilsener"",""category"":""German Lager""}",1,30,1
+big_buck_brewery_and_steakhouse_2-stout,0,0,244372144128,"{""name"":""Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""big_buck_brewery_and_steakhouse_2"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,36,1
+brasserie_de_saint_sylvestre-3_monts,0,0,244377780225,"{""name"":""3 Monts"",""abv"":8.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_de_saint_sylvestre"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+bavaria-club_colombia,0,0,244368932866,"{""name"":""Club Colombia"",""abv"":4.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bavaria"",""updated"":""2010-07-22 20:00:20"",""description"":""La mejor cerveza de Colombia.""}",1,30,1
+bootleggers_steakhouse_and_brewery-34th_street_porter,0,0,244372144129,"{""name"":""34th Street Porter"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bootleggers_steakhouse_and_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Porter"",""category"":""Irish Ale""}",1,36,1
+brasserie_des_gants,0,0,244377780226,"{""name"":""Brasserie des Gants"",""city"":""Irchonwelz"",""state"":""Hainaut"",""code"":"""",""country"":""Belgium"",""phone"":""32-068-28-79-36"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""rue du Castel, 19""],""geo"":{""accuracy"":""GEOMETRIC_CENTER"",""lat"":50.6204,""lon"":3.7592}}",1,51,1
+bear_republic_brewery-big_bear_black_stout,0,0,244368998400,"{""name"":""Big Bear Black Stout"",""abv"":8.1,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bear_republic_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Big Bear, as the name implies, is a hefty, black, Russian Imperial-style stout. This bold stout boasts a rich, caramel sweetness lavished by a robust, deep-roasted heartiness you can sink your teeth into. ...Big Bear's bold flavors are produced using a blend of Belgian and English roasted barley and crystal malts. Some unique flavors come forth in the malt character. ...Louisiana sweet molasses and dark brown sugar. This dark brew is well hopped with Chinook and Cascade hops, which are somewhat, masked by the malt. This is a balanced bold brew boasting an A.V.B. of 8.1% that can creep up on you, \""so don't get mauled\"". It has a dry roasted quality that masks its' high alchohol content, so drink responsibly. 2004 California State 
 Fair, Silver Medal Winner; 2002 World Beer Cup, Gold Medal Winner; \r\n2002 Annual Bistro Beer Festival, Hayward, Gold Medal Winner; 2001 North American Brewers' Award, Honorable Mention - og 1.076, ABV 8.1%, IBU 68."",""style"":""American-Style Imperial Stout"",""category"":""North American Ale""}",1,30,1
+bootleggers_steakhouse_and_brewery,0,0,244372144130,"{""name"":""Bootleggers Steakhouse and Brewery"",""city"":""Bakersfield"",""state"":""California"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":35.3733,""lon"":-119.019}}",1,36,1
+brasserie_du_benin-ngoma_awooyo_special,0,0,244377780227,"{""name"":""Ngoma Awooyo Special"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_du_benin"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+berliner_kindl_brauerei_ag,0,0,244368998401,"{""name"":""Berliner Kindl Brauerei AG"",""city"":""Berlin"",""state"":""Berlin"",""code"":"""",""country"":""Germany"",""phone"":""49-(0)30-/-68992-0"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Werbellinstrasse 50""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":52.4793,""lon"":13.4293}}",1,30,1
+boston_beer_company-samuel_adams_scotch_ale,0,0,244372144131,"{""name"":""Samuel Adams Scotch Ale"",""abv"":5.4,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boston_beer_company"",""updated"":""2010-07-22 20:00:20"",""description"":""This is a brew for adventurous beer drinkers. It is brewed with four malts: two row pale Harrington, Munich malt, chocolate malt, and a rare peat smoked malt commonly used by distillers of Scotch malt whiskey. This unique malt gives Samuel Adams® Scotch Ale its distinct, subtle smoky character and deep amber hue. Samuel Adams® Scotch Ale is brewed using traditional English hops, Goldings and Fuggles. This is a big brew dominated by malt flavors and aromas, rich and full bodied, slightly sweet. Its layered malt complexity lingers to a smooth and silky finish."",""style"":""Scotch Ale"",""category"":""British Ale""}",1,36,1
+brauerei_schwelm-hefe_weizen,0,0,244495941632,"{""name"":""Hefe-Weizen"",""abv"":5.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brauerei_schwelm"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""South German-Style Hefeweizen"",""category"":""German Ale""}",1,51,1
+21st_amendment_brewery_cafe-amendment_pale_ale,0,0,244375420928,"{""name"":""Amendment Pale Ale"",""abv"":5.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""21st_amendment_brewery_cafe"",""updated"":""2010-07-22 20:00:20"",""description"":""Rich golden hue color. Floral hop with sweet malt aroma. Medium mouth feel with malt sweetness, hop quenching flavor and well-balanced bitterness."",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,45,1
+bill_s_tavern_brewhouse-thundermuck_stout,0,0,244369063936,"{""name"":""Thundermuck Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bill_s_tavern_brewhouse"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,30,1
+boulder_beer_company-gabf_25th_year_beer,0,0,244372209664,"{""name"":""GABF 25th Year Beer"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boulder_beer_company"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Extra Special Bitter"",""category"":""British Ale""}",1,36,1
+brewer_s_art-proletary,0,0,244495941633,"{""name"":""Proletary"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brewer_s_art"",""updated"":""2010-07-22 20:00:20"",""description"":""Black, smooth and easy to drink, this is a beer for the people!""}",1,51,1
+alesmith_brewing-old_numbskull_2003,0,0,244375420929,"{""name"":""Old Numbskull 2003"",""abv"":10.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""alesmith_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,45,1
+birrificia_le_baladin-nora,0,0,244369063937,"{""name"":""Nora"",""abv"":7.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""birrificia_le_baladin"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+brasserie_des_cimes-yeti,0,0,244372209665,"{""name"":""Yeti"",""abv"":8.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_des_cimes"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+brewmasters_restaurant_and_brewery_south,0,0,244495941634,"{""name"":""Brewmasters Restaurant and Brewery South"",""city"":""Kenosha"",""state"":""Wisconsin"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":42.5847,""lon"":-87.8212}}",1,51,1
+amherst_brewing_company-boltwood_bock,0,0,244375420930,"{""name"":""Boltwood Bock"",""abv"":5.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""amherst_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Light in color, full bodied and very malty, this lager has a toasted malt flavor. Brewed in February and usually on tap by May with a keg of the previous year's batch."",""style"":""Traditional German-Style Bock"",""category"":""German Lager""}",1,45,1
+bj_s_restaurant_and_brewery-p_m_porter,0,0,244369063938,"{""name"":""P.M. Porter"",""abv"":6.4,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bj_s_restaurant_and_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Porter"",""category"":""Irish Ale""}",1,30,1
+brasserie_du_bocq-triple_moine,0,0,244372275200,"{""name"":""Triple Moine"",""abv"":7.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_du_bocq"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+brouwerij_abdij_saint_sixtus-trappist_westvleteren_12,0,0,244496007168,"{""name"":""Trappist Westvleteren 12"",""abv"":11.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_abdij_saint_sixtus"",""updated"":""2010-07-22 20:00:20"",""description"":""This Belgian beer has an everlasting tast.  It has been choosen as the best beer in the world for several years!"",""style"":""Belgian-Style Quadrupel"",""category"":""Belgian and French Ale""}",1,51,1
+anderson_valley_brewing-nitro_stout,0,0,244375420931,"{""name"":""Nitro Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""anderson_valley_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,45,1
+bj_s_restaurant_and_brewery-piranha_pale_ale,0,0,244369129472,"{""name"":""Piranha Pale Ale"",""abv"":5.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bj_s_restaurant_and_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,30,1
+brasserie_dupont,0,0,244488732672,"{""name"":""Brasserie Dupont"",""city"":""Tourpes"",""state"":""Hainaut"",""code"":"""",""country"":""Belgium"",""phone"":""32-069-67-10-66"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Rue Basse 5""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":50.5718,""lon"":3.6508}}",1,36,1
+brouwerij_bavik_de_brabandere-petrus_aged_pale,0,0,244496007169,"{""name"":""Petrus Aged Pale"",""abv"":7.3,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_bavik_de_brabandere"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+bell_s_brewery_inc-batch_8000,0,0,244375486464,"{""name"":""Batch 8000"",""abv"":9.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bell_s_brewery_inc"",""updated"":""2010-07-22 20:00:20"",""description"":""Batch 8,000 is part of our commemorative series celebrating our progress with special brews. Our 8,000th batch is a special recipe to be brewed only once. It is wheat ale spiced with Coriander, Orange Peel, and Paradise Seed. Best consumed fresh."",""style"":""Belgian-Style White"",""category"":""Belgian and French Ale""}",1,45,1
+boulevard_brewing_company-single_wide_i_p_a,0,0,244369129473,"{""name"":""Single-Wide I.P.A."",""abv"":5.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boulevard_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""The latest addition to the Boulevard family of year-around beers, Single-Wide I.P.A. is our take on a style that originated in 18th century Great Britain. This American version -- inspired by our Smokestack Series Double-Wide I.P.A. -- boasts a heady combination of six varieties of hops, some of which were employed for dry-hopping."",""style"":""American-Style India Pale Ale"",""category"":""North American Ale""}",1,30,1
+brasserie_fantme,0,0,244488798208,"{""name"":""Brasserie Fantme"",""city"":""Soy"",""state"":""Luxembourg"",""code"":"""",""country"":""Belgium"",""phone"":""32-(0)86-47-70-44"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Rue Pral 8""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":50.286,""lon"":5.5127}}",1,36,1
+brouwerij_de_gouden_boom-blanche_de_bruges,0,0,244496007170,"{""name"":""Blanche de Bruges"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_de_gouden_boom"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+boston_beer_company-samuel_adams_honey_porter,0,0,244375486465,"{""name"":""Samuel Adams Honey Porter"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boston_beer_company"",""updated"":""2010-07-22 20:00:20"",""description"":""A dark, full flavored English porter with Scottish heather honey.  Samuel Adams® Honey Porter is a full-flavored, full-bodied English porter with a substantial roasted malt character, offering a smooth, rounded finish. This beer is brewed with traditional English Ale hops and is dry-hopped with East Kent Goldings, known for their spicy aroma and distinctive, earthy flavor. We brew Honey Porter with Scottish heather honey which balances the spiciness of the hops.\r\n\r\nThis brew is the perfect complement to glazed ham, spicy chili, and roasted vegetables like beets and carrots, which bring out the herbal notes found in the hops and the sweetness of the honey. Samuel Adams® Honey Porter also pairs well with rich desserts such
  as baklava and molasses cookies."",""style"":""Porter"",""category"":""Irish Ale""}",1,45,1
+brasserie_de_blaugies-biere_darbyste,0,0,244369129474,"{""name"":""Bière Darbyste"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_de_blaugies"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Light American Wheat Ale or Lager"",""category"":""Other Style""}",1,30,1
+brasserie_la_caracole,0,0,244488798209,"{""name"":""Brasserie La Caracole"",""city"":""Falmignoul"",""state"":""Namur"",""code"":"""",""country"":""Belgium"",""phone"":""32-082-74-40-80"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Cte Marie-Thrse 86""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":50.2024,""lon"":4.8914}}",1,36,1
+brouwerij_nacional_balashi,0,0,244496072704,"{""name"":""Brouwerij Nacional Balashi"",""city"":"""",""state"":"""",""code"":"""",""country"":""Aruba"",""phone"":""297 854805"",""website"":""http://www.balashi.com/balashi/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[]}",1,51,1
+boulevard_brewing_company-bully_porter,0,0,244375486466,"{""name"":""Bully! Porter"",""abv"":5.4,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boulevard_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""The intense flavors of dark-roasted malt in Boulevard’s rendition of the classic English porter are perfectly balanced by a generous and complex hop character. Bully! Porter’s robust nature makes it the ideal companion to a variety of foods, from seafood to chocolate."",""style"":""Porter"",""category"":""Irish Ale""}",1,45,1
+brasserie_de_brunehaut-brasserie_de_brunehaut_bio_biere_ambree_organic,0,0,244369195008,"{""name"":""Brasserie de Brunehaut Bio Bière Ambrée (Organic)"",""abv"":6.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_de_brunehaut"",""updated"":""2010-07-22 20:00:20"",""description"":""Amber copper color with a beige head.\r\nCaramel malt aromas reminiscent of vanilla, along with toffee, butterscotch and ripe fruits. Top-fermented and bottle-conditioned, this is a clean, refreshing regional 'artisan' beer.\r\nHazy amber to brown coloured beer, with a fluffy off-white head. Nice aroma of spices, yeast and oak.  The alcohol subtle. Flavour is moderately spicy and slightly fruity, with balanced hops. \r\nThis beer is certified organic."",""style"":""American-Style Amber/Red Ale"",""category"":""North American Ale""}",1,30,1
+brauerei_beck-st_pauli_girl_beer,0,0,244488863744,"{""name"":""St.Pauli Girl Beer"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brauerei_beck"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,36,1
+brouwerij_sint_jozef,0,0,244496072705,"{""name"":""Brouwerij Sint-Jozef"",""city"":""Opitter"",""state"":""Limburg"",""code"":"""",""country"":""Belgium"",""phone"":""32-089-86-47-11"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Itterplein 19""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":51.1168,""lon"":5.6464}}",1,51,1
+brasserie_de_tahiti-hinano,0,0,244375552000,"{""name"":""Hinano"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_de_tahiti"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,45,1
+brasserie_ellezelloise-la_biere_des_collines_van_de_saisis,0,0,244486373376,"{""name"":""La Bière des Collines van de Saisis"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_ellezelloise"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+brauerei_beck,0,0,244488863745,"{""name"":""Brauerei Beck"",""city"":""Bremen"",""state"":""Bremen"",""code"":"""",""country"":""Germany"",""phone"":""49-(0)421-/-50940"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Am Deich 18-19""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":53.0787,""lon"":8.7901}}",1,36,1
+burgerbrau_wolnzach-hell,0,0,244496072706,"{""name"":""Hell"",""abv"":5.1,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""burgerbrau_wolnzach"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+brasserie_pietra,0,0,244492533760,"{""name"":""Brasserie Pietra"",""city"":""Furiani"",""state"":"""",""code"":"""",""country"":""France"",""phone"":""33-04.95.30.14.70"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Route de la Marana""],""geo"":{""accuracy"":""GEOMETRIC_CENTER"",""lat"":42.6483,""lon"":9.4529}}",1,45,1
+brasserie_grain_d_orge,0,0,244486504448,"{""name"":""Brasserie Grain D'Orge"",""city"":""Ronchin"",""state"":"""",""code"":"""",""country"":""France"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Once named Brasserie Jeanne D'Arc, this Brewery had changed their name due to change in management."",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":50.6054,""lon"":3.0775}}",1,30,1
+brauerei_gbr_maisel_kg,0,0,244488863746,"{""name"":""Brauerei Gbr. Maisel KG"",""city"":""Bayreuth"",""state"":"""",""code"":""95445"",""country"":""Germany"",""phone"":""+49 (0) 9 21/4 01-0"",""website"":""http://www.maisel.com/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Hindenburgstrasse 9""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":49.9477,""lon"":11.5659}}",1,36,1
+cains-fa,0,0,244496138240,"{""name"":""FA"",""abv"":4.8,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""cains"",""updated"":""2011-05-17 03:15:54"",""description"":""FA is no small beer: despite its deceptively pale golden colour, it boasts a big, smooth flavour and strong punch. Brewed with the finest English malts, and conditioned in cask with dry hops to produce fresh hop aromas and a fuller flavour, delighting the mouth and stimulating the tongue."",""style"":""Special Bitter or Best Bitter"",""category"":""British Ale""}",1,51,1
+brauhaus_johann_albrecht_konstanz-weizen,0,0,244492599296,"{""name"":""Weizen"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brauhaus_johann_albrecht_konstanz"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""South German-Style Hefeweizen"",""category"":""German Ale""}",1,45,1
+breckenridge_brewery-471_extra_esb,0,0,244486504449,"{""name"":""471 Extra ESB"",""abv"":7.8,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""breckenridge_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+breckenridge_bbq_of_omaha-raspberry_porter,0,0,244488863747,"{""name"":""Raspberry Porter"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""breckenridge_bbq_of_omaha"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+chama_river_brewing-rye_on,0,0,244496138241,"{""name"":""Rye On"",""abv"":4.8,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""chama_river_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,51,1
+brausttte_der_steirerbrau_aktiengesellschaft,0,0,244492664832,"{""name"":""Brausttte der Steirerbrau Aktiengesellschaft"",""city"":""Graz"",""state"":"""",""code"":"""",""country"":""Austria"",""phone"":""43-0316/502-3545"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Reiningshausstrae 1-7""],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":47.0679,""lon"":15.4417}}",1,45,1
+brewery_budweiser_budvar,0,0,244486569984,"{""name"":""Brewery Budweiser Budvar"",""city"":"""",""state"":""Ceske Budejovice"",""code"":"""",""country"":""Czech Republic"",""phone"":"""",""website"":""http://www.budvar.cz/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":48.9739,""lon"":14.475}}",1,30,1
+breckenridge_brewery-autumn_ale,0,0,244488929280,"{""name"":""Autumn Ale"",""abv"":6.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""breckenridge_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Brown Ale"",""category"":""North American Ale""}",1,36,1
+cherryland_brewing,0,0,244496138242,"{""name"":""Cherryland Brewing"",""city"":""Sturgeon Bay"",""state"":""Wisconsin"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":44.8342,""lon"":-87.377}}",1,51,1
+brewdog_ltd-paradox_speyside,0,0,244492664833,"{""name"":""Paradox Speyside"",""abv"":10.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brewdog_ltd"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Imperial Stout"",""category"":""North American Ale""}",1,45,1
+bridgeport_brewing-old_knucklehead_1992,0,0,244486569985,"{""name"":""Old Knucklehead 1992"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bridgeport_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+brewery_de_troch-chapeau_exotic_lambic,0,0,244488994816,"{""name"":""Chapeau Exotic Lambic"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brewery_de_troch"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Belgian-Style Fruit Lambic"",""category"":""Belgian and French Ale""}",1,36,1
+clipper_city_brewing_co-pale_ale,0,0,244496203776,"{""name"":""Pale Ale"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""clipper_city_brewing_co"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,51,1
+brewery_creek_brewing-irish_stout,0,0,244492664834,"{""name"":""Irish Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brewery_creek_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""\""Guinness\"" is the prototype of all modern stouts. Many people, however, don't realize that there are different varieties of \""Guinness\"" brewed around the world. \""Draught Guinness* and \""Foreign Extra Stout\"" are the two primary types brewed in Ireland. Foreign Extra is the one I have emulated. It is closer in style to the London Porters of old than to modern stout. Very dark and rich, not as dry as Draught, about 6% abv and around 60 IBUs (that's hop bitterness). I used \""First Gold\"" hops because that's what I could get. Guinness use Nitrogen mixed with carbon dioxide to dispense their stout which adds to the creamy mouth-feel. BTW: The \""Imported\"" Guinness you buy here in the US comes from Canada. It could just as well be brewed in 
 the US but the common wisdom in the brewing world is that Americans prefer \""imported\"" beers and will pay more for them."",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,45,1
+broughton_ales-kinmount_willie_stout,0,0,244486569986,"{""name"":""Kinmount Willie Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""broughton_ales"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,30,1
+bridgeport_brewing-blue_heron_pale_ale,0,0,244488994817,"{""name"":""Blue Heron Pale Ale"",""abv"":4.9,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bridgeport_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+dark_horse_brewing_co-fore_smoked_stout,0,0,244496203777,"{""name"":""Fore Smoked Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""dark_horse_brewing_co"",""updated"":""2010-07-22 20:00:20"",""description"":""Brewed with all malted barley and peat malt (smoked malt). This beer is full bodied with chocolate, roasted barley flavors, and a smokey almost BBQ finish."",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,51,1
+brewmasters_restaurant_and_brewery_south-cherry_ice,0,0,244492730368,"{""name"":""Cherry Ice"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brewmasters_restaurant_and_brewery_south"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Light American Wheat Ale or Lager"",""category"":""Other Style""}",1,45,1
+brouwerij_sterkens,0,0,244486569987,"{""name"":""Brouwerij Sterkens"",""city"":""Hoogstraten-Meer"",""state"":""Antwerpen"",""code"":"""",""country"":""Belgium"",""phone"":""32-03-317-00-50"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Meerdorp 20""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":51.4439,""lon"":4.7386}}",1,30,1
+bridgeport_brewing-bottle_conditioned_porter,0,0,244488994818,"{""name"":""Bottle Conditioned Porter"",""abv"":5.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bridgeport_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Porter"",""category"":""Irish Ale""}",1,36,1
+deschutes_brewery-bachelor_esb,0,0,244628062208,"{""name"":""Bachelor ESB"",""abv"":5.3,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""deschutes_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Standing alone, distant from the Three Sisters mountains nestled to the north, Bachelor Butte was originally called \""Brother Jonathan\"" and then simply \""The Bachelor\"" before becoming widely known today as Mt. Bachelor."",""style"":""Extra Special Bitter"",""category"":""British Ale""}",1,51,1
+bridgeport_brewing-esb,0,0,244492730369,"{""name"":""ESB"",""abv"":6.1,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bridgeport_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,45,1
+browar_okocim-o_k_beer,0,0,244486635520,"{""name"":""O.K. Beer"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""browar_okocim"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+brooklyn_brewery-brooklyn_lager,0,0,244489060352,"{""name"":""Brooklyn Lager"",""abv"":5.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brooklyn_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Brooklyn Lager, the Brewery's flagship label, is New York's \""hometown\"" beer, brewed to a pre-Prohibition recipe that dates back to the days when Brooklyn was the brewing capital of the East Coast. Brooklyn Lager has won numerous awards. Wrote Michael Jackson in the Simon & Schuster Pocket Guide to Beer: \""The dry-hopped, fresh, flowery, firm, flavourful, Brooklyn Lager **-*** started well, in 1988, and has gained in character since.\""""}",1,36,1
+desnoes_geddes_ltd-dragon_stout,0,0,244628127744,"{""name"":""Dragon Stout"",""abv"":7.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""desnoes_geddes_ltd"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,51,1
+brouwerij_oud_beersel-oude_gueuze_vielle,0,0,244492730370,"{""name"":""Oude Gueuze Vielle"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_oud_beersel"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Belgian-Style Fruit Lambic"",""category"":""Belgian and French Ale""}",1,45,1
+bull_bush_pub_brewery-royal_arms_ipa,0,0,244486635521,"{""name"":""Royal Arms IPA"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""bull_bush_pub_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style India Pale Ale"",""category"":""North American Ale""}",1,30,1
+brouwerij_bosteels-triple_karmeliet,0,0,244489060353,"{""name"":""Triple Karmeliet"",""abv"":8.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_bosteels"",""updated"":""2010-07-22 20:00:20"",""description"":""LOOK:\r\nTripel Karmeliet is a very refi ned and complex golden-to-bronze brew with a fantastic creamy head. These characteristics derive not only from the grains used but also from restrained hopping with Styrians and the fruity nature (banana and vanilla) of the house yeast.\r\n\r\nSMELL:\r\nVery refined and complex. Hints of vanilla mixed with citrus aromas.\r\n\r\nTASTE:\r\nTripel Karmeliet has not only the lightness and freshness of wheat, but also the creaminess of oats together with a spicy lemony almost quinine\r\ndryness."",""style"":""Belgian-Style Tripel"",""category"":""Belgian and French Ale""}",1,36,1
+dix_barbecue_brewery-red_truck_ale,0,0,244628127745,"{""name"":""Red Truck Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""dix_barbecue_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Amber/Red Ale"",""category"":""North American Ale""}",1,51,1
+brouwerij_van_den_bossche-kerst_pater_special_christmas_beer,0,0,244492795904,"{""name"":""Kerst Pater Special Christmas Beer"",""abv"":9.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_van_den_bossche"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,45,1
+cains,0,0,244486701056,"{""name"":""Cains"",""city"":""Liverpool"",""state"":""Merseyside"",""code"":""L8 5XJ"",""country"":""United Kingdom"",""phone"":""01517098734"",""website"":""http://www.cains.co.uk/"",""type"":""brewery"",""updated"":""2011-05-17 03:05:10"",""description"":""Cains is a brewery in Liverpool, England, founded in 1858 by Irish immigrant Robert Cain. \n\nCain had begun his brewing career aged 24 when he purchased a pub and brewed his own ales. Within 25 years of founding his brewery, Cain had established over 200 pubs. Robert Cain passed away in 1907 and the brewery still lives on to this day. \n\nOne of the most iconic beer brands in the UK Cain's has gone from strength to strength since being taken over by Indian brothers Sudarghara and Ajmail Dusanj in 2002. Cains now exports it's famous beers worldwide to the USA, Denmark, China, Ireland, India and Australia."",""address"":[""Robert Cain Brewery"",""Stanhope St""]}",1,30,1
+brouwerij_sterkens-bokrijks_kruikenbier,0,0,244489060354,"{""name"":""Bokrijks Kruikenbier"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_sterkens"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+dixie_brewing,0,0,244628193280,"{""name"":""Dixie Brewing"",""city"":""New Orleans"",""state"":""Louisiana"",""code"":""70119"",""country"":""United States"",""phone"":""1-504-822-8711"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""2401 Tulane Avenue""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":29.9606,""lon"":-90.0871}}",1,51,1
+c_b_potts_of_cheyenne-big_horn_fort_collins_stout,0,0,244492795905,"{""name"":""Big Horn Fort Collins Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""c_b_potts_of_cheyenne"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,45,1
+caldera_brewing-caldera_ipa,0,0,244486701057,"{""name"":""Caldera IPA"",""abv"":6.1,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""caldera_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""Available in 12 oz. cans and kegs.  An American-style India Pale Ale brewed with plenty of body and an assertive hop profile."",""style"":""American-Style India Pale Ale"",""category"":""North American Ale""}",1,30,1
+brouwerij_the_musketiers-troubadour,0,0,244489125888,"{""name"":""Troubadour"",""abv"":6.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_the_musketiers"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,36,1
+dogfish_head_craft_brewery-black_blue,0,0,244628258816,"{""name"":""Black & Blue"",""abv"":10.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""dogfish_head_craft_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""A belgian-style Strong ale fermented with blackberries and blueberries."",""style"":""Fruit Beer"",""category"":""Other Style""}",1,51,1
+captain_lawrence_brewing_company,0,0,244492795906,"{""name"":""Captain Lawrence Brewing Company"",""city"":""Pleasantville"",""state"":""New York"",""code"":""10570"",""country"":""United States"",""phone"":""914-741-BEER"",""website"":""http://www.captainlawrencebrewing.com/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Captain Lawrence beers are craft brewed in Pleasantville New York. We offer tastings and tours on Fridays from 4pm to 7pm, and Saturdays from 12pm  6pm."",""address"":[""99 Castleton Street""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":41.126,""lon"":-73.7896}}",1,45,1
+captain_lawrence_brewing_company-captin_lawrence_liquid_gold,0,0,244486701058,"{""name"":""Captin Lawrence Liquid Gold"",""abv"":6.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""captain_lawrence_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Don't let the golden color fool you - this isn't your father's lite beer!\r\n\r\nBrewed with imported German malts and US-grown hops, this beer is a full-flavored introduction to craft-brewed beer. We add the hops late in the boil, allowing you to enjoy the flavor and aroma of the hops without an aggressive bitterness."",""style"":""Belgian-Style Pale Ale"",""category"":""Belgian and French Ale""}",1,30,1
+brouwerij_van_steenberge-ertvelds_wit,0,0,244489125889,"{""name"":""Ertvelds Wit"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brouwerij_van_steenberge"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+egan_brewing-1916_irish_stout,0,0,244628258817,"{""name"":""1916 Irish Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""egan_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,51,1
+carlow_brewing_company-o_hara_s_celtic_stout,0,0,244492861440,"{""name"":""O'Hara's Celtic Stout"",""abv"":4.3,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""carlow_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Unlike the image, does not have the creamy head like many Irish stouts (Beamish, Guinness, Murphys) and as a result lighter on the stomach and nice with a meal. Very distinctive taste which may put off those not accustomed to drinking stouts.I would recommend it for the more adventurous pallette.\r\n\r\nRoast barley comes through in the taste."",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,45,1
+carolina_brewery-lager,0,0,244486766592,"{""name"":""Lager"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""carolina_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,30,1
+butterfield_brewing_1,0,0,244489125890,"{""name"":""Butterfield Brewing #1"",""city"":""Fresno"",""state"":""California"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":36.7477,""lon"":-119.772}}",1,36,1
+engel_brauerei_schwbisch_gmnd_lang,0,0,244628258818,"{""name"":""Engel Brauerei Schwbisch Gmnd Lang"",""city"":""Schwbisch Gmnd"",""state"":""Baden-Wrttemberg"",""code"":"""",""country"":""Germany"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""D-73525 Schwbisch Gmnd""]}",1,51,1
+castle_springs_brewery,0,0,244492861441,"{""name"":""Castle Springs Brewery"",""city"":""Moultonborough"",""state"":""New Hampshire"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":43.7548,""lon"":-71.3967}}",1,45,1
+coastal_fog_brewing-brandenburg_gate_marzen,0,0,244486766593,"{""name"":""Brandenburg Gate Märzen"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""coastal_fog_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""German-Style Oktoberfest"",""category"":""German Lager""}",1,30,1
+alaskan_brewing-alaskan_barley_wine_ale,0,0,244368277504,"{""name"":""Alaskan Barley Wine Ale"",""abv"":10.4,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""alaskan_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""Alaskan Barley Wine is produced in small batches each year. Typically this higher alcohol beverage is brewed in the spring, cellared in the tunnels of the Alaska-Juneau Gold Mine for the summer and retrieved in time for its release at the Great Alaska Beer and Barley Wine Festival in January. The cool tunnels of the mine shaft provide natural refrigeration and a prime environment for the aging process. \r\n\r\nLike a fine wine, Alaskan Barley Wine can be aged for years. The bottling of the 2007 vintage of Alaskan Barley Wine will allow individuals to age it to their liking. “We figured we’d leave it up to individuals as to how long to age their Alaskan Barley Wine,” said Quality Assurance Analyst Ryan Harvey. “Some people like ba
 rley wines fresh, and others store it for years.”"",""style"":""American-Style Barley Wine Ale"",""category"":""North American Ale""}",1,29,1
+climax_brewing_copmany-climax_ipa,0,0,244489191424,"{""name"":""Climax IPA"",""abv"":6.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""climax_brewing_copmany"",""updated"":""2010-07-22 20:00:20"",""description"":""This American-style, hop-driven beer starts with a citrus flavor, followed by two layers of caramel, and finishes on a hoppy note."",""style"":""American-Style India Pale Ale"",""category"":""North American Ale""}",1,36,1
+flat_earth_brewing_company-angry_planet_pale_ale,0,0,244628324352,"{""name"":""Angry Planet Pale Ale"",""abv"":6.1,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""flat_earth_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,51,1
+cervecera_cuauhtmoc_moctezuma-dos_equis_special_lager,0,0,244492926976,"{""name"":""Dos Equis Special Lager"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""cervecera_cuauhtmoc_moctezuma"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,45,1
+cooperstown_brewing_company-backyard_india_pale_ale,0,0,244486766594,"{""name"":""Backyard India Pale Ale"",""abv"":6.1,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""cooperstown_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""\""Back Yard\"" is a golden India Pale Ale. Historically, ale shipped to India in the 19th Century was brewed to higher gravities so that it could mature during the long sea voyage. English brewers also hopped these ales heavily to protect them from spoiling. The term \""India pale Ale\"" or \""I.P.A.\"" is still used by brewers to denote a super-premium, hoppy pale ale style. Backyard IPA is no exception. English pale barley malt is predominant in this beer with just a small amount of crystal malt. It is well bittered with Cluster and Cascade hops and finished with a mix of local hop and larger amounts of Fuggle hop."",""style"":""English-Style India Pale Ale"",""category"":""British Ale""}",1,30,1
+amherst_brewing_company-north_pleasant_pale_ale,0,0,244368343040,"{""name"":""North Pleasant Pale Ale"",""abv"":5.25,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""amherst_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Light gold in color, slightly malty and hoppy, with a mild flowery hop finish."",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,29,1
+climax_brewing_copmany-climax_oktoberfest,0,0,244489191425,"{""name"":""Climax Oktoberfest"",""abv"":6.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""climax_brewing_copmany"",""updated"":""2010-07-22 20:00:20"",""description"":""Oktoberfest is typically available from August to November and has toasty caramel and malty flavor.  It is made from German Noble Hops and massive amounts of Münich Malt, which give it an orange color."",""style"":""German-Style Oktoberfest"",""category"":""German Lager""}",1,36,1
+flossmoor_station_brewery-kilt_kicker_wee_heavy,0,0,244628324353,"{""name"":""Kilt Kicker Wee Heavy"",""abv"":7.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""flossmoor_station_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Scotch Ale"",""category"":""British Ale""}",1,51,1
+cervecera_hondurea-port_royal_export,0,0,244492926977,"{""name"":""Port Royal Export"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""cervecera_hondurea"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,45,1
+coors_brewing_golden_brewery-blue_moon_abbey_ale,0,0,244486766595,"{""name"":""Blue Moon Abbey Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""coors_brewing_golden_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+anheuser_busch-michelob_ultra,0,0,244368343041,"{""name"":""Michelob Ultra"",""abv"":4.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""anheuser_busch"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,29,1
+clipper_city_brewing_co-heavy_seas_prosit_imperial_oktoberfest_lager,0,0,244489191426,"{""name"":""Heavy Seas Prosit! Imperial Oktoberfest Lager"",""abv"":9.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""clipper_city_brewing_co"",""updated"":""2010-07-22 20:00:20"",""description"":""Malt focused, made with five types of grain including Vienna and Munich malts – plus a secret extra malt that we use only in our Prosit! Consider this bomber to be the burly big brother to our Clipper City MarzHon, a three year in a row winner at the Great American Beer Festival. We’ve balanced the sweetness of the malt with three kinds of hops making this one of the boldest marzen style lagers you’ll ever try.\r\n\r\n5 Kinds of Malt, 3 Kinds of Hops\r\nestimated ABV 9% estimated IBU 25"",""style"":""German-Style Oktoberfest"",""category"":""German Lager""}",1,36,1
+flying_dog_brewery-old_scratch_lager,0,0,244628324354,"{""name"":""Old Scratch Lager"",""abv"":5.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""flying_dog_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""This dog enjoys his days in the sun... Old Scratch Amber Lager is a malty, mellow beer that is fermented at medium temperatures to develop both ale and lager characteristics. \""Gold Scratch\"" raises the standard in the amber lager category."",""style"":""American-Style Amber/Red Ale"",""category"":""North American Ale""}",1,51,1
+cooper_s_cave_ale_company,0,0,244492992512,"{""name"":""Cooper's Cave Ale Company"",""city"":""Glens Falls"",""state"":""New York"",""code"":""12801"",""country"":""United States"",""phone"":""518.792.0007"",""website"":""http://www.cooperscaveale.com/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Cooper's Cave Ale Company, Ltd. Micro Brewery is the realized goal of three ale lovers, Ed, Pat and Adrian Bethel. A passion for great English style ales led us to commercially produce small quantities on a brewing system which we built. We gladly welcome visitors to our brewery and tasting room, and now we welcome you to learn more about Cooper's Cave Ale Company."",""address"":[""2 Sagamore Street""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":43.3177,""lon"":-73.64}}",1,45,1
+coronado_brewing_company-outlet_stout,0,0,244486832128,"{""name"":""Outlet Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""coronado_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Extremely dark in color, with a malty flavor dominated by caramel and chocolate malts and a slight hoppy bitterness. This full-bodied ale has a nice smooth lasting finish."",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,30,1
+appalachian_brewing_company-hoppy_trails_india_pale_ale,0,0,244368408576,"{""name"":""Hoppy Trails India Pale Ale"",""abv"":6.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""appalachian_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""This IPA is an exciting beer with a floral in aroma and an incredible hop flavor. The maltiness is increased (over a regular pale ale) to help balance the aggressive hop usage. This contributes to the higher alcohol content as well. \r\nWhen India was part of the British Empire, pale ale shipped to the troops would often spoil due to the rough voyage and temperature extremes. The brewers had a theory that if they loaded the beer with extra hops, the hops would preserve the beer. Of course, this added significantly to the beer’s flavor and aroma. When the troops returned to Britain, they had become \""hop-heads\"", appreciating the beauty of the hop \""over-influence\"". Regular pale ale was simply not eno
 ugh anymore! A new beer style, India Pale Ale, had been created: an aggressively hoppy and now quite happy to be home pale ale."",""style"":""American-Style India Pale Ale"",""category"":""North American Ale""}",1,29,1
+coopers_brewery-coopers_best_extra_stout,0,0,244489256960,"{""name"":""Coopers Best Extra Stout"",""abv"":6.3,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""coopers_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Now here's a beer with punch! \r\n\r\nCoopers Best Extra Stout is a beacon for lovers of a hearty brew. With its robust flavour it is everything a stout should be. \r\n\r\nBrewed naturally using a top fermentation method, Coopers Stout's unique rich, dark texture comes from specially roasted black malt. \r\n\r\nCoopers Best Extra Stout contains no additives and no preservatives."",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,36,1
+founders_hill_brewing-founders_light,0,0,244628389888,"{""name"":""Founders Light"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""founders_hill_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,51,1
+coronado_brewing_company-coronado_golden_ale,0,0,244493058048,"{""name"":""Coronado Golden Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""coronado_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""This golden colored ale is smooth, light in flavor, crisp and very similar to a European-style pilsner. Our Golden ale is delicately hopped with traditional pilsner style Czech Saaz hops. It is one of our most popular beers and considered our gateway beer."",""style"":""German-Style Pilsener"",""category"":""German Lager""}",1,45,1
+crabtree_brewery,0,0,244486832129,"{""name"":""Crabtree Brewery"",""city"":""Greeley"",""state"":""Colorado"",""code"":""80631"",""country"":""United States"",""phone"":""[970] 356-0516"",""website"":""http://www.crabtreebrewing.com"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""The Crabtree Brewing Company is dedicated to serving the environment, the community, our customers, and our valued employees.  Requiring the best ingredients to support unique premium beers.  Keeping a dynamic business mind while remaining modestly profitable.   Employing technology, embracing ethics, growing to meet the needs of our customers and employees, and having fun doing what we love�.Making Great Beer."",""address"":[""625 3rd St. #D""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":40.4313,""lon"":-104.688}}",1,30,1
+appalachian_brewing_company-mountain_lager,0,0,244368408577,"{""name"":""Mountain Lager"",""abv"":4.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""appalachian_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""The Dortmunder-Export style of beer was developed in Westfalen, Germany, and is a classic light lager with great character. This style boasts a light golden blonde color and exhibits a moderate hop palate. The finish of our Mountain Lager is rich yet mellow.\r\nOur brewers have developed this beer as a tribute to the Appalachian Mountains where we live and play."",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,29,1
+coronado_brewing_company-uptown_brown,0,0,244489256961,"{""name"":""Uptown Brown"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""coronado_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Brown Ale"",""category"":""North American Ale""}",1,36,1
+frederick_brewing,0,0,244628389889,"{""name"":""Frederick Brewing"",""city"":""Frederick"",""state"":""Maryland"",""code"":""20176"",""country"":""United States"",""phone"":""1-888-258-7434"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""4607 Wedgewood Boulevard""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":39.3628,""lon"":-77.4265}}",1,51,1
+crane_river_brewpub_and_cafe-homestead_pale_ale,0,0,244493058049,"{""name"":""Homestead Pale Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""crane_river_brewpub_and_cafe"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,45,1
+dark_horse_brewing_co,0,0,244618821632,"{""name"":""Dark Horse Brewing Co."",""city"":""Marshall"",""state"":""Michigan"",""code"":""49068"",""country"":""United States"",""phone"":""269-781-9940"",""website"":""http://www.darkhorsebrewery.com/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""511 S. Kalamazoo Ave.""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":42.2667,""lon"":-84.9641}}",1,30,1
+barley_brothers_brewery_and_grill-tripppleberry_wheat,0,0,244368408578,"{""name"":""Tripppleberry Wheat"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""barley_brothers_brewery_and_grill"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Light American Wheat Ale or Lager"",""category"":""Other Style""}",1,29,1
+crane_river_brewpub_and_cafe-good_life_stout,0,0,244489256962,"{""name"":""Good Life Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""crane_river_brewpub_and_cafe"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,36,1
+full_sail_brewing_1,0,0,244628455424,"{""name"":""Full Sail Brewing #1"",""city"":""Hood River"",""state"":""Oregon"",""code"":""97031"",""country"":""United States"",""phone"":""1-541-386-2281"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""506 Columbia Street""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":45.7103,""lon"":-121.515}}",1,51,1
+degroen_s_grill,0,0,244625637376,"{""name"":""DeGroen's Grill"",""city"":""Baltimore"",""state"":""Maryland"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":39.2904,""lon"":-76.6122}}",1,45,1
+de_halve_maan-straffe_hendrik_brugse,0,0,244618887168,"{""name"":""Straffe Hendrik Brugse"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""de_halve_maan"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+barley_island_brewing-flat_belly_american_wheat,0,0,244368474112,"{""name"":""Flat Belly American Wheat"",""abv"":3.6,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""barley_island_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,29,1
+denver_chophouse_and_brewery-lucky_u_denver_special_bitter,0,0,244621705216,"{""name"":""Lucky U Denver Special Bitter"",""abv"":4.46,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""denver_chophouse_and_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+granite_city_food_brewery_saint_cloud-northern_light,0,0,244754808832,"{""name"":""Northern Light"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""granite_city_food_brewery_saint_cloud"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,51,1
+dempsey_s_restaurant_brewery-holiday_wheat_bock,0,0,244625702912,"{""name"":""Holiday Wheat Bock"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""dempsey_s_restaurant_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Traditional German-Style Bock"",""category"":""German Lager""}",1,45,1
+de_proef_brouwerij-lozen_boer_abt,0,0,244618887169,"{""name"":""Lozen Boer Abt"",""abv"":10.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""de_proef_brouwerij"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+belhaven_brewery-st_andrews_ale,0,0,244368474113,"{""name"":""St. Andrews Ale"",""abv"":4.6,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""belhaven_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,29,1
+desnoes_geddes_ltd,0,0,244621770752,"{""name"":""Desnoes & Geddes Ltd"",""city"":""Kingston"",""state"":"""",""code"":"""",""country"":""Jamaica"",""phone"":""1-876-923-9291"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""214 Spanish Town""],""geo"":{""accuracy"":""GEOMETRIC_CENTER"",""lat"":33.9858,""lon"":-96.6515}}",1,36,1
+gray_brewing-honey_ale,0,0,244754874368,"{""name"":""Honey Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""gray_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,51,1
+deschutes_brewery-mirror_mirror,0,0,244625702913,"{""name"":""Mirror Mirror"",""abv"":11.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""deschutes_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""The Reserve Series romance all began with our first release of this limited-edition brew. Mirror Mirror, born of a double batch of Mirror Pond Pale Ale, is an inspired, barrel-aged barley wine layered with intriguing nuances. Explore this latest incarnation and enjoy its delicious complexity in every sip."",""style"":""American-Style Barley Wine Ale"",""category"":""North American Ale""}",1,45,1
+delafield_brewhaus-hops_and_glory_american_ale,0,0,244618887170,"{""name"":""Hops and Glory American Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""delafield_brewhaus"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,30,1
+big_river_brewing-dry_stout,0,0,244368539648,"{""name"":""Dry Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""big_river_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,29,1
+dock_street_beer,0,0,244621770753,"{""name"":""Dock Street Beer"",""city"":""West Philly"",""state"":""Pennsylvania"",""code"":""19143"",""country"":""United States"",""phone"":""(215)-726-2337"",""website"":""http://www.dockstreetbeer.com"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""701 S. 50th Street""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":39.9478,""lon"":-75.2229}}",1,36,1
+green_bay_brewing-hinterland_pale_ale,0,0,244754939904,"{""name"":""Hinterland Pale Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""green_bay_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,51,1
+diamond_knot_brewery_alehouse-possession_porter,0,0,244625768448,"{""name"":""Possession Porter"",""abv"":5.6,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""diamond_knot_brewery_alehouse"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Porter"",""category"":""Irish Ale""}",1,45,1
+dempsey_s_restaurant_brewery-golden_eagle,0,0,244618952704,"{""name"":""Golden Eagle"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""dempsey_s_restaurant_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+boss_browar_witnica_s_a,0,0,244368539649,"{""name"":""BOSS Browar Witnica S.A."",""city"":""Witnica"",""state"":"""",""code"":"""",""country"":""Poland"",""phone"":""48-(95)-751-51-14"",""website"":""http://www.browar-witnica.pl/"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Ul. Marii Konopnickiej 1""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":52.6739,""lon"":14.9004}}",1,29,1
+drake_s_brewing-maibock,0,0,244621836288,"{""name"":""Maibock"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""drake_s_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Traditional German-Style Bock"",""category"":""German Lager""}",1,36,1
+greenshields_brewery_and_pub-greenshields_pale_ale,0,0,244755005440,"{""name"":""Greenshields Pale Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""greenshields_brewery_and_pub"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,51,1
+diebels_privatbrauerei-german_premium_dark,0,0,244625768449,"{""name"":""German Premium Dark"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""diebels_privatbrauerei"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Brown Ale"",""category"":""North American Ale""}",1,45,1
+diamond_knot_brewery_alehouse-golden_ale,0,0,244618952705,"{""name"":""Golden Ale"",""abv"":5.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""diamond_knot_brewery_alehouse"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,30,1
+boston_beer_company-samuel_adams_imperial_white,0,0,244368605184,"{""name"":""Samuel Adams Imperial White"",""abv"":10.3,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""boston_beer_company"",""updated"":""2010-07-22 20:00:20"",""description"":""Samuel Adams® Imperial White is a new perspective on the classic witbier style.  Witbiers are normally light and refreshing with a fruity finish and we wanted to see how these characteristics would stand up when we amped up the recipe.  We were totally blown away by the flavors that were created by this beer.\r\n\r\nThis is not just a more intense version of our spring seasonal Samuel Adams® White Ale.  Imperial White is a new recipe that stands on it own merits.  In fact, it is more of a wine substitute than just another refreshing witbier.  This is a beer that should be sipped and savored and you"",""style"":""Belgian-Style White"",""category"":""Belgian and French Ale""}",1,29,1
+egan_brewing-nitro_pale,0,0,244621836289,"{""name"":""Nitro Pale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""egan_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Pale Ale"",""category"":""North American Ale""}",1,36,1
+hacker_pschorr_bru-alt_munich_dark,0,0,244755005441,"{""name"":""Alt Munich Dark"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""hacker_pschorr_bru"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+egan_brewing-abbot_pennings_trippel,0,0,244625768450,"{""name"":""Abbot Pennings Trippel"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""egan_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,45,1
+duck_rabbit_craft_brewery-duck_rabbit_schwarzbier,0,0,244618952706,"{""name"":""Duck-Rabbit Schwarzbier"",""abv"":5.8,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""duck_rabbit_craft_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""German-Style Schwarzbier"",""category"":""German Lager""}",1,30,1
+brasserie_de_brunehaut-abbaye_de_st_amand,0,0,244368605185,"{""name"":""Abbaye de St Amand"",""abv"":7.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_de_brunehaut"",""updated"":""2010-07-22 20:00:20"",""description"":""A unique 7% Belgian blonde ale, flavoured with juniper berries. The beer has bittersweet malt flavours, and a heady perfumed aroma of orange and juniper."",""style"":""Other Belgian-Style Ales"",""category"":""Belgian and French Ale""}",1,29,1
+egan_brewing-o_tay_bockwheat,0,0,244621836290,"{""name"":""O-Tay Bockwheat"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""egan_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+hausbrauerei_zum_schlssel-altbier,0,0,244755070976,"{""name"":""Altbier"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""hausbrauerei_zum_schlssel"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Brown Ale"",""category"":""North American Ale""}",1,51,1
+f_x_matt_brewing,0,0,244625833984,"{""name"":""F.X. Matt Brewing"",""city"":""Utica"",""state"":""New York"",""code"":""13502"",""country"":""United States"",""phone"":""1-800-690-3181-x222"",""website"":""http://www.saranac.com"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""811 Edward Street""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":43.1045,""lon"":-75.2452}}",1,45,1
+egan_brewing,0,0,244619018240,"{""name"":""Egan Brewing"",""city"":""De Pere"",""state"":""Wisconsin"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":44.4489,""lon"":-88.0604}}",1,30,1
+brasserie_de_l_abbaye_val_dieu-winter,0,0,244368605186,"{""name"":""Winter"",""abv"":10.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_de_l_abbaye_val_dieu"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,29,1
+ej_phair_brewing_company_and_alehouse-marzen,0,0,244621836291,"{""name"":""Marzen"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""ej_phair_brewing_company_and_alehouse"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""German-Style Oktoberfest"",""category"":""German Lager""}",1,36,1
+industrias_la_constancia_ilc-suprema,0,0,244755070977,"{""name"":""Suprema"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""industrias_la_constancia_ilc"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,51,1
+firehouse_brewing-smoke_jump_stout,0,0,244625833985,"{""name"":""Smoke Jump Stout"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""firehouse_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Stout"",""category"":""North American Ale""}",1,45,1
+el_ahram_company,0,0,244619018241,"{""name"":""el ahram company"",""city"":"""",""state"":"""",""code"":"""",""country"":""Egypt"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[]}",1,30,1
+brasserie_mcauslan-st_ambroise_pale_ale,0,0,244485914624,"{""name"":""St-Ambroise Pale Ale"",""abv"":5.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasserie_mcauslan"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,29,1
+elk_creek_cafe_and_aleworks-elk_creek_copper_ale,0,0,244621901824,"{""name"":""Elk Creek Copper Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""elk_creek_cafe_and_aleworks"",""updated"":""2010-07-22 20:00:20"",""description"":""This beautifully colored ale strikes an agreeable balance between malt and hops. Caramel + toffee notes from the use of more highly kilned malts step up to complement this beers assertive hop profile."",""style"":""American-Style Amber/Red Ale"",""category"":""North American Ale""}",1,36,1
+iron_springs_pub_brewery-fairfax_coffee_porter,0,0,244755070978,"{""name"":""Fairfax Coffee Porter"",""abv"":5.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""iron_springs_pub_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,51,1
+fish_brewing_company_fish_tail_brewpub-mudshark_porter,0,0,244625833986,"{""name"":""Mudshark Porter"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""fish_brewing_company_fish_tail_brewpub"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""Porter"",""category"":""Irish Ale""}",1,45,1
+emery_pub,0,0,244619018242,"{""name"":""Emery Pub"",""city"":""Emeryville"",""state"":""California"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":37.8313,""lon"":-122.285}}",1,30,1
+brasseries_kronenbourg-1664,0,0,244485914625,"{""name"":""1664"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brasseries_kronenbourg"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,29,1
+empyrean_brewing_company,0,0,244621901825,"{""name"":""Empyrean Brewing Company"",""city"":""Lincoln"",""state"":""Nebraska"",""code"":""68508"",""country"":""United States"",""phone"":""1-402-434-5959"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""729 Q Street""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":40.8155,""lon"":-96.7105}}",1,36,1
+island_brewing_company,0,0,244755136512,"{""name"":""Island Brewing Company"",""city"":""Carpinteria"",""state"":""California"",""code"":""93013"",""country"":""United States"",""phone"":""1-805-745-8272"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""5049 Sixth Street""]}",1,51,1
+3_fonteinen_brouwerij_ambachtelijke_geuzestekerij,0,0,244380663808,"{""name"":""3 Fonteinen Brouwerij Ambachtelijke Geuzestekerij"",""city"":""Beersel"",""state"":""Vlaams Brabant"",""code"":"""",""country"":""Belgium"",""phone"":""32-02-/-306-71-03"",""website"":""http://www.3fonteinen.be/index.htm"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""Hoogstraat 2A""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":50.7668,""lon"":4.3081}}",1,60,1
+fitger_s_brewhouse_brewery_and_grill-habanero,0,0,244625899520,"{""name"":""Habañero"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""fitger_s_brewhouse_brewery_and_grill"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,45,1
+esser_s_cross_plains_brewery-esser_s_best,0,0,244619083776,"{""name"":""Esser's Best"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""esser_s_cross_plains_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""German Style Lager"",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,30,1
+bricktown_brewery,0,0,244485914626,"{""name"":""Bricktown Brewery"",""city"":""Dubuque"",""state"":""Iowa"",""code"":""52001"",""country"":""United States"",""phone"":""1-563-582-0608"",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""299 Main Street""],""geo"":{""accuracy"":""ROOFTOP"",""lat"":42.4965,""lon"":-90.6652}}",1,29,1
+engine_house_9-barleywine,0,0,244621967360,"{""name"":""Barleywine"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""engine_house_9"",""updated"":""2010-07-22 20:00:20"",""description"":""""}",1,36,1
+jacob_leinenkugel_brewing_company,0,0,244755136513,"{""name"":""Jacob Leinenkugel Brewing Company"",""city"":""Chippewa Falls"",""state"":""Wisconsin"",""code"":""54729"",""country"":""United States"",""phone"":""1-715-723-5557"",""website"":""http://www.leinie.com/welcome.html"",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[""1 Jefferson Avenue""],""geo"":{""accuracy"":""RANGE_INTERPOLATED"",""lat"":44.9449,""lon"":-91.3968}}",1,51,1
+512_brewing_company-512_alt,0,0,244380663809,"{""name"":""(512) ALT"",""abv"":6.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""512_brewing_company"",""updated"":""2010-07-22 20:00:20"",""description"":""(512) ALT is a German-style amber ale that is fermented cooler than typical ales and cold conditioned like a lager. ALT means “old” in German and refers to a beer style made using ale yeast after many German brewers had switched to newly discovered lager yeast. This ale has a very smooth, yet pronounced, hop bitterness with a malty backbone and a characteristic German yeast character. Made with 98% Organic 2-row and Munch malts and US noble hops."",""style"":""German-Style Brown Ale/Altbier"",""category"":""German Ale""}",1,60,1
+flatlander_s_restaurant_brewery-prairie_wheat_beer,0,0,244625899521,"{""name"":""Prairie Wheat Beer"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""flatlander_s_restaurant_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Lager"",""category"":""North American Lager""}",1,45,1
+f_x_matt_brewing-pomegranate_wheat,0,0,244619083777,"{""name"":""Pomegranate Wheat"",""abv"":4.7,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""f_x_matt_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""This wholesome combination of unfiltered wheat beer and real pomegranate juice makes a smooth refreshing beer with all the goodness of pomegranate. Look for a light body with a slight tart finish and golden straw color."",""style"":""Fruit Beer"",""category"":""Other Style""}",1,30,1
+brooklyn_brewery-brooklyn_summer_ale,0,0,244485980160,"{""name"":""Brooklyn Summer Ale"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""brooklyn_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""It is light with a bit of a citrus flavor.  A pretty standard summer seasonal."",""style"":""Golden or Blonde Ale"",""category"":""North American Ale""}",1,29,1
+esser_s_cross_plains_brewery-esser_s_cross_plains_special,0,0,244621967361,"{""name"":""Esser's Cross Plains Special"",""abv"":0.0,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""esser_s_cross_plains_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""German-Style Pilsener"",""category"":""German Lager""}",1,36,1
+john_harvard_s_brewhouse_wilmington,0,0,244755202048,"{""name"":""John Harvard's Brewhouse - Wilmington"",""city"":""Wilmington"",""state"":""Delaware"",""code"":"""",""country"":""United States"",""phone"":"""",""website"":"""",""type"":""brewery"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""address"":[],""geo"":{""accuracy"":""APPROXIMATE"",""lat"":39.7458,""lon"":-75.5467}}",1,51,1
+adnams_co-nut_brown_ale,0,0,244380729344,"{""name"":""Nut Brown Ale"",""abv"":3.2,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""adnams_co"",""updated"":""2010-07-22 20:00:20"",""description"":"""",""style"":""American-Style Brown Ale"",""category"":""North American Ale""}",1,60,1
+flying_dog_brewery-garde_dog,0,0,244625965056,"{""name"":""Garde Dog"",""abv"":5.8,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""flying_dog_brewery"",""updated"":""2010-07-22 20:00:20"",""description"":""Proving the French may actually know something we don't... Garde Dog is a traditional French Biere de Garde or \""beer for keeping\"". This classic farmhouse ale was brewed in March for drinking during the spring and summer months. With it's toasted aroma and spicy, malty sweetness Garde Dog will liberate you from the winter doldrum.""}",1,45,1
+f_x_matt_brewing-roggen_bock,0,0,244619083778,"{""name"":""Roggen Bock"",""abv"":5.5,""ibu"":0.0,""srm"":0.0,""upc"":0,""type"":""beer"",""brewery_id"":""f_x_matt_brewing"",""updated"":""2010-07-22 20:00:20"",""description"":""Brewed in the tradition of great German Bock beers with only German malts and hops, using 20% rye, malt to give it a distinctive sp

<TRUNCATED>


[3/3] incubator-asterixdb-hyracks git commit: Support Change Feeds and Ingestion of Records with MetaData

Posted by am...@apache.org.
Support Change Feeds and Ingestion of Records with MetaData

This change allows feeds to perform upserts and deletes
in order to perform replication of an external data source.
The change does so by performing the following:
1. The adapter produces [PK][Record]. (Record == null --> delete)
2. The insert is replaced by an upsert operator.
Change-Id: I3749349e2b9f1b03c8b310eb99d3f44d08be77df
Reviewed-on: https://asterix-gerrit.ics.uci.edu/620
Reviewed-by: Yingyi Bu <bu...@gmail.com>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>


Project: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/commit/7dabc19f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/tree/7dabc19f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/diff/7dabc19f

Branch: refs/heads/master
Commit: 7dabc19f75e45f0d1a577b304abd07b1301dab54
Parents: 3f2f539
Author: Abdullah Alamoudi <ba...@gmail.com>
Authored: Wed Mar 16 01:58:46 2016 +0300
Committer: abdullah alamoudi <ba...@gmail.com>
Committed: Tue Mar 15 16:28:42 2016 -0700

----------------------------------------------------------------------
 .../AbstractFunctionCallExpression.java         |   17 +-
 .../algebra/metadata/IMetadataProvider.java     |   10 +-
 .../operators/logical/AssignOperator.java       |   22 +-
 .../logical/InsertDeleteUpsertOperator.java     |   26 +-
 .../operators/logical/ProjectOperator.java      |    5 +-
 .../operators/logical/UnnestOperator.java       |    4 +-
 .../logical/visitors/UsedVariableVisitor.java   |    6 +
 .../operators/physical/BulkloadPOperator.java   |   20 +-
 .../physical/InsertDeleteUpsertPOperator.java   |   16 +-
 .../core/algebra/plan/ALogicalPlanImpl.java     |   25 +-
 .../LogicalOperatorPrettyPrintVisitor.java      |   10 +-
 .../piglet/metadata/PigletMetadataProvider.java |   13 +-
 .../rules/ExtractCommonExpressionsRule.java     |   13 +-
 .../SetAlgebricksPhysicalOperatorsRule.java     |   16 +-
 .../api/dataflow/value/RecordDescriptor.java    |    2 +-
 .../common/comm/io/ArrayTupleBuilder.java       |   11 +-
 .../common/comm/io/FrameTupleAccessor.java      |   63 +-
 .../hyracks/dataflow/std/file/FileSplit.java    |    3 +-
 .../hyracks/dataflow/std/file/CursorTest.java   |  108 +
 .../src/test/resources/data/beer.txt            | 7308 ++++++++++++++++++
 .../IndexBulkLoadOperatorNodePushable.java      |    5 +-
 ...xInsertUpdateDeleteOperatorNodePushable.java |    2 +-
 .../TreeIndexCreateOperatorDescriptor.java      |    4 +-
 .../am/common/tuples/TypeAwareTupleWriter.java  |   10 +-
 .../am/lsm/btree/util/LSMBTreeUtils.java        |    3 +-
 .../impls/AbstractMemoryLSMComponent.java       |    4 +-
 .../lsm/common/impls/LSMIndexSearchCursor.java  |   15 +-
 pom.xml                                         |    3 +-
 28 files changed, 7635 insertions(+), 109 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractFunctionCallExpression.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractFunctionCallExpression.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractFunctionCallExpression.java
index 7f88e2f..e357dea 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractFunctionCallExpression.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractFunctionCallExpression.java
@@ -27,7 +27,6 @@ import java.util.Map;
 
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
-
 import org.apache.hyracks.algebricks.core.algebra.base.EquivalenceClass;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
@@ -110,6 +109,7 @@ public abstract class AbstractFunctionCallExpression extends AbstractLogicalExpr
         return arguments;
     }
 
+    @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("function-call: " + finfo.getFunctionIdentifier() + ", Args:[");
@@ -172,7 +172,8 @@ public abstract class AbstractFunctionCallExpression extends AbstractLogicalExpr
     }
 
     @Override
-    public void getConstraintsForOuterJoin(Collection<FunctionalDependency> fds, Collection<LogicalVariable> outerVars) {
+    public void getConstraintsForOuterJoin(Collection<FunctionalDependency> fds,
+            Collection<LogicalVariable> outerVars) {
         FunctionIdentifier funId = getFunctionIdentifier();
         if (funId.equals(AlgebricksBuiltinFunctions.AND)) {
             for (Mutable<ILogicalExpression> a : arguments) {
@@ -202,22 +203,26 @@ public abstract class AbstractFunctionCallExpression extends AbstractLogicalExpr
         } else {
             AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) obj;
             boolean equal = getFunctionIdentifier().equals(fce.getFunctionIdentifier());
-            if (!equal)
+            if (!equal) {
                 return false;
+            }
             for (int i = 0; i < arguments.size(); i++) {
                 ILogicalExpression argument = arguments.get(i).getValue();
                 ILogicalExpression fceArgument = fce.getArguments().get(i).getValue();
-                if (!argument.equals(fceArgument))
+                if (!argument.equals(fceArgument)) {
                     return false;
+                }
             }
             if (opaqueParameters != null) {
-                if (opaqueParameters.length != fce.opaqueParameters.length)
+                if (opaqueParameters.length != fce.opaqueParameters.length) {
                     return false;
+                }
                 for (int i = 0; i < opaqueParameters.length; i++) {
                     Object opaqueParameter = opaqueParameters[i];
                     Object fceOpaqueParameter = fce.opaqueParameters[i];
-                    if (!opaqueParameter.equals(fceOpaqueParameter))
+                    if (!opaqueParameter.equals(fceOpaqueParameter)) {
                         return false;
+                    }
                 }
             }
             return true;

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/metadata/IMetadataProvider.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/metadata/IMetadataProvider.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/metadata/IMetadataProvider.java
index 1ad7fe6..8466ef9 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/metadata/IMetadataProvider.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/metadata/IMetadataProvider.java
@@ -67,8 +67,9 @@ public interface IMetadataProvider<S, I> {
 
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInsertRuntime(IDataSource<S> dataSource,
             IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv, List<LogicalVariable> keys,
-            LogicalVariable payLoadVar, List<LogicalVariable> additionalNonKeyFields, RecordDescriptor recordDesc,
-            JobGenContext context, JobSpecification jobSpec, boolean bulkload) throws AlgebricksException;
+            LogicalVariable payLoadVar, List<LogicalVariable> additionalFilterKeyFields,
+            List<LogicalVariable> additionalNonFilteringFields, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification jobSpec, boolean bulkload) throws AlgebricksException;
 
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getDeleteRuntime(IDataSource<S> dataSource,
             IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv, List<LogicalVariable> keys,
@@ -195,8 +196,9 @@ public interface IMetadataProvider<S, I> {
 
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getUpsertRuntime(IDataSource<S> dataSource,
             IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv, List<LogicalVariable> keys,
-            LogicalVariable payLoadVar, List<LogicalVariable> additionalNonKeyFields, LogicalVariable prevPayload,
-            RecordDescriptor recordDesc, JobGenContext context, JobSpecification jobSpec) throws AlgebricksException;
+            LogicalVariable payLoadVar, List<LogicalVariable> additionalFilterFields,
+            List<LogicalVariable> additionalNonFilteringFields, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification jobSpec) throws AlgebricksException;
 
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexUpsertRuntime(
             IDataSourceIndex<I, S> dataSourceIndex, IOperatorSchema propagatedSchema, IOperatorSchema[] inputSchemas,

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
index aebbba8..f491028 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
@@ -19,8 +19,8 @@
 package org.apache.hyracks.algebricks.core.algebra.operators.logical;
 
 import java.util.List;
-import org.apache.commons.lang3.mutable.Mutable;
 
+import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
@@ -42,14 +42,13 @@ import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisit
 
 public class AssignOperator extends AbstractAssignOperator {
 
-	private LocalOrderProperty explicitOrderingProperty;
+    private LocalOrderProperty explicitOrderingProperty;
 
     public AssignOperator(List<LogicalVariable> vars, List<Mutable<ILogicalExpression>> exprs) {
         super(vars, exprs);
     }
 
     public AssignOperator(LogicalVariable var, Mutable<ILogicalExpression> expr) {
-        super();
         this.variables.add(var);
         this.expressions.add(expr);
     }
@@ -90,10 +89,8 @@ public class AssignOperator extends AbstractAssignOperator {
         PropagatingTypeEnvironment env = createPropagatingAllInputsTypeEnvironment(ctx);
         int n = variables.size();
         for (int i = 0; i < n; i++) {
-            env.setVarType(
-                    variables.get(i),
-                    ctx.getExpressionTypeComputer().getType(expressions.get(i).getValue(), ctx.getMetadataProvider(),
-                            env));
+            env.setVarType(variables.get(i), ctx.getExpressionTypeComputer().getType(expressions.get(i).getValue(),
+                    ctx.getMetadataProvider(), env));
             if (expressions.get(i).getValue().getExpressionTag() == LogicalExpressionTag.VARIABLE) {
                 LogicalVariable var = ((VariableReferenceExpression) expressions.get(i).getValue())
                         .getVariableReference();
@@ -113,11 +110,10 @@ public class AssignOperator extends AbstractAssignOperator {
     }
 
     public LocalOrderProperty getExplicitOrderingProperty() {
-		return explicitOrderingProperty;
-	}
+        return explicitOrderingProperty;
+    }
 
-	public void setExplicitOrderingProperty(
-			LocalOrderProperty explicitOrderingProperty) {
-		this.explicitOrderingProperty = explicitOrderingProperty;
-	}
+    public void setExplicitOrderingProperty(LocalOrderProperty explicitOrderingProperty) {
+        this.explicitOrderingProperty = explicitOrderingProperty;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/InsertDeleteUpsertOperator.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/InsertDeleteUpsertOperator.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/InsertDeleteUpsertOperator.java
index 607db69..6a74eb9 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/InsertDeleteUpsertOperator.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/InsertDeleteUpsertOperator.java
@@ -49,18 +49,33 @@ public class InsertDeleteUpsertOperator extends AbstractLogicalOperator {
     private final Kind operation;
     private final boolean bulkload;
     private List<Mutable<ILogicalExpression>> additionalFilteringExpressions;
+    private final List<Mutable<ILogicalExpression>> additionalNonFilteringExpressions;
+    // previous record (for UPSERT)
     private LogicalVariable prevRecordVar;
     private Object prevRecordType;
+    // previous filter (for UPSERT)
     private LogicalVariable prevFilterVar;
     private Object prevFilterType;
 
     public InsertDeleteUpsertOperator(IDataSource<?> dataSource, Mutable<ILogicalExpression> payloadExpr,
+            List<Mutable<ILogicalExpression>> primaryKeyExprs,
+            List<Mutable<ILogicalExpression>> additionalNonFilteringExpressions, Kind operation, boolean bulkload) {
+        this.dataSource = dataSource;
+        this.payloadExpr = payloadExpr;
+        this.primaryKeyExprs = primaryKeyExprs;
+        this.operation = operation;
+        this.bulkload = bulkload;
+        this.additionalNonFilteringExpressions = additionalNonFilteringExpressions;
+    }
+
+    public InsertDeleteUpsertOperator(IDataSource<?> dataSource, Mutable<ILogicalExpression> payloadExpr,
             List<Mutable<ILogicalExpression>> primaryKeyExprs, Kind operation, boolean bulkload) {
         this.dataSource = dataSource;
         this.payloadExpr = payloadExpr;
         this.primaryKeyExprs = primaryKeyExprs;
         this.operation = operation;
         this.bulkload = bulkload;
+        this.additionalNonFilteringExpressions = null;
     }
 
     @Override
@@ -98,6 +113,11 @@ public class InsertDeleteUpsertOperator extends AbstractLogicalOperator {
                 changed |= transform.transform(e);
             }
         }
+        if (additionalNonFilteringExpressions != null) {
+            for (Mutable<ILogicalExpression> e : additionalNonFilteringExpressions) {
+                changed |= transform.transform(e);
+            }
+        }
         return changed;
     }
 
@@ -108,7 +128,7 @@ public class InsertDeleteUpsertOperator extends AbstractLogicalOperator {
 
     @Override
     public boolean isMap() {
-        return false;
+        return true;
     }
 
     @Override
@@ -165,6 +185,10 @@ public class InsertDeleteUpsertOperator extends AbstractLogicalOperator {
         return bulkload;
     }
 
+    public List<Mutable<ILogicalExpression>> getAdditionalNonFilteringExpressions() {
+        return additionalNonFilteringExpressions;
+    }
+
     public void setAdditionalFilteringExpressions(List<Mutable<ILogicalExpression>> additionalFilteringExpressions) {
         this.additionalFilteringExpressions = additionalFilteringExpressions;
     }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/ProjectOperator.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/ProjectOperator.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/ProjectOperator.java
index ceca63b..672d32c 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/ProjectOperator.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/ProjectOperator.java
@@ -41,12 +41,12 @@ public class ProjectOperator extends AbstractLogicalOperator {
 
     public ProjectOperator(LogicalVariable v) {
         this.variables = new ArrayList<LogicalVariable>(1);
-        this.getVariables().add(v);
+        variables.add(v);
     }
 
     @Override
     public boolean acceptExpressionTransform(ILogicalExpressionReferenceTransform visitor) {
-        // do nothing
+        // Do nothing
         return false;
     }
 
@@ -83,5 +83,4 @@ public class ProjectOperator extends AbstractLogicalOperator {
     public IVariableTypeEnvironment computeOutputTypeEnvironment(ITypingContext ctx) throws AlgebricksException {
         return createPropagatingAllInputsTypeEnvironment(ctx);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnnestOperator.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnnestOperator.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnnestOperator.java
index ecc4772..e90298d 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnnestOperator.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnnestOperator.java
@@ -19,7 +19,6 @@
 package org.apache.hyracks.algebricks.core.algebra.operators.logical;
 
 import org.apache.commons.lang3.mutable.Mutable;
-
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
@@ -36,7 +35,8 @@ public class UnnestOperator extends AbstractUnnestNonMapOperator {
     }
 
     public UnnestOperator(LogicalVariable variable, Mutable<ILogicalExpression> expression,
-            LogicalVariable positionalVariable, Object positionalVariableType, IUnnestingPositionWriter positionWriter) {
+            LogicalVariable positionalVariable, Object positionalVariableType,
+            IUnnestingPositionWriter positionWriter) {
         super(variable, expression, positionalVariable, positionalVariableType, positionWriter);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
index 6e895bd..2feea5d 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
@@ -382,6 +382,12 @@ public class UsedVariableVisitor implements ILogicalOperatorVisitor<Void, Void>
                 e.getValue().getUsedVariables(usedVariables);
             }
         }
+        // 4. The Other variables (Not key, Not payload, and Not Filter)
+        if (op.getAdditionalNonFilteringExpressions() != null) {
+            for (Mutable<ILogicalExpression> e : op.getAdditionalNonFilteringExpressions()) {
+                e.getValue().getUsedVariables(usedVariables);
+            }
+        }
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
index 036ac05..8ac3271 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
@@ -52,13 +52,16 @@ public class BulkloadPOperator extends AbstractPhysicalOperator {
     private final LogicalVariable payload;
     private final List<LogicalVariable> primaryKeys;
     private final List<LogicalVariable> additionalFilteringKeys;
+    private final List<LogicalVariable> additionalNonFilterVars;
     private final IDataSource<?> dataSource;
 
     public BulkloadPOperator(LogicalVariable payload, List<LogicalVariable> keys,
-           List<LogicalVariable> additionalFilteringKeys, IDataSource<?> dataSource) {
+            List<LogicalVariable> additionalFilteringKeys, List<LogicalVariable> additionalNonFilterVars,
+            IDataSource<?> dataSource) {
         this.payload = payload;
         this.primaryKeys = keys;
         this.additionalFilteringKeys = additionalFilteringKeys;
+        this.additionalNonFilterVars = additionalNonFilterVars;
         this.dataSource = dataSource;
     }
 
@@ -73,8 +76,8 @@ public class BulkloadPOperator extends AbstractPhysicalOperator {
         List<LogicalVariable> scanVariables = new ArrayList<>();
         scanVariables.addAll(primaryKeys);
         scanVariables.add(new LogicalVariable(-1));
-        IPhysicalPropertiesVector physicalProps = dataSource.getPropertiesProvider().computePropertiesVector(
-                scanVariables);
+        IPhysicalPropertiesVector physicalProps = dataSource.getPropertiesProvider()
+                .computePropertiesVector(scanVariables);
         StructuralPropertiesVector spv = new StructuralPropertiesVector(physicalProps.getPartitioningProperty(),
                 physicalProps.getLocalProperties());
         return new PhysicalRequirements(new IPhysicalPropertiesVector[] { spv },
@@ -85,24 +88,24 @@ public class BulkloadPOperator extends AbstractPhysicalOperator {
     public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context)
             throws AlgebricksException {
         AbstractLogicalOperator op2 = (AbstractLogicalOperator) op.getInputs().get(0).getValue();
-        deliveredProperties = (StructuralPropertiesVector) op2.getDeliveredPhysicalProperties().clone();
+        deliveredProperties = op2.getDeliveredPhysicalProperties().clone();
     }
 
+    @SuppressWarnings({ "rawtypes", "unchecked" })
     @Override
     public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
             IOperatorSchema propagatedSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
-            throws AlgebricksException {
+                    throws AlgebricksException {
         InsertDeleteUpsertOperator insertDeleteOp = (InsertDeleteUpsertOperator) op;
         assert insertDeleteOp.getOperation() == Kind.INSERT;
         assert insertDeleteOp.isBulkload();
-
         IMetadataProvider mp = context.getMetadataProvider();
         IVariableTypeEnvironment typeEnv = context.getTypeEnvironment(op);
         JobSpecification spec = builder.getJobSpec();
         RecordDescriptor inputDesc = JobGenHelper.mkRecordDescriptor(
                 context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas[0], context);
-        Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints = mp.getInsertRuntime(
-                dataSource, propagatedSchema, typeEnv, primaryKeys, payload, additionalFilteringKeys,
+        Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints = mp.getInsertRuntime(dataSource,
+                propagatedSchema, typeEnv, primaryKeys, payload, additionalFilteringKeys, additionalNonFilterVars,
                 inputDesc, context, spec, true);
         builder.contributeHyracksOperator(insertDeleteOp, runtimeAndConstraints.first);
         builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
@@ -120,5 +123,4 @@ public class BulkloadPOperator extends AbstractPhysicalOperator {
         return false;
     }
 
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
index d844f37..2e4b647 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
@@ -48,22 +48,22 @@ import org.apache.hyracks.api.job.JobSpecification;
 @SuppressWarnings("rawtypes")
 public class InsertDeleteUpsertPOperator extends AbstractPhysicalOperator {
 
-    private LogicalVariable payload;
-    private List<LogicalVariable> keys;
-    private IDataSource<?> dataSource;
+    private final LogicalVariable payload;
+    private final List<LogicalVariable> keys;
+    private final IDataSource<?> dataSource;
     private final List<LogicalVariable> additionalFilteringKeys;
+    private final List<LogicalVariable> additionalNonFilteringFields;
     private final Kind operation;
-    private final LogicalVariable prevPayload;
 
     public InsertDeleteUpsertPOperator(LogicalVariable payload, List<LogicalVariable> keys,
             List<LogicalVariable> additionalFilteringKeys, IDataSource dataSource, Kind operation,
-            LogicalVariable prevPayload) {
+            List<LogicalVariable> additionalNonFilteringFields) {
         this.payload = payload;
         this.keys = keys;
         this.dataSource = dataSource;
         this.additionalFilteringKeys = additionalFilteringKeys;
         this.operation = operation;
-        this.prevPayload = prevPayload;
+        this.additionalNonFilteringFields = additionalNonFilteringFields;
     }
 
     @Override
@@ -106,13 +106,13 @@ public class InsertDeleteUpsertPOperator extends AbstractPhysicalOperator {
         Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints = null;
         if (operation == Kind.INSERT) {
             runtimeAndConstraints = mp.getInsertRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
-                    additionalFilteringKeys, inputDesc, context, spec, false);
+                    additionalFilteringKeys, additionalNonFilteringFields, inputDesc, context, spec, false);
         } else if (operation == Kind.DELETE) {
             runtimeAndConstraints = mp.getDeleteRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
                     additionalFilteringKeys, inputDesc, context, spec);
         } else if (operation == Kind.UPSERT) {
             runtimeAndConstraints = mp.getUpsertRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
-                    additionalFilteringKeys, prevPayload, inputDesc, context, spec);
+                    additionalFilteringKeys, additionalNonFilteringFields, inputDesc, context, spec);
         } else {
             throw new AlgebricksException("Unsupported Operation " + operation);
         }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java
index be84a9f..082c2ce 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java
@@ -22,14 +22,12 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang3.mutable.Mutable;
-
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
+import org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor;
+import org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter;
 
-/*
- * Author: Guangqiang Li
- * Created on Jul 9, 2009
- */
 public class ALogicalPlanImpl implements ILogicalPlan {
     private List<Mutable<ILogicalOperator>> roots;
 
@@ -46,6 +44,7 @@ public class ALogicalPlanImpl implements ILogicalPlan {
         roots.add(root);
     }
 
+    @Override
     public List<Mutable<ILogicalOperator>> getRoots() {
         return roots;
     }
@@ -53,4 +52,20 @@ public class ALogicalPlanImpl implements ILogicalPlan {
     public void setRoots(List<Mutable<ILogicalOperator>> roots) {
         this.roots = roots;
     }
+
+    public static String prettyPrintPlan(ILogicalPlan plan) throws AlgebricksException {
+        LogicalOperatorPrettyPrintVisitor pvisitor = new LogicalOperatorPrettyPrintVisitor();
+        StringBuilder buffer = new StringBuilder();
+        PlanPrettyPrinter.printPlan(plan, buffer, pvisitor, 0);
+        return buffer.toString();
+    }
+
+    @Override
+    public String toString() {
+        try {
+            return ALogicalPlanImpl.prettyPrintPlan(this);
+        } catch (AlgebricksException e) {
+            throw new IllegalStateException(e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
index b85202d..a7ea706 100644
--- a/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
+++ b/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
@@ -379,10 +379,14 @@ public class LogicalOperatorPrettyPrintVisitor implements ILogicalOperatorVisito
         StringBuilder buffer = new StringBuilder();
         String header = getIndexOpString(op.getOperation());
         addIndent(buffer, indent).append(header).append(op.getDataSource()).append(" from ")
-                .append(op.getPayloadExpression().getValue().accept(exprVisitor, indent)).append(" partitioned by ");
+                .append(op.getPayloadExpression().getValue().accept(exprVisitor, indent));
+        if (op.getAdditionalNonFilteringExpressions() != null) {
+            pprintExprList(op.getAdditionalNonFilteringExpressions(), buffer, indent);
+        }
+        buffer.append(" partitioned by ");
         pprintExprList(op.getPrimaryKeyExpressions(), buffer, indent);
         if (op.getOperation() == Kind.UPSERT) {
-            buffer.append(" out: ([" + op.getPrevRecordVar() + "] <-{record-before-upsert}) ");
+            buffer.append(" out: ([record-before-upsert:" + op.getPrevRecordVar() + "]) ");
         }
         if (op.isBulkload()) {
             buffer.append(" [bulkload]");
@@ -445,7 +449,7 @@ public class LogicalOperatorPrettyPrintVisitor implements ILogicalOperatorVisito
         return buffer.toString();
     }
 
-    protected static final StringBuilder addIndent(StringBuilder buffer, int level) {
+    protected static StringBuilder addIndent(StringBuilder buffer, int level) {
         for (int i = 0; i < level; ++i) {
             buffer.append(' ');
         }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-examples/piglet-example/src/main/java/org/apache/hyracks/algebricks/examples/piglet/metadata/PigletMetadataProvider.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-examples/piglet-example/src/main/java/org/apache/hyracks/algebricks/examples/piglet/metadata/PigletMetadataProvider.java b/algebricks/algebricks-examples/piglet-example/src/main/java/org/apache/hyracks/algebricks/examples/piglet/metadata/PigletMetadataProvider.java
index 8bf3dbb..f586af7 100644
--- a/algebricks/algebricks-examples/piglet-example/src/main/java/org/apache/hyracks/algebricks/examples/piglet/metadata/PigletMetadataProvider.java
+++ b/algebricks/algebricks-examples/piglet-example/src/main/java/org/apache/hyracks/algebricks/examples/piglet/metadata/PigletMetadataProvider.java
@@ -78,7 +78,6 @@ public class PigletMetadataProvider implements IMetadataProvider<String, String>
         return null;
     }
 
-    @SuppressWarnings("unchecked")
     @Override
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getScannerRuntime(IDataSource<String> dataSource,
             List<LogicalVariable> scanVariables, List<LogicalVariable> projectVariables, boolean projectPushed,
@@ -216,8 +215,9 @@ public class PigletMetadataProvider implements IMetadataProvider<String, String>
     @Override
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInsertRuntime(IDataSource<String> dataSource,
             IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv, List<LogicalVariable> keys,
-            LogicalVariable payLoadVar, List<LogicalVariable> additionalNonKeyFields, RecordDescriptor recordDesc,
-            JobGenContext context, JobSpecification jobSpec, boolean bulkload) throws AlgebricksException {
+            LogicalVariable payLoadVar, List<LogicalVariable> additionalFilterKeyFields,
+            List<LogicalVariable> additionalNonFilteringFields, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification jobSpec, boolean bulkload) throws AlgebricksException {
         // TODO Auto-generated method stub
         return null;
     }
@@ -234,8 +234,9 @@ public class PigletMetadataProvider implements IMetadataProvider<String, String>
     @Override
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getUpsertRuntime(IDataSource<String> dataSource,
             IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv, List<LogicalVariable> keys,
-            LogicalVariable payLoadVar, List<LogicalVariable> additionalNonKeyFields, LogicalVariable prevPayload,
-            RecordDescriptor recordDesc, JobGenContext context, JobSpecification jobSpec) throws AlgebricksException {
+            LogicalVariable payLoadVar, List<LogicalVariable> additionalFilterFields,
+            List<LogicalVariable> additionalNonFilteringFields, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification jobSpec) throws AlgebricksException {
         // TODO Auto-generated method stub
         return null;
     }
@@ -246,7 +247,7 @@ public class PigletMetadataProvider implements IMetadataProvider<String, String>
             IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv, List<LogicalVariable> primaryKeys,
             List<LogicalVariable> secondaryKeys, List<LogicalVariable> additionalFilteringKeys,
             ILogicalExpression filterExpr, List<LogicalVariable> prevSecondaryKeys,
-            LogicalVariable prevAdditionalFilteringKeys, RecordDescriptor inputDesc, JobGenContext context,
+            LogicalVariable prevAdditionalFilteringFields, RecordDescriptor inputDesc, JobGenContext context,
             JobSpecification spec) throws AlgebricksException {
         // TODO Auto-generated method stub
         return null;

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java b/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
index e5581dc..11ff4be 100644
--- a/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
+++ b/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
@@ -28,7 +28,6 @@ import java.util.Set;
 
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
-
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
@@ -93,7 +92,8 @@ public class ExtractCommonExpressionsRule implements IAlgebraicRewriteRule {
     private final Map<ILogicalExpression, ExprEquivalenceClass> exprEqClassMap = new HashMap<ILogicalExpression, ExprEquivalenceClass>();
 
     // Set of operators for which common subexpression elimination should not be performed.
-    private static final Set<LogicalOperatorTag> ignoreOps = new HashSet<LogicalOperatorTag>();
+    private static final Set<LogicalOperatorTag> ignoreOps = new HashSet<LogicalOperatorTag>(6);
+
     static {
         ignoreOps.add(LogicalOperatorTag.UNNEST);
         ignoreOps.add(LogicalOperatorTag.UNNEST_MAP);
@@ -110,7 +110,8 @@ public class ExtractCommonExpressionsRule implements IAlgebraicRewriteRule {
     }
 
     @Override
-    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
         exprEqClassMap.clear();
         substVisitor.setContext(context);
         boolean modified = removeCommonExpressions(opRef, context);
@@ -310,14 +311,14 @@ public class ExtractCommonExpressionsRule implements IAlgebraicRewriteRule {
                 selectOp.getInputs().add(new MutableObject<ILogicalOperator>(op.getInputs().get(0).getValue()));
                 op.getInputs().get(0).setValue(selectOp);
                 // Set firstOp to be the select below op, since we want to assign the common subexpr there.
-                firstOp = (AbstractLogicalOperator) selectOp;
+                firstOp = selectOp;
             } else if (firstOp.getInputs().size() > 1) {
                 // Bail for any non-join operator with multiple inputs.
                 return false;
             }
             LogicalVariable newVar = context.newVar();
-            AssignOperator newAssign = new AssignOperator(newVar, new MutableObject<ILogicalExpression>(firstExprRef
-                    .getValue().cloneExpression()));
+            AssignOperator newAssign = new AssignOperator(newVar,
+                    new MutableObject<ILogicalExpression>(firstExprRef.getValue().cloneExpression()));
             // Place assign below firstOp.
             newAssign.getInputs().add(new MutableObject<ILogicalOperator>(firstOp.getInputs().get(0).getValue()));
             newAssign.setExecutionMode(firstOp.getExecutionMode());

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
----------------------------------------------------------------------
diff --git a/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java b/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
index 8e12ece..6524d87 100644
--- a/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
+++ b/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
@@ -154,8 +154,9 @@ public class SetAlgebricksPhysicalOperatorsRule implements IAlgebraicRewriteRule
                     if (gby.getNestedPlans().size() == 1) {
                         ILogicalPlan p0 = gby.getNestedPlans().get(0);
                         if (p0.getRoots().size() == 1) {
-                            if (gby.getAnnotations().get(OperatorAnnotations.USE_HASH_GROUP_BY) == Boolean.TRUE || gby
-                                    .getAnnotations().get(OperatorAnnotations.USE_EXTERNAL_GROUP_BY) == Boolean.TRUE) {
+                            if ((gby.getAnnotations().get(OperatorAnnotations.USE_HASH_GROUP_BY) == Boolean.TRUE)
+                                    || (gby.getAnnotations()
+                                            .get(OperatorAnnotations.USE_EXTERNAL_GROUP_BY) == Boolean.TRUE)) {
                                 if (!topLevelOp) {
                                     throw new NotImplementedException(
                                             "External hash group-by for nested grouping is not implemented.");
@@ -299,17 +300,22 @@ public class SetAlgebricksPhysicalOperatorsRule implements IAlgebraicRewriteRule
                     LogicalVariable payload;
                     List<LogicalVariable> keys = new ArrayList<LogicalVariable>();
                     List<LogicalVariable> additionalFilteringKeys = null;
+                    List<LogicalVariable> additionalNonFilterVariables = null;
+                    if (opLoad.getAdditionalNonFilteringExpressions() != null) {
+                        additionalNonFilterVariables = new ArrayList<LogicalVariable>();
+                        getKeys(opLoad.getAdditionalNonFilteringExpressions(), additionalNonFilterVariables);
+                    }
                     payload = getKeysAndLoad(opLoad.getPayloadExpression(), opLoad.getPrimaryKeyExpressions(), keys);
                     if (opLoad.getAdditionalFilteringExpressions() != null) {
                         additionalFilteringKeys = new ArrayList<LogicalVariable>();
                         getKeys(opLoad.getAdditionalFilteringExpressions(), additionalFilteringKeys);
                     }
                     if (opLoad.isBulkload()) {
-                        op.setPhysicalOperator(
-                                new BulkloadPOperator(payload, keys, additionalFilteringKeys, opLoad.getDataSource()));
+                        op.setPhysicalOperator(new BulkloadPOperator(payload, keys, additionalFilteringKeys,
+                                additionalNonFilterVariables, opLoad.getDataSource()));
                     } else {
                         op.setPhysicalOperator(new InsertDeleteUpsertPOperator(payload, keys, additionalFilteringKeys,
-                                opLoad.getDataSource(), opLoad.getOperation(), opLoad.getPrevRecordVar()));
+                                opLoad.getDataSource(), opLoad.getOperation(), additionalNonFilterVariables));
                     }
                     break;
                 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/value/RecordDescriptor.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/value/RecordDescriptor.java b/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/value/RecordDescriptor.java
index 80e86e9..2ee4a29 100644
--- a/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/value/RecordDescriptor.java
+++ b/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/value/RecordDescriptor.java
@@ -20,7 +20,7 @@ package org.apache.hyracks.api.dataflow.value;
 
 import java.io.Serializable;
 
-@SuppressWarnings("unchecked")
+@SuppressWarnings("rawtypes")
 public final class RecordDescriptor implements Serializable {
     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/ArrayTupleBuilder.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/ArrayTupleBuilder.java b/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/ArrayTupleBuilder.java
index 84ddab6..e5f7d09 100644
--- a/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/ArrayTupleBuilder.java
+++ b/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/ArrayTupleBuilder.java
@@ -26,13 +26,15 @@ import org.apache.hyracks.api.comm.IFrameTupleAccessor;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IValueReference;
 import org.apache.hyracks.data.std.util.GrowableArray;
 
 /**
  * Array backed tuple builder.
  *
- * @author vinayakb
+ * @deprecated Use IFrameFieldAppender.appendField to append fields directly.
  */
+@Deprecated
 public class ArrayTupleBuilder implements IDataOutputProvider {
     private final GrowableArray fieldData = new GrowableArray();
     private final int[] fEndOffsets;
@@ -166,4 +168,11 @@ public class ArrayTupleBuilder implements IDataOutputProvider {
     public void addFieldEndOffset() {
         fEndOffsets[nextField++] = fieldData.getLength();
     }
+
+    /**
+     * Adds a new field and fills it with the content of the passed value
+     */
+    public void addField(IValueReference data) throws HyracksDataException {
+        addField(data.getByteArray(), data.getStartOffset(), data.getLength());
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameTupleAccessor.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameTupleAccessor.java b/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameTupleAccessor.java
index bab5463..e314cd1 100644
--- a/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameTupleAccessor.java
+++ b/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameTupleAccessor.java
@@ -19,6 +19,7 @@
 package org.apache.hyracks.dataflow.common.comm.io;
 
 import java.io.DataInputStream;
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
@@ -28,6 +29,7 @@ import org.apache.hyracks.api.comm.IFrameTupleAccessor;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.dataflow.common.comm.util.ByteBufferInputStream;
+import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 import org.apache.hyracks.dataflow.common.util.IntSerDeUtils;
 
 /**
@@ -41,8 +43,8 @@ import org.apache.hyracks.dataflow.common.util.IntSerDeUtils;
  * field slots.
  */
 public class FrameTupleAccessor implements IFrameTupleAccessor {
-    private int tupleCountOffset;
     private final RecordDescriptor recordDescriptor;
+    private int tupleCountOffset;
     private ByteBuffer buffer;
     private int start;
 
@@ -172,7 +174,7 @@ public class FrameTupleAccessor implements IFrameTupleAccessor {
      * using IserializerDeserializer can print incorrect results or throw exceptions.
      * A better way yet would be to use record pointable.
      */
-    public void prettyPrint(String prefix, int[] recordFields) {
+    public void prettyPrint(String prefix, int[] recordFields) throws IOException {
         ByteBufferInputStream bbis = new ByteBufferInputStream();
         DataInputStream dis = new DataInputStream(bbis);
         int tc = getTupleCount();
@@ -184,22 +186,61 @@ public class FrameTupleAccessor implements IFrameTupleAccessor {
         System.err.println(sb.toString());
     }
 
+    public void prettyPrint(int tIdx, int[] recordFields) throws IOException {
+        ByteBufferInputStream bbis = new ByteBufferInputStream();
+        DataInputStream dis = new DataInputStream(bbis);
+        StringBuilder sb = new StringBuilder();
+        prettyPrint(tIdx, bbis, dis, sb, recordFields);
+        System.err.println(sb.toString());
+    }
+
+    public void prettyPrint(ITupleReference tuple, int fieldsIdx, int descIdx) throws HyracksDataException {
+        ByteBufferInputStream bbis = new ByteBufferInputStream();
+        DataInputStream dis = new DataInputStream(bbis);
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        sb.append("f" + fieldsIdx + ":(" + tuple.getFieldStart(fieldsIdx) + ", "
+                + (tuple.getFieldLength(fieldsIdx) + tuple.getFieldStart(fieldsIdx)) + ") ");
+        sb.append("{");
+        ByteBuffer bytebuff = ByteBuffer.wrap(tuple.getFieldData(fieldsIdx));
+        bbis.setByteBuffer(bytebuff, tuple.getFieldStart(fieldsIdx));
+        sb.append(recordDescriptor.getFields()[descIdx].deserialize(dis));
+        sb.append("}");
+        sb.append("\n");
+        System.err.println(sb.toString());
+    }
+
+    public void prettyPrint(ITupleReference tuple, int[] descF) throws HyracksDataException {
+        ByteBufferInputStream bbis = new ByteBufferInputStream();
+        DataInputStream dis = new DataInputStream(bbis);
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        for (int j = 0; j < descF.length; ++j) {
+            sb.append("f" + j + ":(" + tuple.getFieldStart(j) + ", "
+                    + (tuple.getFieldLength(j) + tuple.getFieldStart(j)) + ") ");
+            sb.append("{");
+            ByteBuffer bytebuff = ByteBuffer.wrap(tuple.getFieldData(j));
+            bbis.setByteBuffer(bytebuff, tuple.getFieldStart(j));
+            sb.append(recordDescriptor.getFields()[descF[j]].deserialize(dis));
+            sb.append("}");
+        }
+        sb.append("\n");
+        System.err.println(sb.toString());
+    }
+
     protected void prettyPrint(int tid, ByteBufferInputStream bbis, DataInputStream dis, StringBuilder sb,
-            int[] recordFields) {
+            int[] recordFields) throws IOException {
         Arrays.sort(recordFields);
         sb.append(" tid" + tid + ":(" + getTupleStartOffset(tid) + ", " + getTupleEndOffset(tid) + ")[");
         for (int j = 0; j < getFieldCount(); ++j) {
             sb.append("f" + j + ":(" + getFieldStartOffset(tid, j) + ", " + getFieldEndOffset(tid, j) + ") ");
             sb.append("{");
             bbis.setByteBuffer(buffer, getTupleStartOffset(tid) + getFieldSlotsLength() + getFieldStartOffset(tid, j));
-            try {
-                if (Arrays.binarySearch(recordFields, j) >= 0) {
-                    sb.append("a record field: only print using pointable");
-                } else {
-                    sb.append(recordDescriptor.getFields()[j].deserialize(dis));
-                }
-            } catch (HyracksDataException e) {
-                e.printStackTrace();
+            if (Arrays.binarySearch(recordFields, j) >= 0) {
+                sb.append("{a record field: only print using pointable:");
+                sb.append("tag->" + dis.readByte() + "}");
+            } else {
+                sb.append(recordDescriptor.getFields()[j].deserialize(dis));
             }
             sb.append("}");
         }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/file/FileSplit.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/file/FileSplit.java b/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/file/FileSplit.java
index 592fb9d..b201acd 100644
--- a/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/file/FileSplit.java
+++ b/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/file/FileSplit.java
@@ -25,11 +25,10 @@ import org.apache.hyracks.api.io.FileReference;
 
 public class FileSplit implements Serializable {
     private static final long serialVersionUID = 1L;
-
-    private final String nodeName;
     private final FileReference file;
     private final int ioDeviceId;
     private final int partition;
+    private final String nodeName;
 
     public FileSplit(String nodeName, FileReference file) {
         this.nodeName = nodeName;

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb-hyracks/blob/7dabc19f/hyracks/hyracks-dataflow-std/src/test/java/org/apache/hyracks/dataflow/std/file/CursorTest.java
----------------------------------------------------------------------
diff --git a/hyracks/hyracks-dataflow-std/src/test/java/org/apache/hyracks/dataflow/std/file/CursorTest.java b/hyracks/hyracks-dataflow-std/src/test/java/org/apache/hyracks/dataflow/std/file/CursorTest.java
new file mode 100644
index 0000000..c067313
--- /dev/null
+++ b/hyracks/hyracks-dataflow-std/src/test/java/org/apache/hyracks/dataflow/std/file/CursorTest.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.dataflow.std.file;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Paths;
+
+import org.junit.Assert;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+public class CursorTest extends TestCase {
+
+    /**
+     * Create the test case
+     *
+     * @param testName
+     *            name of the test case
+     */
+    public CursorTest(final String testName) {
+        super(testName);
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite() {
+        return new TestSuite(CursorTest.class);
+    }
+
+    /**
+     *
+     */
+    public void test() {
+        FileInputStream in = null;
+        BufferedReader reader = null;
+        try {
+            in = new FileInputStream(
+                    Paths.get(getClass().getResource("/data/beer.txt").toURI()).toAbsolutePath().toString());
+            reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
+            // skip header
+            final FieldCursorForDelimitedDataParser cursor = new FieldCursorForDelimitedDataParser(reader, ',', '"');
+            // get number of fields from header (first record is header)
+            cursor.nextRecord();
+            int numOfFields = 0;
+            int expectedNumberOfRecords = 7307;
+            while (cursor.nextField()) {
+                numOfFields++;
+            }
+
+            int recordNumber = 0;
+            while (cursor.nextRecord()) {
+                int fieldNumber = 0;
+                while (cursor.nextField()) {
+                    if (cursor.isDoubleQuoteIncludedInThisField) {
+                        cursor.eliminateDoubleQuote(cursor.buffer, cursor.fStart, cursor.fEnd - cursor.fStart);
+                        cursor.fEnd -= cursor.doubleQuoteCount;
+                    }
+                    fieldNumber++;
+                }
+                if ((fieldNumber > numOfFields) || (fieldNumber < numOfFields)) {
+                    System.err.println("Test case failed. Expected number of fields in each record is " + numOfFields
+                            + " and record number " + recordNumber + " was found to have " + fieldNumber);
+                    Assert.assertTrue(false);
+                }
+                recordNumber++;
+            }
+            if (recordNumber != expectedNumberOfRecords) {
+                System.err.println("Test case failed. Expected number of records is " + expectedNumberOfRecords
+                        + " and records was found to be " + recordNumber);
+                Assert.assertTrue(false);
+            } else {
+                System.err.println("TEST PASSED: " + recordNumber + " were lexed successfully.");
+            }
+        } catch (final Exception e) {
+            e.printStackTrace();
+            assert (false);
+        } finally {
+            try {
+                reader.close();
+            } catch (final IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
\ No newline at end of file