diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 30c7127..f20a0319 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -981,7 +981,7 @@
                         compactionPolicy = StorageConstants.DEFAULT_FILTERED_DATASET_COMPACTION_POLICY_NAME;
                         compactionPolicyProperties = StorageConstants.DEFAULT_COMPACTION_POLICY_PROPERTIES;
                     }
-                    boolean isDatasetWithoutTypeSpec = aRecordType.getFieldNames().length == 0 && metaRecType == null;
+                    boolean isDatasetWithoutTypeSpec = isDatasetWithoutTypeSpec(dd, aRecordType, metaRecType);
                     // Validate dataset properties if the format is COLUMN
                     ColumnPropertiesValidationUtil.validate(sourceLoc, datasetFormatInfo.getFormat(), compactionPolicy,
                             filterField);
@@ -1108,6 +1108,11 @@
         return Optional.of(dataset);
     }
 
+    protected boolean isDatasetWithoutTypeSpec(DatasetDecl datasetDecl, ARecordType aRecordType,
+            ARecordType metaRecType) {
+        return aRecordType.getFieldNames().length == 0 && metaRecType == null;
+    }
+
     protected IDataset createDataset(DatasetDecl dd, String database, DataverseName dataverseName, String datasetName,
             String itemTypeDatabase, DataverseName itemTypeDataverseName, String itemTypeName,
             String metaItemTypeDatabase, DataverseName metaItemTypeDataverseName, String metaItemTypeName,
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java
index 751541d..e04be9a 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java
@@ -24,7 +24,7 @@
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 
 public interface IRecordWithMetadataParser<T> extends IRecordDataParser<T> {
-    public void parseMeta(DataOutput out) throws HyracksDataException;
+    void parseMeta(DataOutput out, IRawRecord<? extends T> record) throws HyracksDataException;
 
     void appendLastParsedPrimaryKeyToTuple(ArrayTupleBuilder tb) throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java
index 74bfe26..b78c270 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java
@@ -39,7 +39,7 @@
 
     @Override
     protected void addMetaPart(ArrayTupleBuilder tb, IRawRecord<? extends T> record) throws HyracksDataException {
-        dataParser.parseMeta(tb.getDataOutput());
+        dataParser.parseMeta(tb.getDataOutput(), record);
         tb.addFieldEndOffset();
     }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java
index d799f22..073c5e2 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java
@@ -88,7 +88,7 @@
     }
 
     @Override
-    public void parseMeta(DataOutput out) throws HyracksDataException {
+    public void parseMeta(DataOutput out, IRawRecord<? extends T> record) throws HyracksDataException {
         try {
             if (rwm.getRecord().size() == 0) {
                 out.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG);
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
index 994325e..4bf9174 100644
--- a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
@@ -128,7 +128,7 @@
                 tb.reset();
                 if (parser.parse(record, tb.getDataOutput())) {
                     tb.addFieldEndOffset();
-                    parser.parseMeta(tb.getDataOutput());
+                    parser.parseMeta(tb.getDataOutput(), record);
                     tb.addFieldEndOffset();
                     parser.appendLastParsedPrimaryKeyToTuple(tb);
                     //print tuple
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java
index 8a83517..f42ded2 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java
@@ -66,8 +66,8 @@
     }
 
     /**
-     * Checks if a dataset is created without type specification and has no meta part. For such datasets,
-     * creates and returns a record type based on the primary key and primary key types information included in the
+     * Checks if a dataset is created without type specification and has no meta part or if the datasetWithoutTypeSpecification is true.
+     * For such datasets, creates and returns a record type based on the primary key and primary key types information included in the
      * internal details.
      *
      * @param itemType     record type of the dataset
@@ -78,11 +78,11 @@
      */
     public static IAType findTypeForDatasetWithoutType(IAType itemType, IAType metaItemType, Dataset dataset)
             throws AlgebricksException {
-        ARecordType recordType = (ARecordType) itemType;
-        if (recordType.getFieldNames().length == 0 && metaItemType == null
-                && dataset.getDatasetType() == DatasetConfig.DatasetType.INTERNAL) {
+        if (dataset.getDatasetType() == DatasetConfig.DatasetType.INTERNAL) {
             InternalDatasetDetails dsDetails = (InternalDatasetDetails) dataset.getDatasetDetails();
-            return findType(dsDetails.getPrimaryKey(), dsDetails.getPrimaryKeyType());
+            if (dsDetails.isDatasetWithoutTypeSpecification()) {
+                return findType(dsDetails.getPrimaryKey(), dsDetails.getPrimaryKeyType());
+            }
         }
         return itemType;
     }
