diff --git a/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 547a10b..6259faa 100644
--- a/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -429,6 +429,7 @@
   String compactionPolicy = null;
   boolean temp = false;
   List<String> filterField = null;
+  Pair<Identifier,Identifier> metaTypeComponents = new Pair<Identifier, Identifier>(null, null);
 }
 {
   (
@@ -447,6 +448,8 @@
                                    nameComponents.second,
                                    typeComponents.first,
                                    typeComponents.second,
+                                   metaTypeComponents.first,
+                                   metaTypeComponents.second,
                                    nodeGroupName != null? new Identifier(nodeGroupName): null,
                                    compactionPolicy,
                                    compactionPolicyProperties,
@@ -456,9 +459,20 @@
                                    ifNotExists);
       }
 
-    | (<INTERNAL> | <TEMPORARY> { temp = true; })? 
+    | (<INTERNAL> | <TEMPORARY> { temp = true; })?
     <DATASET> nameComponents = QualifiedName()
     <LEFTPAREN> typeComponents = TypeName() <RIGHTPAREN>
+    (
+        { String name; }
+        <WITH>
+        name = Identifier()
+        {
+            if(!name.toLowerCase().equals("meta")){
+                throw new ParseException("We can only support one additional associated field called \"meta\".");
+            }
+        }
+        <LEFTPAREN> metaTypeComponents = TypeName() <RIGHTPAREN>
+    )?
     ifNotExists = IfNotExists()
     primaryKeyFields = PrimaryKey()
     (<AUTOGENERATED> { autogenerated = true; } )?
@@ -475,6 +489,8 @@
                                    nameComponents.second,
                                    typeComponents.first,
                                    typeComponents.second,
+                                   metaTypeComponents.first,
+                                   metaTypeComponents.second,
                                    nodeGroupName != null ? new Identifier(nodeGroupName) : null,
                                    compactionPolicy,
                                    compactionPolicyProperties,
@@ -1385,7 +1401,23 @@
 {
   lit = Identifier()
   {
-    exprList.add(lit);
+    boolean meetParens = false;
+  }
+  (
+    <LEFTPAREN><RIGHTPAREN>
+    {
+        if(lit.toLowerCase().equals("meta")){
+            exprList.add(lit.toLowerCase() + "()");
+        }else{
+            throw new ParseException("The string before () has to be \"meta\".");
+        }
+        meetParens = true;
+    }
+  )?
+  {
+    if(!meetParens){
+        exprList.add(lit);
+    }
   }
   (<DOT>
     lit = Identifier()
