title: Any feature in BigQuery that can migrate a whole dataset in another project w/o executing copy data?
body: <p>While our project grows, at some point we realized that we need to create new projects and reorganize our dataset. One case is that we need to isolate one dataset from others into another new project. I know that I can do it by copying tables one by one through API and then delete the old ones. But when it comes to over a thousand of tables, it's really consumes a lot of time as the copying api is executed as a job and it takes time. Is it possible to just change reference(or path) of a dataset?</p>
  
  <p><strong>Follow up</strong>
  I tried copy tables using batch request. I got 200 OK in all request, but the tables just didn't get copied. I wonder why and how to get the real result. Here's my code:</p>
  
  <pre><code>    public async Task CopyTableToProjectInBatchAsync(IList&lt;TableList.TablesData&gt; fromTables, string toProjectId)
      {
          var request = new BatchRequest(BigQueryService);
          foreach (var tableData in fromTables)
          {
              string fromDataset = tableData.TableReference.DatasetId;
              string fromTableId = tableData.TableReference.TableId;
              Logger.Info("copying table {0}...",tableData.Id);
              request.Queue&lt;JobReference&gt;(CreateTableCopyRequest(fromDataset, fromTableId, toProjectId),
              (content, error, i, message) =&gt;
              {
                  Logger.Info("#content:\n" + content);
                  Logger.Info("#error:\n" + error);
                  Logger.Info("#i:\n" + i);
                  Logger.Info("#message:\n" + message);
              });
          }
          await request.ExecuteAsync();
      }
  
     private IClientServiceRequest CreateTableCopyRequest(string fromDatasetId, string fromTableId, string toProjectId,
          string toDatasetId=null, string toTableId=null)
      {
          if (toDatasetId == null)
              toDatasetId = fromDatasetId;
          if (toTableId == null)
              toTableId = fromTableId;
          TableReference sourceTableReference = new TableReference
          {
              ProjectId = _account.ProjectId,
              DatasetId = fromDatasetId,
              TableId = fromTableId
          };
          TableReference targetTableReference = new TableReference
          {
              ProjectId = toProjectId,
              DatasetId = toDatasetId,
              TableId = toTableId
          };
          JobConfigurationTableCopy copyConfig = new JobConfigurationTableCopy
          {
              CreateDisposition = "WRITE_TRUNCATE",
              DestinationTable = targetTableReference,
              SourceTable = sourceTableReference
          };
          JobReference jobRef = new JobReference {JobId = GenerateJobID("copyTable"), ProjectId = _account.ProjectId};
          JobConfiguration jobConfig = new JobConfiguration {Copy = copyConfig};
          Job job = new Job {Configuration = jobConfig, JobReference = jobRef};
  
          return BigQueryService.Jobs.Insert(job, _account.ProjectId);
      }
  </code></pre>