@Override
 com.google.api.services.bigquery.model.JobConfiguration toPb() {
   com.google.api.services.bigquery.model.JobConfiguration configurationPb =
       new com.google.api.services.bigquery.model.JobConfiguration();
   JobConfigurationQuery queryConfigurationPb = new JobConfigurationQuery();
   queryConfigurationPb.setQuery(query);
   configurationPb.setDryRun(dryRun());
   if (allowLargeResults != null) {
     queryConfigurationPb.setAllowLargeResults(allowLargeResults);
   }
   if (createDisposition != null) {
     queryConfigurationPb.setCreateDisposition(createDisposition.toString());
   }
   if (destinationTable != null) {
     queryConfigurationPb.setDestinationTable(destinationTable.toPb());
   }
   if (defaultDataset != null) {
     queryConfigurationPb.setDefaultDataset(defaultDataset.toPb());
   }
   if (flattenResults != null) {
     queryConfigurationPb.setFlattenResults(flattenResults);
   }
   if (priority != null) {
     queryConfigurationPb.setPriority(priority.toString());
   }
   if (tableDefinitions != null) {
     queryConfigurationPb.setTableDefinitions(
         Maps.transformValues(
             tableDefinitions, ExternalTableDefinition.TO_EXTERNAL_DATA_FUNCTION));
   }
   if (useQueryCache != null) {
     queryConfigurationPb.setUseQueryCache(useQueryCache);
   }
   if (userDefinedFunctions != null) {
     queryConfigurationPb.setUserDefinedFunctionResources(
         Lists.transform(userDefinedFunctions, UserDefinedFunction.TO_PB_FUNCTION));
   }
   if (writeDisposition != null) {
     queryConfigurationPb.setWriteDisposition(writeDisposition.toString());
   }
   return configurationPb.setQuery(queryConfigurationPb);
 }
 private Builder(com.google.api.services.bigquery.model.JobConfiguration configurationPb) {
   this();
   JobConfigurationQuery queryConfigurationPb = configurationPb.getQuery();
   this.query = queryConfigurationPb.getQuery();
   allowLargeResults = queryConfigurationPb.getAllowLargeResults();
   useQueryCache = queryConfigurationPb.getUseQueryCache();
   flattenResults = queryConfigurationPb.getFlattenResults();
   dryRun = configurationPb.getDryRun();
   if (queryConfigurationPb.getDestinationTable() != null) {
     destinationTable = TableId.fromPb(queryConfigurationPb.getDestinationTable());
   }
   if (queryConfigurationPb.getDefaultDataset() != null) {
     defaultDataset = DatasetId.fromPb(queryConfigurationPb.getDefaultDataset());
   }
   if (queryConfigurationPb.getPriority() != null) {
     priority = Priority.valueOf(queryConfigurationPb.getPriority());
   }
   if (queryConfigurationPb.getTableDefinitions() != null) {
     tableDefinitions =
         Maps.transformValues(
             queryConfigurationPb.getTableDefinitions(),
             ExternalTableDefinition.FROM_EXTERNAL_DATA_FUNCTION);
   }
   if (queryConfigurationPb.getUserDefinedFunctionResources() != null) {
     userDefinedFunctions =
         Lists.transform(
             queryConfigurationPb.getUserDefinedFunctionResources(),
             UserDefinedFunction.FROM_PB_FUNCTION);
   }
   if (queryConfigurationPb.getCreateDisposition() != null) {
     createDisposition = CreateDisposition.valueOf(queryConfigurationPb.getCreateDisposition());
   }
   if (queryConfigurationPb.getWriteDisposition() != null) {
     writeDisposition = WriteDisposition.valueOf(queryConfigurationPb.getWriteDisposition());
   }
 }