diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/TPCDSDataGeneratorDatasource.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/TPCDSDataGeneratorDatasource.java
index d0ff67e..cb7e357 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/TPCDSDataGeneratorDatasource.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/TPCDSDataGeneratorDatasource.java
@@ -36,7 +36,7 @@
 
     public TPCDSDataGeneratorDatasource(INodeDomain domain, String tableName, double scalingFactor)
             throws AlgebricksException {
-        super(createDataSourceId(tableName), domain);
+        super(createDataSourceId(tableName, scalingFactor), domain);
         this.tableName = tableName;
         this.scalingFactor = scalingFactor;
     }
@@ -46,13 +46,15 @@
      * DataSourceId. This eliminates the issue of creating a single function even though multiple functions calls
      * are happening with different parameters and the optimizer understands them as a single function.
      *
-     * @param tableName table name to be added as part of the DataSourceId
-     *
+     * @param tableName
+     *            table name to be added as part of the DataSourceId
+     * @param scalingFactor
+     *            scaling factor to be added as part of the DataSourceId
      * @return A DataSourceId that's based on the function details and its parameters
      */
-    private static DataSourceId createDataSourceId(String tableName) {
+    private static DataSourceId createDataSourceId(String tableName, double scalingFactor) {
         return new DataSourceId(TPCDSDataGeneratorRewriter.TPCDS_DATA_GENERATOR.getNamespace(),
-                TPCDSDataGeneratorRewriter.TPCDS_DATA_GENERATOR.getName() + "." + tableName);
+                TPCDSDataGeneratorRewriter.TPCDS_DATA_GENERATOR.getName(), tableName, Double.toString(scalingFactor));
     }
 
     @Override
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DataSourceId.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DataSourceId.java
index c96fcd1..d61ae15 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DataSourceId.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DataSourceId.java
@@ -19,43 +19,63 @@
 
 package org.apache.asterix.metadata.declared;
 
-import java.util.Objects;
+import java.util.Arrays;
 
 public final class DataSourceId {
 
-    private String dataverseName;
-    private String datasourceName;
+    private String[] components;
 
+    /**
+     * The original constructor taking
+     *
+     * @param dataverseName
+     *            the dataverse (namespace) for this datasource
+     * @param datasourceName
+     *            the name for this datasource
+     */
     public DataSourceId(String dataverseName, String datasourceName) {
-        this.dataverseName = dataverseName;
-        this.datasourceName = datasourceName;
+        this(new String[] { dataverseName, datasourceName });
+    }
+
+    /**
+     * An extended constructor taking an arbitrary number of name components.
+     * This constructor allows the definition of datasources that have the same dataverse name and datasource name but
+     * that would expose different behavior. It enables the definition of (compile-time) parameterized datasources.
+     * Please note that the first 2 parameters still need to be 1) a dataverse name and 2) a datasource name.
+     *
+     * @param components
+     *            name components used to construct the datasource identifier.
+     */
+    public DataSourceId(String... components) {
+        this.components = components;
     }
 
     @Override
     public String toString() {
-        return dataverseName + "." + datasourceName;
+        return String.join(".", components);
     }
 
     public String getDataverseName() {
-        return dataverseName;
+        return components[0];
     }
 
     public String getDatasourceName() {
-        return datasourceName;
+        return components[1];
     }
 
     @Override
     public boolean equals(Object o) {
-        if (this == o)
+        if (this == o) {
             return true;
-        if (o == null || getClass() != o.getClass())
+        }
+        if (o == null || getClass() != o.getClass()) {
             return false;
-        DataSourceId that = (DataSourceId) o;
-        return Objects.equals(dataverseName, that.dataverseName) && Objects.equals(datasourceName, that.datasourceName);
+        }
+        return Arrays.equals(components, ((DataSourceId) o).components);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(dataverseName, datasourceName);
+        return Arrays.hashCode(components);
     }
 }
