diff --git a/gen/Network/Google/BigQuery.hs b/gen/Network/Google/BigQuery.hs
--- a/gen/Network/Google/BigQuery.hs
+++ b/gen/Network/Google/BigQuery.hs
@@ -71,6 +71,9 @@
     -- ** bigquery.jobs.query
     , module Network.Google.Resource.BigQuery.Jobs.Query
 
+    -- ** bigquery.projects.getServiceAccount
+    , module Network.Google.Resource.BigQuery.Projects.GetServiceAccount
+
     -- ** bigquery.projects.list
     , module Network.Google.Resource.BigQuery.Projects.List
 
@@ -104,6 +107,7 @@
     , JobReference
     , jobReference
     , jrJobId
+    , jrLocation
     , jrProjectId
 
     -- ** TableList
@@ -118,6 +122,7 @@
     -- ** DataSetListDataSetsItem
     , DataSetListDataSetsItem
     , dataSetListDataSetsItem
+    , dsldsiLocation
     , dsldsiFriendlyName
     , dsldsiKind
     , dsldsiDataSetReference
@@ -141,16 +146,22 @@
     , jctcSourceTables
     , jctcCreateDisPosition
     , jctcSourceTable
+    , jctcDestinationEncryptionConfiguration
 
     -- ** TableListTablesItem
     , TableListTablesItem
     , tableListTablesItem
+    , tltiCreationTime
+    , tltiClustering
     , tltiTableReference
     , tltiFriendlyName
     , tltiKind
+    , tltiTimePartitioning
+    , tltiView
     , tltiId
     , tltiLabels
     , tltiType
+    , tltiExpirationTime
 
     -- ** TableSchema
     , TableSchema
@@ -172,6 +183,15 @@
     , eqsSubsteps
     , eqsKind
 
+    -- ** QueryTimelineSample
+    , QueryTimelineSample
+    , queryTimelineSample
+    , qtsPendingUnits
+    , qtsTotalSlotMs
+    , qtsActiveUnits
+    , qtsElapsedMs
+    , qtsCompletedUnits
+
     -- ** QueryParameterTypeStructTypesItem
     , QueryParameterTypeStructTypesItem
     , queryParameterTypeStructTypesItem
@@ -193,11 +213,15 @@
     , jobStatistics
     , jsCreationTime
     , jsStartTime
+    , jsCompletionRatio
+    , jsTotalSlotMs
     , jsLoad
     , jsTotalBytesProcessed
+    , jsQuotaDeferments
     , jsEndTime
     , jsQuery
     , jsExtract
+    , jsReservationUsage
 
     -- ** JobConfigurationLabels
     , JobConfigurationLabels
@@ -208,6 +232,7 @@
     , DataSet
     , dataSet
     , dsCreationTime
+    , dsDefaultPartitionExpirationMs
     , dsAccess
     , dsEtag
     , dsLocation
@@ -221,6 +246,19 @@
     , dsDefaultTableExpirationMs
     , dsDescription
 
+    -- ** RangePartitioningRange
+    , RangePartitioningRange
+    , rangePartitioningRange
+    , rprStart
+    , rprInterval
+    , rprEnd
+
+    -- ** JobStatisticsReservationUsageItem
+    , JobStatisticsReservationUsageItem
+    , jobStatisticsReservationUsageItem
+    , jsruiName
+    , jsruiSlotMs
+
     -- ** BigtableOptions
     , BigtableOptions
     , bigtableOptions
@@ -228,6 +266,11 @@
     , boIgnoreUnspecifiedColumnFamilies
     , boColumnFamilies
 
+    -- ** Clustering
+    , Clustering
+    , clustering
+    , cFields
+
     -- ** ExternalDataConfiguration
     , ExternalDataConfiguration
     , externalDataConfiguration
@@ -249,6 +292,19 @@
     , trProjectId
     , trTableId
 
+    -- ** ModelDefinitionModelOptions
+    , ModelDefinitionModelOptions
+    , modelDefinitionModelOptions
+    , mdmoModelType
+    , mdmoLabels
+    , mdmoLossType
+
+    -- ** RangePartitioning
+    , RangePartitioning
+    , rangePartitioning
+    , rpField
+    , rpRange
+
     -- ** TableFieldSchema
     , TableFieldSchema
     , tableFieldSchema
@@ -285,6 +341,7 @@
     -- ** QueryRequest
     , QueryRequest
     , queryRequest
+    , qrLocation
     , qrUseQueryCache
     , qrPreserveNulls
     , qrKind
@@ -307,6 +364,15 @@
     , qpParameterType
     , qpName
 
+    -- ** IterationResult
+    , IterationResult
+    , iterationResult
+    , irDurationMs
+    , irLearnRate
+    , irEvalLoss
+    , irTrainingLoss
+    , irIndex
+
     -- ** JobStatistics4
     , JobStatistics4
     , jobStatistics4
@@ -320,21 +386,55 @@
     -- ** ExplainQueryStage
     , ExplainQueryStage
     , explainQueryStage
+    , eqsReadMsAvg
     , eqsStatus
+    , eqsShuffleOutputBytesSpilled
+    , eqsReadMsMax
+    , eqsCompletedParallelInputs
     , eqsWaitRatioMax
+    , eqsParallelInputs
+    , eqsShuffleOutputBytes
     , eqsRecordsWritten
     , eqsSteps
+    , eqsInputStages
     , eqsWriteRatioAvg
     , eqsRecordsRead
     , eqsComputeRatioAvg
     , eqsName
+    , eqsComputeMsMax
     , eqsReadRatioMax
+    , eqsWriteMsMax
     , eqsWaitRatioAvg
+    , eqsWaitMsAvg
     , eqsId
     , eqsComputeRatioMax
     , eqsWriteRatioMax
+    , eqsComputeMsAvg
     , eqsReadRatioAvg
+    , eqsWriteMsAvg
+    , eqsStartMs
+    , eqsEndMs
+    , eqsWaitMsMax
 
+    -- ** TrainingRunTrainingOptions
+    , TrainingRunTrainingOptions
+    , trainingRunTrainingOptions
+    , trtoLineSearchInitLearnRate
+    , trtoMinRelProgress
+    , trtoL1Reg
+    , trtoLearnRate
+    , trtoLearnRateStrategy
+    , trtoMaxIteration
+    , trtoEarlyStop
+    , trtoL2Reg
+    , trtoWarmStart
+
+    -- ** BigQueryModelTraining
+    , BigQueryModelTraining
+    , bigQueryModelTraining
+    , bqmtExpectedTotalIterations
+    , bqmtCurrentIteration
+
     -- ** JobConfigurationLoad
     , JobConfigurationLoad
     , jobConfigurationLoad
@@ -343,6 +443,8 @@
     , jclDestinationTable
     , jclWriteDisPosition
     , jclAllowJaggedRows
+    , jclClustering
+    , jclRangePartitioning
     , jclSchemaInline
     , jclIgnoreUnknownValues
     , jclSchemaUpdateOptions
@@ -350,12 +452,16 @@
     , jclSchemaInlineFormat
     , jclAllowQuotedNewlines
     , jclSourceFormat
+    , jclUseAvroLogicalTypes
     , jclSchema
+    , jclTimePartitioning
     , jclQuote
     , jclMaxBadRecords
     , jclAutodetect
     , jclSourceURIs
     , jclEncoding
+    , jclDestinationTableProperties
+    , jclDestinationEncryptionConfiguration
     , jclFieldDelimiter
     , jclNullMarker
 
@@ -368,6 +474,12 @@
     , dsrDataSetId
     , dsrProjectId
 
+    -- ** MaterializedViewDefinition
+    , MaterializedViewDefinition
+    , materializedViewDefinition
+    , mvdQuery
+    , mvdLastRefreshTime
+
     -- ** TableDataInsertAllRequest
     , TableDataInsertAllRequest
     , tableDataInsertAllRequest
@@ -377,6 +489,12 @@
     , tdiarTemplateSuffix
     , tdiarSkipInvalidRows
 
+    -- ** GetServiceAccountResponse
+    , GetServiceAccountResponse
+    , getServiceAccountResponse
+    , gsarEmail
+    , gsarKind
+
     -- ** ProjectListProjectsItem
     , ProjectListProjectsItem
     , projectListProjectsItem
@@ -424,7 +542,9 @@
     -- ** TimePartitioning
     , TimePartitioning
     , timePartitioning
+    , tpField
     , tpExpirationMs
+    , tpRequirePartitionFilter
     , tpType
 
     -- ** QueryParameterValueStructValues
@@ -440,9 +560,11 @@
     -- ** JobConfiguration
     , JobConfiguration
     , jobConfiguration
+    , jcJobType
     , jcCopy
     , jcLoad
     , jcQuery
+    , jcJobTimeoutMs
     , jcExtract
     , jcLabels
     , jcDryRun
@@ -460,6 +582,11 @@
     , jStatistics
     , jConfiguration
 
+    -- ** EncryptionConfiguration
+    , EncryptionConfiguration
+    , encryptionConfiguration
+    , ecKmsKeyName
+
     -- ** TableDataInsertAllResponseInsertErrorsItem
     , TableDataInsertAllResponseInsertErrorsItem
     , tableDataInsertAllResponseInsertErrorsItem
@@ -477,6 +604,12 @@
     , jceDestinationURI
     , jceFieldDelimiter
 
+    -- ** ModelDefinition
+    , ModelDefinition
+    , modelDefinition
+    , mdModelOptions
+    , mdTrainingRuns
+
     -- ** JobCancelResponse
     , JobCancelResponse
     , jobCancelResponse
@@ -494,6 +627,8 @@
     , jcqDestinationTable
     , jcqWriteDisPosition
     , jcqPriority
+    , jcqClustering
+    , jcqRangePartitioning
     , jcqUseQueryCache
     , jcqPreserveNulls
     , jcqTableDefinitions
@@ -504,16 +639,19 @@
     , jcqUserDefinedFunctionResources
     , jcqAllowLargeResults
     , jcqMaximumBillingTier
+    , jcqTimePartitioning
     , jcqQuery
     , jcqFlattenResults
     , jcqParameterMode
     , jcqUseLegacySQL
+    , jcqDestinationEncryptionConfiguration
     , jcqDefaultDataSet
 
     -- ** GoogleSheetsOptions
     , GoogleSheetsOptions
     , googleSheetsOptions
     , gsoSkipLeadingRows
+    , gsoRange
 
     -- ** TableDataInsertAllRequestRowsItem
     , TableDataInsertAllRequestRowsItem
@@ -539,6 +677,12 @@
     , tableCell
     , tcV
 
+    -- ** JobStatistics2ReservationUsageItem
+    , JobStatistics2ReservationUsageItem
+    , jobStatistics2ReservationUsageItem
+    , jName
+    , jSlotMs
+
     -- ** QueryParameterValue
     , QueryParameterValue
     , queryParameterValue
@@ -562,16 +706,27 @@
     -- ** JobStatistics2
     , JobStatistics2
     , jobStatistics2
+    , jModelTrainingExpectedTotalIteration
+    , jModelTraining
+    , jTotalSlotMs
+    , jDdlTargetTable
+    , jEstimatedBytesProcessed
+    , jModelTrainingCurrentIteration
     , jSchema
     , jTotalBytesProcessed
     , jBillingTier
+    , jTotalBytesProcessedAccuracy
     , jUndeclaredQueryParameters
     , jReferencedTables
     , jStatementType
+    , jReservationUsage
     , jNumDmlAffectedRows
+    , jTimeline
     , jQueryPlan
     , jCacheHit
     , jTotalBytesBilled
+    , jDdlOperationPerformed
+    , jTotalPartitionsProcessed
 
     -- ** JobStatus
     , JobStatus
@@ -585,6 +740,12 @@
     , tableLabels
     , tlAddtional
 
+    -- ** DestinationTableProperties
+    , DestinationTableProperties
+    , destinationTableProperties
+    , dtpFriendlyName
+    , dtpDescription
+
     -- ** DataSetAccessItem
     , DataSetAccessItem
     , dataSetAccessItem
@@ -592,6 +753,7 @@
     , dsaiDomain
     , dsaiSpecialGroup
     , dsaiRole
+    , dsaiIAMMember
     , dsaiView
     , dsaiUserByEmail
 
@@ -611,10 +773,13 @@
     -- ** Table
     , Table
     , table
+    , tabMaterializedView
     , tabCreationTime
     , tabEtag
     , tabNumBytes
+    , tabClustering
     , tabExternalDataConfiguration
+    , tabRangePartitioning
     , tabLocation
     , tabTableReference
     , tabFriendlyName
@@ -623,8 +788,12 @@
     , tabSchema
     , tabStreamingBuffer
     , tabSelfLink
+    , tabRequirePartitionFilter
+    , tabEncryptionConfiguration
+    , tabModel
     , tabTimePartitioning
     , tabNumRows
+    , tabNumPhysicalBytes
     , tabView
     , tabId
     , tabLabels
@@ -658,6 +827,7 @@
     , jsOutputRows
     , jsOutputBytes
     , jsInputFileBytes
+    , jsBadRecords
 
     -- ** QueryResponse
     , QueryResponse
@@ -679,6 +849,19 @@
     , dataSetListDataSetsItemLabels
     , dsldsilAddtional
 
+    -- ** TrainingRun
+    , TrainingRun
+    , trainingRun
+    , trState
+    , trStartTime
+    , trIterationResults
+    , trTrainingOptions
+
+    -- ** TableListTablesItemView
+    , TableListTablesItemView
+    , tableListTablesItemView
+    , tltivUseLegacySQL
+
     -- ** TableListTablesItemLabels
     , TableListTablesItemLabels
     , tableListTablesItemLabels
@@ -699,6 +882,7 @@
 import           Network.Google.Resource.BigQuery.Jobs.Insert
 import           Network.Google.Resource.BigQuery.Jobs.List
 import           Network.Google.Resource.BigQuery.Jobs.Query
+import           Network.Google.Resource.BigQuery.Projects.GetServiceAccount
 import           Network.Google.Resource.BigQuery.Projects.List
 import           Network.Google.Resource.BigQuery.TableData.InsertAll
 import           Network.Google.Resource.BigQuery.TableData.List
@@ -728,6 +912,7 @@
        :<|> TablesUpdateResource
        :<|> TableDataListResource
        :<|> TableDataInsertAllResource
+       :<|> ProjectsGetServiceAccountResource
        :<|> ProjectsListResource
        :<|> DataSetsInsertResource
        :<|> DataSetsListResource
diff --git a/gen/Network/Google/BigQuery/Types.hs b/gen/Network/Google/BigQuery/Types.hs
--- a/gen/Network/Google/BigQuery/Types.hs
+++ b/gen/Network/Google/BigQuery/Types.hs
@@ -32,6 +32,7 @@
     , JobReference
     , jobReference
     , jrJobId
+    , jrLocation
     , jrProjectId
 
     -- * TableList
@@ -46,6 +47,7 @@
     -- * DataSetListDataSetsItem
     , DataSetListDataSetsItem
     , dataSetListDataSetsItem
+    , dsldsiLocation
     , dsldsiFriendlyName
     , dsldsiKind
     , dsldsiDataSetReference
@@ -69,16 +71,22 @@
     , jctcSourceTables
     , jctcCreateDisPosition
     , jctcSourceTable
+    , jctcDestinationEncryptionConfiguration
 
     -- * TableListTablesItem
     , TableListTablesItem
     , tableListTablesItem
+    , tltiCreationTime
+    , tltiClustering
     , tltiTableReference
     , tltiFriendlyName
     , tltiKind
+    , tltiTimePartitioning
+    , tltiView
     , tltiId
     , tltiLabels
     , tltiType
+    , tltiExpirationTime
 
     -- * TableSchema
     , TableSchema
@@ -100,6 +108,15 @@
     , eqsSubsteps
     , eqsKind
 
+    -- * QueryTimelineSample
+    , QueryTimelineSample
+    , queryTimelineSample
+    , qtsPendingUnits
+    , qtsTotalSlotMs
+    , qtsActiveUnits
+    , qtsElapsedMs
+    , qtsCompletedUnits
+
     -- * QueryParameterTypeStructTypesItem
     , QueryParameterTypeStructTypesItem
     , queryParameterTypeStructTypesItem
@@ -121,11 +138,15 @@
     , jobStatistics
     , jsCreationTime
     , jsStartTime
+    , jsCompletionRatio
+    , jsTotalSlotMs
     , jsLoad
     , jsTotalBytesProcessed
+    , jsQuotaDeferments
     , jsEndTime
     , jsQuery
     , jsExtract
+    , jsReservationUsage
 
     -- * JobConfigurationLabels
     , JobConfigurationLabels
@@ -136,6 +157,7 @@
     , DataSet
     , dataSet
     , dsCreationTime
+    , dsDefaultPartitionExpirationMs
     , dsAccess
     , dsEtag
     , dsLocation
@@ -149,6 +171,19 @@
     , dsDefaultTableExpirationMs
     , dsDescription
 
+    -- * RangePartitioningRange
+    , RangePartitioningRange
+    , rangePartitioningRange
+    , rprStart
+    , rprInterval
+    , rprEnd
+
+    -- * JobStatisticsReservationUsageItem
+    , JobStatisticsReservationUsageItem
+    , jobStatisticsReservationUsageItem
+    , jsruiName
+    , jsruiSlotMs
+
     -- * BigtableOptions
     , BigtableOptions
     , bigtableOptions
@@ -156,6 +191,11 @@
     , boIgnoreUnspecifiedColumnFamilies
     , boColumnFamilies
 
+    -- * Clustering
+    , Clustering
+    , clustering
+    , cFields
+
     -- * ExternalDataConfiguration
     , ExternalDataConfiguration
     , externalDataConfiguration
@@ -177,6 +217,19 @@
     , trProjectId
     , trTableId
 
+    -- * ModelDefinitionModelOptions
+    , ModelDefinitionModelOptions
+    , modelDefinitionModelOptions
+    , mdmoModelType
+    , mdmoLabels
+    , mdmoLossType
+
+    -- * RangePartitioning
+    , RangePartitioning
+    , rangePartitioning
+    , rpField
+    , rpRange
+
     -- * TableFieldSchema
     , TableFieldSchema
     , tableFieldSchema
@@ -213,6 +266,7 @@
     -- * QueryRequest
     , QueryRequest
     , queryRequest
+    , qrLocation
     , qrUseQueryCache
     , qrPreserveNulls
     , qrKind
@@ -235,6 +289,15 @@
     , qpParameterType
     , qpName
 
+    -- * IterationResult
+    , IterationResult
+    , iterationResult
+    , irDurationMs
+    , irLearnRate
+    , irEvalLoss
+    , irTrainingLoss
+    , irIndex
+
     -- * JobStatistics4
     , JobStatistics4
     , jobStatistics4
@@ -248,21 +311,55 @@
     -- * ExplainQueryStage
     , ExplainQueryStage
     , explainQueryStage
+    , eqsReadMsAvg
     , eqsStatus
+    , eqsShuffleOutputBytesSpilled
+    , eqsReadMsMax
+    , eqsCompletedParallelInputs
     , eqsWaitRatioMax
+    , eqsParallelInputs
+    , eqsShuffleOutputBytes
     , eqsRecordsWritten
     , eqsSteps
+    , eqsInputStages
     , eqsWriteRatioAvg
     , eqsRecordsRead
     , eqsComputeRatioAvg
     , eqsName
+    , eqsComputeMsMax
     , eqsReadRatioMax
+    , eqsWriteMsMax
     , eqsWaitRatioAvg
+    , eqsWaitMsAvg
     , eqsId
     , eqsComputeRatioMax
     , eqsWriteRatioMax
+    , eqsComputeMsAvg
     , eqsReadRatioAvg
+    , eqsWriteMsAvg
+    , eqsStartMs
+    , eqsEndMs
+    , eqsWaitMsMax
 
+    -- * TrainingRunTrainingOptions
+    , TrainingRunTrainingOptions
+    , trainingRunTrainingOptions
+    , trtoLineSearchInitLearnRate
+    , trtoMinRelProgress
+    , trtoL1Reg
+    , trtoLearnRate
+    , trtoLearnRateStrategy
+    , trtoMaxIteration
+    , trtoEarlyStop
+    , trtoL2Reg
+    , trtoWarmStart
+
+    -- * BigQueryModelTraining
+    , BigQueryModelTraining
+    , bigQueryModelTraining
+    , bqmtExpectedTotalIterations
+    , bqmtCurrentIteration
+
     -- * JobConfigurationLoad
     , JobConfigurationLoad
     , jobConfigurationLoad
@@ -271,6 +368,8 @@
     , jclDestinationTable
     , jclWriteDisPosition
     , jclAllowJaggedRows
+    , jclClustering
+    , jclRangePartitioning
     , jclSchemaInline
     , jclIgnoreUnknownValues
     , jclSchemaUpdateOptions
@@ -278,12 +377,16 @@
     , jclSchemaInlineFormat
     , jclAllowQuotedNewlines
     , jclSourceFormat
+    , jclUseAvroLogicalTypes
     , jclSchema
+    , jclTimePartitioning
     , jclQuote
     , jclMaxBadRecords
     , jclAutodetect
     , jclSourceURIs
     , jclEncoding
+    , jclDestinationTableProperties
+    , jclDestinationEncryptionConfiguration
     , jclFieldDelimiter
     , jclNullMarker
 
@@ -296,6 +399,12 @@
     , dsrDataSetId
     , dsrProjectId
 
+    -- * MaterializedViewDefinition
+    , MaterializedViewDefinition
+    , materializedViewDefinition
+    , mvdQuery
+    , mvdLastRefreshTime
+
     -- * TableDataInsertAllRequest
     , TableDataInsertAllRequest
     , tableDataInsertAllRequest
@@ -305,6 +414,12 @@
     , tdiarTemplateSuffix
     , tdiarSkipInvalidRows
 
+    -- * GetServiceAccountResponse
+    , GetServiceAccountResponse
+    , getServiceAccountResponse
+    , gsarEmail
+    , gsarKind
+
     -- * ProjectListProjectsItem
     , ProjectListProjectsItem
     , projectListProjectsItem
@@ -352,7 +467,9 @@
     -- * TimePartitioning
     , TimePartitioning
     , timePartitioning
+    , tpField
     , tpExpirationMs
+    , tpRequirePartitionFilter
     , tpType
 
     -- * QueryParameterValueStructValues
@@ -368,9 +485,11 @@
     -- * JobConfiguration
     , JobConfiguration
     , jobConfiguration
+    , jcJobType
     , jcCopy
     , jcLoad
     , jcQuery
+    , jcJobTimeoutMs
     , jcExtract
     , jcLabels
     , jcDryRun
@@ -388,6 +507,11 @@
     , jStatistics
     , jConfiguration
 
+    -- * EncryptionConfiguration
+    , EncryptionConfiguration
+    , encryptionConfiguration
+    , ecKmsKeyName
+
     -- * TableDataInsertAllResponseInsertErrorsItem
     , TableDataInsertAllResponseInsertErrorsItem
     , tableDataInsertAllResponseInsertErrorsItem
@@ -405,6 +529,12 @@
     , jceDestinationURI
     , jceFieldDelimiter
 
+    -- * ModelDefinition
+    , ModelDefinition
+    , modelDefinition
+    , mdModelOptions
+    , mdTrainingRuns
+
     -- * JobCancelResponse
     , JobCancelResponse
     , jobCancelResponse
@@ -422,6 +552,8 @@
     , jcqDestinationTable
     , jcqWriteDisPosition
     , jcqPriority
+    , jcqClustering
+    , jcqRangePartitioning
     , jcqUseQueryCache
     , jcqPreserveNulls
     , jcqTableDefinitions
@@ -432,16 +564,19 @@
     , jcqUserDefinedFunctionResources
     , jcqAllowLargeResults
     , jcqMaximumBillingTier
+    , jcqTimePartitioning
     , jcqQuery
     , jcqFlattenResults
     , jcqParameterMode
     , jcqUseLegacySQL
+    , jcqDestinationEncryptionConfiguration
     , jcqDefaultDataSet
 
     -- * GoogleSheetsOptions
     , GoogleSheetsOptions
     , googleSheetsOptions
     , gsoSkipLeadingRows
+    , gsoRange
 
     -- * TableDataInsertAllRequestRowsItem
     , TableDataInsertAllRequestRowsItem
@@ -467,6 +602,12 @@
     , tableCell
     , tcV
 
+    -- * JobStatistics2ReservationUsageItem
+    , JobStatistics2ReservationUsageItem
+    , jobStatistics2ReservationUsageItem
+    , jName
+    , jSlotMs
+
     -- * QueryParameterValue
     , QueryParameterValue
     , queryParameterValue
@@ -490,16 +631,27 @@
     -- * JobStatistics2
     , JobStatistics2
     , jobStatistics2
+    , jModelTrainingExpectedTotalIteration
+    , jModelTraining
+    , jTotalSlotMs
+    , jDdlTargetTable
+    , jEstimatedBytesProcessed
+    , jModelTrainingCurrentIteration
     , jSchema
     , jTotalBytesProcessed
     , jBillingTier
+    , jTotalBytesProcessedAccuracy
     , jUndeclaredQueryParameters
     , jReferencedTables
     , jStatementType
+    , jReservationUsage
     , jNumDmlAffectedRows
+    , jTimeline
     , jQueryPlan
     , jCacheHit
     , jTotalBytesBilled
+    , jDdlOperationPerformed
+    , jTotalPartitionsProcessed
 
     -- * JobStatus
     , JobStatus
@@ -513,6 +665,12 @@
     , tableLabels
     , tlAddtional
 
+    -- * DestinationTableProperties
+    , DestinationTableProperties
+    , destinationTableProperties
+    , dtpFriendlyName
+    , dtpDescription
+
     -- * DataSetAccessItem
     , DataSetAccessItem
     , dataSetAccessItem
@@ -520,6 +678,7 @@
     , dsaiDomain
     , dsaiSpecialGroup
     , dsaiRole
+    , dsaiIAMMember
     , dsaiView
     , dsaiUserByEmail
 
@@ -539,10 +698,13 @@
     -- * Table
     , Table
     , table
+    , tabMaterializedView
     , tabCreationTime
     , tabEtag
     , tabNumBytes
+    , tabClustering
     , tabExternalDataConfiguration
+    , tabRangePartitioning
     , tabLocation
     , tabTableReference
     , tabFriendlyName
@@ -551,8 +713,12 @@
     , tabSchema
     , tabStreamingBuffer
     , tabSelfLink
+    , tabRequirePartitionFilter
+    , tabEncryptionConfiguration
+    , tabModel
     , tabTimePartitioning
     , tabNumRows
+    , tabNumPhysicalBytes
     , tabView
     , tabId
     , tabLabels
@@ -586,6 +752,7 @@
     , jsOutputRows
     , jsOutputBytes
     , jsInputFileBytes
+    , jsBadRecords
 
     -- * QueryResponse
     , QueryResponse
@@ -606,6 +773,19 @@
     , DataSetListDataSetsItemLabels
     , dataSetListDataSetsItemLabels
     , dsldsilAddtional
+
+    -- * TrainingRun
+    , TrainingRun
+    , trainingRun
+    , trState
+    , trStartTime
+    , trIterationResults
+    , trTrainingOptions
+
+    -- * TableListTablesItemView
+    , TableListTablesItemView
+    , tableListTablesItemView
+    , tltivUseLegacySQL
 
     -- * TableListTablesItemLabels
     , TableListTablesItemLabels
diff --git a/gen/Network/Google/BigQuery/Types/Product.hs b/gen/Network/Google/BigQuery/Types/Product.hs
--- a/gen/Network/Google/BigQuery/Types/Product.hs
+++ b/gen/Network/Google/BigQuery/Types/Product.hs
@@ -24,5767 +24,7710 @@
 -- /See:/ 'jobReference' smart constructor.
 data JobReference = JobReference'
     { _jrJobId     :: !(Maybe Text)
-    , _jrProjectId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jrJobId'
---
--- * 'jrProjectId'
-jobReference
-    :: JobReference
-jobReference =
-    JobReference'
-    { _jrJobId = Nothing
-    , _jrProjectId = Nothing
-    }
-
--- | [Required] The ID of the job. The ID must contain only letters (a-z,
--- A-Z), numbers (0-9), underscores (_), or dashes (-). The maximum length
--- is 1,024 characters.
-jrJobId :: Lens' JobReference (Maybe Text)
-jrJobId = lens _jrJobId (\ s a -> s{_jrJobId = a})
-
--- | [Required] The ID of the project containing this job.
-jrProjectId :: Lens' JobReference (Maybe Text)
-jrProjectId
-  = lens _jrProjectId (\ s a -> s{_jrProjectId = a})
-
-instance FromJSON JobReference where
-        parseJSON
-          = withObject "JobReference"
-              (\ o ->
-                 JobReference' <$>
-                   (o .:? "jobId") <*> (o .:? "projectId"))
-
-instance ToJSON JobReference where
-        toJSON JobReference'{..}
-          = object
-              (catMaybes
-                 [("jobId" .=) <$> _jrJobId,
-                  ("projectId" .=) <$> _jrProjectId])
-
---
--- /See:/ 'tableList' smart constructor.
-data TableList = TableList'
-    { _tlTotalItems    :: !(Maybe (Textual Int32))
-    , _tlEtag          :: !(Maybe Text)
-    , _tlNextPageToken :: !(Maybe Text)
-    , _tlKind          :: !Text
-    , _tlTables        :: !(Maybe [TableListTablesItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tlTotalItems'
---
--- * 'tlEtag'
---
--- * 'tlNextPageToken'
---
--- * 'tlKind'
---
--- * 'tlTables'
-tableList
-    :: TableList
-tableList =
-    TableList'
-    { _tlTotalItems = Nothing
-    , _tlEtag = Nothing
-    , _tlNextPageToken = Nothing
-    , _tlKind = "bigquery#tableList"
-    , _tlTables = Nothing
-    }
-
--- | The total number of tables in the dataset.
-tlTotalItems :: Lens' TableList (Maybe Int32)
-tlTotalItems
-  = lens _tlTotalItems (\ s a -> s{_tlTotalItems = a})
-      . mapping _Coerce
-
--- | A hash of this page of results.
-tlEtag :: Lens' TableList (Maybe Text)
-tlEtag = lens _tlEtag (\ s a -> s{_tlEtag = a})
-
--- | A token to request the next page of results.
-tlNextPageToken :: Lens' TableList (Maybe Text)
-tlNextPageToken
-  = lens _tlNextPageToken
-      (\ s a -> s{_tlNextPageToken = a})
-
--- | The type of list.
-tlKind :: Lens' TableList Text
-tlKind = lens _tlKind (\ s a -> s{_tlKind = a})
-
--- | Tables in the requested dataset.
-tlTables :: Lens' TableList [TableListTablesItem]
-tlTables
-  = lens _tlTables (\ s a -> s{_tlTables = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON TableList where
-        parseJSON
-          = withObject "TableList"
-              (\ o ->
-                 TableList' <$>
-                   (o .:? "totalItems") <*> (o .:? "etag") <*>
-                     (o .:? "nextPageToken")
-                     <*> (o .:? "kind" .!= "bigquery#tableList")
-                     <*> (o .:? "tables" .!= mempty))
-
-instance ToJSON TableList where
-        toJSON TableList'{..}
-          = object
-              (catMaybes
-                 [("totalItems" .=) <$> _tlTotalItems,
-                  ("etag" .=) <$> _tlEtag,
-                  ("nextPageToken" .=) <$> _tlNextPageToken,
-                  Just ("kind" .= _tlKind),
-                  ("tables" .=) <$> _tlTables])
-
---
--- /See:/ 'dataSetListDataSetsItem' smart constructor.
-data DataSetListDataSetsItem = DataSetListDataSetsItem'
-    { _dsldsiFriendlyName     :: !(Maybe Text)
-    , _dsldsiKind             :: !Text
-    , _dsldsiDataSetReference :: !(Maybe DataSetReference)
-    , _dsldsiId               :: !(Maybe Text)
-    , _dsldsiLabels           :: !(Maybe DataSetListDataSetsItemLabels)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetListDataSetsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsldsiFriendlyName'
---
--- * 'dsldsiKind'
---
--- * 'dsldsiDataSetReference'
---
--- * 'dsldsiId'
---
--- * 'dsldsiLabels'
-dataSetListDataSetsItem
-    :: DataSetListDataSetsItem
-dataSetListDataSetsItem =
-    DataSetListDataSetsItem'
-    { _dsldsiFriendlyName = Nothing
-    , _dsldsiKind = "bigquery#dataset"
-    , _dsldsiDataSetReference = Nothing
-    , _dsldsiId = Nothing
-    , _dsldsiLabels = Nothing
-    }
-
--- | A descriptive name for the dataset, if one exists.
-dsldsiFriendlyName :: Lens' DataSetListDataSetsItem (Maybe Text)
-dsldsiFriendlyName
-  = lens _dsldsiFriendlyName
-      (\ s a -> s{_dsldsiFriendlyName = a})
-
--- | The resource type. This property always returns the value
--- \"bigquery#dataset\".
-dsldsiKind :: Lens' DataSetListDataSetsItem Text
-dsldsiKind
-  = lens _dsldsiKind (\ s a -> s{_dsldsiKind = a})
-
--- | The dataset reference. Use this property to access specific parts of the
--- dataset\'s ID, such as project ID or dataset ID.
-dsldsiDataSetReference :: Lens' DataSetListDataSetsItem (Maybe DataSetReference)
-dsldsiDataSetReference
-  = lens _dsldsiDataSetReference
-      (\ s a -> s{_dsldsiDataSetReference = a})
-
--- | The fully-qualified, unique, opaque ID of the dataset.
-dsldsiId :: Lens' DataSetListDataSetsItem (Maybe Text)
-dsldsiId = lens _dsldsiId (\ s a -> s{_dsldsiId = a})
-
--- | [Experimental] The labels associated with this dataset. You can use
--- these to organize and group your datasets.
-dsldsiLabels :: Lens' DataSetListDataSetsItem (Maybe DataSetListDataSetsItemLabels)
-dsldsiLabels
-  = lens _dsldsiLabels (\ s a -> s{_dsldsiLabels = a})
-
-instance FromJSON DataSetListDataSetsItem where
-        parseJSON
-          = withObject "DataSetListDataSetsItem"
-              (\ o ->
-                 DataSetListDataSetsItem' <$>
-                   (o .:? "friendlyName") <*>
-                     (o .:? "kind" .!= "bigquery#dataset")
-                     <*> (o .:? "datasetReference")
-                     <*> (o .:? "id")
-                     <*> (o .:? "labels"))
-
-instance ToJSON DataSetListDataSetsItem where
-        toJSON DataSetListDataSetsItem'{..}
-          = object
-              (catMaybes
-                 [("friendlyName" .=) <$> _dsldsiFriendlyName,
-                  Just ("kind" .= _dsldsiKind),
-                  ("datasetReference" .=) <$> _dsldsiDataSetReference,
-                  ("id" .=) <$> _dsldsiId,
-                  ("labels" .=) <$> _dsldsiLabels])
-
---
--- /See:/ 'tableDataList' smart constructor.
-data TableDataList = TableDataList'
-    { _tdlEtag      :: !(Maybe Text)
-    , _tdlKind      :: !Text
-    , _tdlRows      :: !(Maybe [TableRow])
-    , _tdlPageToken :: !(Maybe Text)
-    , _tdlTotalRows :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableDataList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdlEtag'
---
--- * 'tdlKind'
---
--- * 'tdlRows'
---
--- * 'tdlPageToken'
---
--- * 'tdlTotalRows'
-tableDataList
-    :: TableDataList
-tableDataList =
-    TableDataList'
-    { _tdlEtag = Nothing
-    , _tdlKind = "bigquery#tableDataList"
-    , _tdlRows = Nothing
-    , _tdlPageToken = Nothing
-    , _tdlTotalRows = Nothing
-    }
-
--- | A hash of this page of results.
-tdlEtag :: Lens' TableDataList (Maybe Text)
-tdlEtag = lens _tdlEtag (\ s a -> s{_tdlEtag = a})
-
--- | The resource type of the response.
-tdlKind :: Lens' TableDataList Text
-tdlKind = lens _tdlKind (\ s a -> s{_tdlKind = a})
-
--- | Rows of results.
-tdlRows :: Lens' TableDataList [TableRow]
-tdlRows
-  = lens _tdlRows (\ s a -> s{_tdlRows = a}) . _Default
-      . _Coerce
-
--- | A token used for paging results. Providing this token instead of the
--- startIndex parameter can help you retrieve stable results when an
--- underlying table is changing.
-tdlPageToken :: Lens' TableDataList (Maybe Text)
-tdlPageToken
-  = lens _tdlPageToken (\ s a -> s{_tdlPageToken = a})
-
--- | The total number of rows in the complete table.
-tdlTotalRows :: Lens' TableDataList (Maybe Int64)
-tdlTotalRows
-  = lens _tdlTotalRows (\ s a -> s{_tdlTotalRows = a})
-      . mapping _Coerce
-
-instance FromJSON TableDataList where
-        parseJSON
-          = withObject "TableDataList"
-              (\ o ->
-                 TableDataList' <$>
-                   (o .:? "etag") <*>
-                     (o .:? "kind" .!= "bigquery#tableDataList")
-                     <*> (o .:? "rows" .!= mempty)
-                     <*> (o .:? "pageToken")
-                     <*> (o .:? "totalRows"))
-
-instance ToJSON TableDataList where
-        toJSON TableDataList'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _tdlEtag, Just ("kind" .= _tdlKind),
-                  ("rows" .=) <$> _tdlRows,
-                  ("pageToken" .=) <$> _tdlPageToken,
-                  ("totalRows" .=) <$> _tdlTotalRows])
-
---
--- /See:/ 'jobConfigurationTableCopy' smart constructor.
-data JobConfigurationTableCopy = JobConfigurationTableCopy'
-    { _jctcDestinationTable  :: !(Maybe TableReference)
-    , _jctcWriteDisPosition  :: !(Maybe Text)
-    , _jctcSourceTables      :: !(Maybe [TableReference])
-    , _jctcCreateDisPosition :: !(Maybe Text)
-    , _jctcSourceTable       :: !(Maybe TableReference)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfigurationTableCopy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jctcDestinationTable'
---
--- * 'jctcWriteDisPosition'
---
--- * 'jctcSourceTables'
---
--- * 'jctcCreateDisPosition'
---
--- * 'jctcSourceTable'
-jobConfigurationTableCopy
-    :: JobConfigurationTableCopy
-jobConfigurationTableCopy =
-    JobConfigurationTableCopy'
-    { _jctcDestinationTable = Nothing
-    , _jctcWriteDisPosition = Nothing
-    , _jctcSourceTables = Nothing
-    , _jctcCreateDisPosition = Nothing
-    , _jctcSourceTable = Nothing
-    }
-
--- | [Required] The destination table
-jctcDestinationTable :: Lens' JobConfigurationTableCopy (Maybe TableReference)
-jctcDestinationTable
-  = lens _jctcDestinationTable
-      (\ s a -> s{_jctcDestinationTable = a})
-
--- | [Optional] Specifies the action that occurs if the destination table
--- already exists. The following values are supported: WRITE_TRUNCATE: If
--- the table already exists, BigQuery overwrites the table data.
--- WRITE_APPEND: If the table already exists, BigQuery appends the data to
--- the table. WRITE_EMPTY: If the table already exists and contains data, a
--- \'duplicate\' error is returned in the job result. The default value is
--- WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able
--- to complete the job successfully. Creation, truncation and append
--- actions occur as one atomic update upon job completion.
-jctcWriteDisPosition :: Lens' JobConfigurationTableCopy (Maybe Text)
-jctcWriteDisPosition
-  = lens _jctcWriteDisPosition
-      (\ s a -> s{_jctcWriteDisPosition = a})
-
--- | [Pick one] Source tables to copy.
-jctcSourceTables :: Lens' JobConfigurationTableCopy [TableReference]
-jctcSourceTables
-  = lens _jctcSourceTables
-      (\ s a -> s{_jctcSourceTables = a})
-      . _Default
-      . _Coerce
-
--- | [Optional] Specifies whether the job is allowed to create new tables.
--- The following values are supported: CREATE_IF_NEEDED: If the table does
--- not exist, BigQuery creates the table. CREATE_NEVER: The table must
--- already exist. If it does not, a \'notFound\' error is returned in the
--- job result. The default value is CREATE_IF_NEEDED. Creation, truncation
--- and append actions occur as one atomic update upon job completion.
-jctcCreateDisPosition :: Lens' JobConfigurationTableCopy (Maybe Text)
-jctcCreateDisPosition
-  = lens _jctcCreateDisPosition
-      (\ s a -> s{_jctcCreateDisPosition = a})
-
--- | [Pick one] Source table to copy.
-jctcSourceTable :: Lens' JobConfigurationTableCopy (Maybe TableReference)
-jctcSourceTable
-  = lens _jctcSourceTable
-      (\ s a -> s{_jctcSourceTable = a})
-
-instance FromJSON JobConfigurationTableCopy where
-        parseJSON
-          = withObject "JobConfigurationTableCopy"
-              (\ o ->
-                 JobConfigurationTableCopy' <$>
-                   (o .:? "destinationTable") <*>
-                     (o .:? "writeDisposition")
-                     <*> (o .:? "sourceTables" .!= mempty)
-                     <*> (o .:? "createDisposition")
-                     <*> (o .:? "sourceTable"))
-
-instance ToJSON JobConfigurationTableCopy where
-        toJSON JobConfigurationTableCopy'{..}
-          = object
-              (catMaybes
-                 [("destinationTable" .=) <$> _jctcDestinationTable,
-                  ("writeDisposition" .=) <$> _jctcWriteDisPosition,
-                  ("sourceTables" .=) <$> _jctcSourceTables,
-                  ("createDisposition" .=) <$> _jctcCreateDisPosition,
-                  ("sourceTable" .=) <$> _jctcSourceTable])
-
---
--- /See:/ 'tableListTablesItem' smart constructor.
-data TableListTablesItem = TableListTablesItem'
-    { _tltiTableReference :: !(Maybe TableReference)
-    , _tltiFriendlyName   :: !(Maybe Text)
-    , _tltiKind           :: !Text
-    , _tltiId             :: !(Maybe Text)
-    , _tltiLabels         :: !(Maybe TableListTablesItemLabels)
-    , _tltiType           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableListTablesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tltiTableReference'
---
--- * 'tltiFriendlyName'
---
--- * 'tltiKind'
---
--- * 'tltiId'
---
--- * 'tltiLabels'
---
--- * 'tltiType'
-tableListTablesItem
-    :: TableListTablesItem
-tableListTablesItem =
-    TableListTablesItem'
-    { _tltiTableReference = Nothing
-    , _tltiFriendlyName = Nothing
-    , _tltiKind = "bigquery#table"
-    , _tltiId = Nothing
-    , _tltiLabels = Nothing
-    , _tltiType = Nothing
-    }
-
--- | A reference uniquely identifying the table.
-tltiTableReference :: Lens' TableListTablesItem (Maybe TableReference)
-tltiTableReference
-  = lens _tltiTableReference
-      (\ s a -> s{_tltiTableReference = a})
-
--- | The user-friendly name for this table.
-tltiFriendlyName :: Lens' TableListTablesItem (Maybe Text)
-tltiFriendlyName
-  = lens _tltiFriendlyName
-      (\ s a -> s{_tltiFriendlyName = a})
-
--- | The resource type.
-tltiKind :: Lens' TableListTablesItem Text
-tltiKind = lens _tltiKind (\ s a -> s{_tltiKind = a})
-
--- | An opaque ID of the table
-tltiId :: Lens' TableListTablesItem (Maybe Text)
-tltiId = lens _tltiId (\ s a -> s{_tltiId = a})
-
--- | [Experimental] The labels associated with this table. You can use these
--- to organize and group your tables.
-tltiLabels :: Lens' TableListTablesItem (Maybe TableListTablesItemLabels)
-tltiLabels
-  = lens _tltiLabels (\ s a -> s{_tltiLabels = a})
-
--- | The type of table. Possible values are: TABLE, VIEW.
-tltiType :: Lens' TableListTablesItem (Maybe Text)
-tltiType = lens _tltiType (\ s a -> s{_tltiType = a})
-
-instance FromJSON TableListTablesItem where
-        parseJSON
-          = withObject "TableListTablesItem"
-              (\ o ->
-                 TableListTablesItem' <$>
-                   (o .:? "tableReference") <*> (o .:? "friendlyName")
-                     <*> (o .:? "kind" .!= "bigquery#table")
-                     <*> (o .:? "id")
-                     <*> (o .:? "labels")
-                     <*> (o .:? "type"))
-
-instance ToJSON TableListTablesItem where
-        toJSON TableListTablesItem'{..}
-          = object
-              (catMaybes
-                 [("tableReference" .=) <$> _tltiTableReference,
-                  ("friendlyName" .=) <$> _tltiFriendlyName,
-                  Just ("kind" .= _tltiKind), ("id" .=) <$> _tltiId,
-                  ("labels" .=) <$> _tltiLabels,
-                  ("type" .=) <$> _tltiType])
-
---
--- /See:/ 'tableSchema' smart constructor.
-newtype TableSchema = TableSchema'
-    { _tsFields :: Maybe [TableFieldSchema]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableSchema' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tsFields'
-tableSchema
-    :: TableSchema
-tableSchema =
-    TableSchema'
-    { _tsFields = Nothing
-    }
-
--- | Describes the fields in a table.
-tsFields :: Lens' TableSchema [TableFieldSchema]
-tsFields
-  = lens _tsFields (\ s a -> s{_tsFields = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON TableSchema where
-        parseJSON
-          = withObject "TableSchema"
-              (\ o -> TableSchema' <$> (o .:? "fields" .!= mempty))
-
-instance ToJSON TableSchema where
-        toJSON TableSchema'{..}
-          = object (catMaybes [("fields" .=) <$> _tsFields])
-
---
--- /See:/ 'projectList' smart constructor.
-data ProjectList = ProjectList'
-    { _plTotalItems    :: !(Maybe (Textual Int32))
-    , _plEtag          :: !(Maybe Text)
-    , _plNextPageToken :: !(Maybe Text)
-    , _plKind          :: !Text
-    , _plProjects      :: !(Maybe [ProjectListProjectsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProjectList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'plTotalItems'
---
--- * 'plEtag'
---
--- * 'plNextPageToken'
---
--- * 'plKind'
---
--- * 'plProjects'
-projectList
-    :: ProjectList
-projectList =
-    ProjectList'
-    { _plTotalItems = Nothing
-    , _plEtag = Nothing
-    , _plNextPageToken = Nothing
-    , _plKind = "bigquery#projectList"
-    , _plProjects = Nothing
-    }
-
--- | The total number of projects in the list.
-plTotalItems :: Lens' ProjectList (Maybe Int32)
-plTotalItems
-  = lens _plTotalItems (\ s a -> s{_plTotalItems = a})
-      . mapping _Coerce
-
--- | A hash of the page of results
-plEtag :: Lens' ProjectList (Maybe Text)
-plEtag = lens _plEtag (\ s a -> s{_plEtag = a})
-
--- | A token to request the next page of results.
-plNextPageToken :: Lens' ProjectList (Maybe Text)
-plNextPageToken
-  = lens _plNextPageToken
-      (\ s a -> s{_plNextPageToken = a})
-
--- | The type of list.
-plKind :: Lens' ProjectList Text
-plKind = lens _plKind (\ s a -> s{_plKind = a})
-
--- | Projects to which you have at least READ access.
-plProjects :: Lens' ProjectList [ProjectListProjectsItem]
-plProjects
-  = lens _plProjects (\ s a -> s{_plProjects = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ProjectList where
-        parseJSON
-          = withObject "ProjectList"
-              (\ o ->
-                 ProjectList' <$>
-                   (o .:? "totalItems") <*> (o .:? "etag") <*>
-                     (o .:? "nextPageToken")
-                     <*> (o .:? "kind" .!= "bigquery#projectList")
-                     <*> (o .:? "projects" .!= mempty))
-
-instance ToJSON ProjectList where
-        toJSON ProjectList'{..}
-          = object
-              (catMaybes
-                 [("totalItems" .=) <$> _plTotalItems,
-                  ("etag" .=) <$> _plEtag,
-                  ("nextPageToken" .=) <$> _plNextPageToken,
-                  Just ("kind" .= _plKind),
-                  ("projects" .=) <$> _plProjects])
-
---
--- /See:/ 'explainQueryStep' smart constructor.
-data ExplainQueryStep = ExplainQueryStep'
-    { _eqsSubsteps :: !(Maybe [Text])
-    , _eqsKind     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExplainQueryStep' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eqsSubsteps'
---
--- * 'eqsKind'
-explainQueryStep
-    :: ExplainQueryStep
-explainQueryStep =
-    ExplainQueryStep'
-    { _eqsSubsteps = Nothing
-    , _eqsKind = Nothing
-    }
-
--- | Human-readable stage descriptions.
-eqsSubsteps :: Lens' ExplainQueryStep [Text]
-eqsSubsteps
-  = lens _eqsSubsteps (\ s a -> s{_eqsSubsteps = a}) .
-      _Default
-      . _Coerce
-
--- | Machine-readable operation type.
-eqsKind :: Lens' ExplainQueryStep (Maybe Text)
-eqsKind = lens _eqsKind (\ s a -> s{_eqsKind = a})
-
-instance FromJSON ExplainQueryStep where
-        parseJSON
-          = withObject "ExplainQueryStep"
-              (\ o ->
-                 ExplainQueryStep' <$>
-                   (o .:? "substeps" .!= mempty) <*> (o .:? "kind"))
-
-instance ToJSON ExplainQueryStep where
-        toJSON ExplainQueryStep'{..}
-          = object
-              (catMaybes
-                 [("substeps" .=) <$> _eqsSubsteps,
-                  ("kind" .=) <$> _eqsKind])
-
---
--- /See:/ 'queryParameterTypeStructTypesItem' smart constructor.
-data QueryParameterTypeStructTypesItem = QueryParameterTypeStructTypesItem'
-    { _qptstiName        :: !(Maybe Text)
-    , _qptstiType        :: !(Maybe QueryParameterType)
-    , _qptstiDescription :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryParameterTypeStructTypesItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qptstiName'
---
--- * 'qptstiType'
---
--- * 'qptstiDescription'
-queryParameterTypeStructTypesItem
-    :: QueryParameterTypeStructTypesItem
-queryParameterTypeStructTypesItem =
-    QueryParameterTypeStructTypesItem'
-    { _qptstiName = Nothing
-    , _qptstiType = Nothing
-    , _qptstiDescription = Nothing
-    }
-
--- | [Optional] The name of this field.
-qptstiName :: Lens' QueryParameterTypeStructTypesItem (Maybe Text)
-qptstiName
-  = lens _qptstiName (\ s a -> s{_qptstiName = a})
-
--- | [Required] The type of this field.
-qptstiType :: Lens' QueryParameterTypeStructTypesItem (Maybe QueryParameterType)
-qptstiType
-  = lens _qptstiType (\ s a -> s{_qptstiType = a})
-
--- | [Optional] Human-oriented description of the field.
-qptstiDescription :: Lens' QueryParameterTypeStructTypesItem (Maybe Text)
-qptstiDescription
-  = lens _qptstiDescription
-      (\ s a -> s{_qptstiDescription = a})
-
-instance FromJSON QueryParameterTypeStructTypesItem
-         where
-        parseJSON
-          = withObject "QueryParameterTypeStructTypesItem"
-              (\ o ->
-                 QueryParameterTypeStructTypesItem' <$>
-                   (o .:? "name") <*> (o .:? "type") <*>
-                     (o .:? "description"))
-
-instance ToJSON QueryParameterTypeStructTypesItem
-         where
-        toJSON QueryParameterTypeStructTypesItem'{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _qptstiName,
-                  ("type" .=) <$> _qptstiType,
-                  ("description" .=) <$> _qptstiDescription])
-
---
--- /See:/ 'bigtableColumnFamily' smart constructor.
-data BigtableColumnFamily = BigtableColumnFamily'
-    { _bcfFamilyId       :: !(Maybe Text)
-    , _bcfColumns        :: !(Maybe [BigtableColumn])
-    , _bcfOnlyReadLatest :: !(Maybe Bool)
-    , _bcfType           :: !(Maybe Text)
-    , _bcfEncoding       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BigtableColumnFamily' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcfFamilyId'
---
--- * 'bcfColumns'
---
--- * 'bcfOnlyReadLatest'
---
--- * 'bcfType'
---
--- * 'bcfEncoding'
-bigtableColumnFamily
-    :: BigtableColumnFamily
-bigtableColumnFamily =
-    BigtableColumnFamily'
-    { _bcfFamilyId = Nothing
-    , _bcfColumns = Nothing
-    , _bcfOnlyReadLatest = Nothing
-    , _bcfType = Nothing
-    , _bcfEncoding = Nothing
-    }
-
--- | Identifier of the column family.
-bcfFamilyId :: Lens' BigtableColumnFamily (Maybe Text)
-bcfFamilyId
-  = lens _bcfFamilyId (\ s a -> s{_bcfFamilyId = a})
-
--- | [Optional] Lists of columns that should be exposed as individual fields
--- as opposed to a list of (column name, value) pairs. All columns whose
--- qualifier matches a qualifier in this list can be accessed as .. Other
--- columns can be accessed as a list through .Column field.
-bcfColumns :: Lens' BigtableColumnFamily [BigtableColumn]
-bcfColumns
-  = lens _bcfColumns (\ s a -> s{_bcfColumns = a}) .
-      _Default
-      . _Coerce
-
--- | [Optional] If this is set only the latest version of value are exposed
--- for all columns in this column family. This can be overridden for a
--- specific column by listing that column in \'columns\' and specifying a
--- different setting for that column.
-bcfOnlyReadLatest :: Lens' BigtableColumnFamily (Maybe Bool)
-bcfOnlyReadLatest
-  = lens _bcfOnlyReadLatest
-      (\ s a -> s{_bcfOnlyReadLatest = a})
-
--- | [Optional] The type to convert the value in cells of this column family.
--- The values are expected to be encoded using HBase Bytes.toBytes function
--- when using the BINARY encoding value. Following BigQuery types are
--- allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Default
--- type is BYTES. This can be overridden for a specific column by listing
--- that column in \'columns\' and specifying a type for it.
-bcfType :: Lens' BigtableColumnFamily (Maybe Text)
-bcfType = lens _bcfType (\ s a -> s{_bcfType = a})
-
--- | [Optional] The encoding of the values when the type is not STRING.
--- Acceptable encoding values are: TEXT - indicates values are alphanumeric
--- text strings. BINARY - indicates values are encoded using HBase
--- Bytes.toBytes family of functions. This can be overridden for a specific
--- column by listing that column in \'columns\' and specifying an encoding
--- for it.
-bcfEncoding :: Lens' BigtableColumnFamily (Maybe Text)
-bcfEncoding
-  = lens _bcfEncoding (\ s a -> s{_bcfEncoding = a})
-
-instance FromJSON BigtableColumnFamily where
-        parseJSON
-          = withObject "BigtableColumnFamily"
-              (\ o ->
-                 BigtableColumnFamily' <$>
-                   (o .:? "familyId") <*> (o .:? "columns" .!= mempty)
-                     <*> (o .:? "onlyReadLatest")
-                     <*> (o .:? "type")
-                     <*> (o .:? "encoding"))
-
-instance ToJSON BigtableColumnFamily where
-        toJSON BigtableColumnFamily'{..}
-          = object
-              (catMaybes
-                 [("familyId" .=) <$> _bcfFamilyId,
-                  ("columns" .=) <$> _bcfColumns,
-                  ("onlyReadLatest" .=) <$> _bcfOnlyReadLatest,
-                  ("type" .=) <$> _bcfType,
-                  ("encoding" .=) <$> _bcfEncoding])
-
---
--- /See:/ 'jobStatistics' smart constructor.
-data JobStatistics = JobStatistics'
-    { _jsCreationTime        :: !(Maybe (Textual Int64))
-    , _jsStartTime           :: !(Maybe (Textual Int64))
-    , _jsLoad                :: !(Maybe JobStatistics3)
-    , _jsTotalBytesProcessed :: !(Maybe (Textual Int64))
-    , _jsEndTime             :: !(Maybe (Textual Int64))
-    , _jsQuery               :: !(Maybe JobStatistics2)
-    , _jsExtract             :: !(Maybe JobStatistics4)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobStatistics' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jsCreationTime'
---
--- * 'jsStartTime'
---
--- * 'jsLoad'
---
--- * 'jsTotalBytesProcessed'
---
--- * 'jsEndTime'
---
--- * 'jsQuery'
---
--- * 'jsExtract'
-jobStatistics
-    :: JobStatistics
-jobStatistics =
-    JobStatistics'
-    { _jsCreationTime = Nothing
-    , _jsStartTime = Nothing
-    , _jsLoad = Nothing
-    , _jsTotalBytesProcessed = Nothing
-    , _jsEndTime = Nothing
-    , _jsQuery = Nothing
-    , _jsExtract = Nothing
-    }
-
--- | [Output-only] Creation time of this job, in milliseconds since the
--- epoch. This field will be present on all jobs.
-jsCreationTime :: Lens' JobStatistics (Maybe Int64)
-jsCreationTime
-  = lens _jsCreationTime
-      (\ s a -> s{_jsCreationTime = a})
-      . mapping _Coerce
-
--- | [Output-only] Start time of this job, in milliseconds since the epoch.
--- This field will be present when the job transitions from the PENDING
--- state to either RUNNING or DONE.
-jsStartTime :: Lens' JobStatistics (Maybe Int64)
-jsStartTime
-  = lens _jsStartTime (\ s a -> s{_jsStartTime = a}) .
-      mapping _Coerce
-
--- | [Output-only] Statistics for a load job.
-jsLoad :: Lens' JobStatistics (Maybe JobStatistics3)
-jsLoad = lens _jsLoad (\ s a -> s{_jsLoad = a})
-
--- | [Output-only] [Deprecated] Use the bytes processed in the query
--- statistics instead.
-jsTotalBytesProcessed :: Lens' JobStatistics (Maybe Int64)
-jsTotalBytesProcessed
-  = lens _jsTotalBytesProcessed
-      (\ s a -> s{_jsTotalBytesProcessed = a})
-      . mapping _Coerce
-
--- | [Output-only] End time of this job, in milliseconds since the epoch.
--- This field will be present whenever a job is in the DONE state.
-jsEndTime :: Lens' JobStatistics (Maybe Int64)
-jsEndTime
-  = lens _jsEndTime (\ s a -> s{_jsEndTime = a}) .
-      mapping _Coerce
-
--- | [Output-only] Statistics for a query job.
-jsQuery :: Lens' JobStatistics (Maybe JobStatistics2)
-jsQuery = lens _jsQuery (\ s a -> s{_jsQuery = a})
-
--- | [Output-only] Statistics for an extract job.
-jsExtract :: Lens' JobStatistics (Maybe JobStatistics4)
-jsExtract
-  = lens _jsExtract (\ s a -> s{_jsExtract = a})
-
-instance FromJSON JobStatistics where
-        parseJSON
-          = withObject "JobStatistics"
-              (\ o ->
-                 JobStatistics' <$>
-                   (o .:? "creationTime") <*> (o .:? "startTime") <*>
-                     (o .:? "load")
-                     <*> (o .:? "totalBytesProcessed")
-                     <*> (o .:? "endTime")
-                     <*> (o .:? "query")
-                     <*> (o .:? "extract"))
-
-instance ToJSON JobStatistics where
-        toJSON JobStatistics'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _jsCreationTime,
-                  ("startTime" .=) <$> _jsStartTime,
-                  ("load" .=) <$> _jsLoad,
-                  ("totalBytesProcessed" .=) <$>
-                    _jsTotalBytesProcessed,
-                  ("endTime" .=) <$> _jsEndTime,
-                  ("query" .=) <$> _jsQuery,
-                  ("extract" .=) <$> _jsExtract])
-
--- | [Experimental] The labels associated with this job. You can use these to
--- organize and group your jobs. Label keys and values can be no longer
--- than 63 characters, can only contain letters, numeric characters,
--- underscores and dashes. International characters are allowed. Label
--- values are optional. Label keys must start with a letter and must be
--- unique within a dataset. Both keys and values are additionally
--- constrained to be \<= 128 bytes in size.
---
--- /See:/ 'jobConfigurationLabels' smart constructor.
-newtype JobConfigurationLabels = JobConfigurationLabels'
-    { _jclAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfigurationLabels' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jclAddtional'
-jobConfigurationLabels
-    :: HashMap Text Text -- ^ 'jclAddtional'
-    -> JobConfigurationLabels
-jobConfigurationLabels pJclAddtional_ =
-    JobConfigurationLabels'
-    { _jclAddtional = _Coerce # pJclAddtional_
-    }
-
-jclAddtional :: Lens' JobConfigurationLabels (HashMap Text Text)
-jclAddtional
-  = lens _jclAddtional (\ s a -> s{_jclAddtional = a})
-      . _Coerce
-
-instance FromJSON JobConfigurationLabels where
-        parseJSON
-          = withObject "JobConfigurationLabels"
-              (\ o ->
-                 JobConfigurationLabels' <$> (parseJSONObject o))
-
-instance ToJSON JobConfigurationLabels where
-        toJSON = toJSON . _jclAddtional
-
---
--- /See:/ 'dataSet' smart constructor.
-data DataSet = DataSet'
-    { _dsCreationTime             :: !(Maybe (Textual Int64))
-    , _dsAccess                   :: !(Maybe [DataSetAccessItem])
-    , _dsEtag                     :: !(Maybe Text)
-    , _dsLocation                 :: !(Maybe Text)
-    , _dsFriendlyName             :: !(Maybe Text)
-    , _dsKind                     :: !Text
-    , _dsLastModifiedTime         :: !(Maybe (Textual Int64))
-    , _dsDataSetReference         :: !(Maybe DataSetReference)
-    , _dsSelfLink                 :: !(Maybe Text)
-    , _dsId                       :: !(Maybe Text)
-    , _dsLabels                   :: !(Maybe DataSetLabels)
-    , _dsDefaultTableExpirationMs :: !(Maybe (Textual Int64))
-    , _dsDescription              :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsCreationTime'
---
--- * 'dsAccess'
---
--- * 'dsEtag'
---
--- * 'dsLocation'
---
--- * 'dsFriendlyName'
---
--- * 'dsKind'
---
--- * 'dsLastModifiedTime'
---
--- * 'dsDataSetReference'
---
--- * 'dsSelfLink'
---
--- * 'dsId'
---
--- * 'dsLabels'
---
--- * 'dsDefaultTableExpirationMs'
---
--- * 'dsDescription'
-dataSet
-    :: DataSet
-dataSet =
-    DataSet'
-    { _dsCreationTime = Nothing
-    , _dsAccess = Nothing
-    , _dsEtag = Nothing
-    , _dsLocation = Nothing
-    , _dsFriendlyName = Nothing
-    , _dsKind = "bigquery#dataset"
-    , _dsLastModifiedTime = Nothing
-    , _dsDataSetReference = Nothing
-    , _dsSelfLink = Nothing
-    , _dsId = Nothing
-    , _dsLabels = Nothing
-    , _dsDefaultTableExpirationMs = Nothing
-    , _dsDescription = Nothing
-    }
-
--- | [Output-only] The time when this dataset was created, in milliseconds
--- since the epoch.
-dsCreationTime :: Lens' DataSet (Maybe Int64)
-dsCreationTime
-  = lens _dsCreationTime
-      (\ s a -> s{_dsCreationTime = a})
-      . mapping _Coerce
-
--- | [Optional] An array of objects that define dataset access for one or
--- more entities. You can set this property when inserting or updating a
--- dataset in order to control who is allowed to access the data. If
--- unspecified at dataset creation time, BigQuery adds default dataset
--- access for the following entities: access.specialGroup: projectReaders;
--- access.role: READER; access.specialGroup: projectWriters; access.role:
--- WRITER; access.specialGroup: projectOwners; access.role: OWNER;
--- access.userByEmail: [dataset creator email]; access.role: OWNER;
-dsAccess :: Lens' DataSet [DataSetAccessItem]
-dsAccess
-  = lens _dsAccess (\ s a -> s{_dsAccess = a}) .
-      _Default
-      . _Coerce
-
--- | [Output-only] A hash of the resource.
-dsEtag :: Lens' DataSet (Maybe Text)
-dsEtag = lens _dsEtag (\ s a -> s{_dsEtag = a})
-
--- | [Experimental] The geographic location where the dataset should reside.
--- Possible values include EU and US. The default value is US.
-dsLocation :: Lens' DataSet (Maybe Text)
-dsLocation
-  = lens _dsLocation (\ s a -> s{_dsLocation = a})
-
--- | [Optional] A descriptive name for the dataset.
-dsFriendlyName :: Lens' DataSet (Maybe Text)
-dsFriendlyName
-  = lens _dsFriendlyName
-      (\ s a -> s{_dsFriendlyName = a})
-
--- | [Output-only] The resource type.
-dsKind :: Lens' DataSet Text
-dsKind = lens _dsKind (\ s a -> s{_dsKind = a})
-
--- | [Output-only] The date when this dataset or any of its tables was last
--- modified, in milliseconds since the epoch.
-dsLastModifiedTime :: Lens' DataSet (Maybe Int64)
-dsLastModifiedTime
-  = lens _dsLastModifiedTime
-      (\ s a -> s{_dsLastModifiedTime = a})
-      . mapping _Coerce
-
--- | [Required] A reference that identifies the dataset.
-dsDataSetReference :: Lens' DataSet (Maybe DataSetReference)
-dsDataSetReference
-  = lens _dsDataSetReference
-      (\ s a -> s{_dsDataSetReference = a})
-
--- | [Output-only] A URL that can be used to access the resource again. You
--- can use this URL in Get or Update requests to the resource.
-dsSelfLink :: Lens' DataSet (Maybe Text)
-dsSelfLink
-  = lens _dsSelfLink (\ s a -> s{_dsSelfLink = a})
-
--- | [Output-only] The fully-qualified unique name of the dataset in the
--- format projectId:datasetId. The dataset name without the project name is
--- given in the datasetId field. When creating a new dataset, leave this
--- field blank, and instead specify the datasetId field.
-dsId :: Lens' DataSet (Maybe Text)
-dsId = lens _dsId (\ s a -> s{_dsId = a})
-
--- | [Experimental] The labels associated with this dataset. You can use
--- these to organize and group your datasets. You can set this property
--- when inserting or updating a dataset. See Labeling Datasets for more
--- information.
-dsLabels :: Lens' DataSet (Maybe DataSetLabels)
-dsLabels = lens _dsLabels (\ s a -> s{_dsLabels = a})
-
--- | [Optional] The default lifetime of all tables in the dataset, in
--- milliseconds. The minimum value is 3600000 milliseconds (one hour). Once
--- this property is set, all newly-created tables in the dataset will have
--- an expirationTime property set to the creation time plus the value in
--- this property, and changing the value will only affect new tables, not
--- existing ones. When the expirationTime for a given table is reached,
--- that table will be deleted automatically. If a table\'s expirationTime
--- is modified or removed before the table expires, or if you provide an
--- explicit expirationTime when creating a table, that value takes
--- precedence over the default expiration time indicated by this property.
-dsDefaultTableExpirationMs :: Lens' DataSet (Maybe Int64)
-dsDefaultTableExpirationMs
-  = lens _dsDefaultTableExpirationMs
-      (\ s a -> s{_dsDefaultTableExpirationMs = a})
-      . mapping _Coerce
-
--- | [Optional] A user-friendly description of the dataset.
-dsDescription :: Lens' DataSet (Maybe Text)
-dsDescription
-  = lens _dsDescription
-      (\ s a -> s{_dsDescription = a})
-
-instance FromJSON DataSet where
-        parseJSON
-          = withObject "DataSet"
-              (\ o ->
-                 DataSet' <$>
-                   (o .:? "creationTime") <*>
-                     (o .:? "access" .!= mempty)
-                     <*> (o .:? "etag")
-                     <*> (o .:? "location")
-                     <*> (o .:? "friendlyName")
-                     <*> (o .:? "kind" .!= "bigquery#dataset")
-                     <*> (o .:? "lastModifiedTime")
-                     <*> (o .:? "datasetReference")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id")
-                     <*> (o .:? "labels")
-                     <*> (o .:? "defaultTableExpirationMs")
-                     <*> (o .:? "description"))
-
-instance ToJSON DataSet where
-        toJSON DataSet'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _dsCreationTime,
-                  ("access" .=) <$> _dsAccess, ("etag" .=) <$> _dsEtag,
-                  ("location" .=) <$> _dsLocation,
-                  ("friendlyName" .=) <$> _dsFriendlyName,
-                  Just ("kind" .= _dsKind),
-                  ("lastModifiedTime" .=) <$> _dsLastModifiedTime,
-                  ("datasetReference" .=) <$> _dsDataSetReference,
-                  ("selfLink" .=) <$> _dsSelfLink, ("id" .=) <$> _dsId,
-                  ("labels" .=) <$> _dsLabels,
-                  ("defaultTableExpirationMs" .=) <$>
-                    _dsDefaultTableExpirationMs,
-                  ("description" .=) <$> _dsDescription])
-
---
--- /See:/ 'bigtableOptions' smart constructor.
-data BigtableOptions = BigtableOptions'
-    { _boReadRowkeyAsString              :: !(Maybe Bool)
-    , _boIgnoreUnspecifiedColumnFamilies :: !(Maybe Bool)
-    , _boColumnFamilies                  :: !(Maybe [BigtableColumnFamily])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BigtableOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'boReadRowkeyAsString'
---
--- * 'boIgnoreUnspecifiedColumnFamilies'
---
--- * 'boColumnFamilies'
-bigtableOptions
-    :: BigtableOptions
-bigtableOptions =
-    BigtableOptions'
-    { _boReadRowkeyAsString = Nothing
-    , _boIgnoreUnspecifiedColumnFamilies = Nothing
-    , _boColumnFamilies = Nothing
-    }
-
--- | [Optional] If field is true, then the rowkey column families will be
--- read and converted to string. Otherwise they are read with BYTES type
--- values and users need to manually cast them with CAST if necessary. The
--- default value is false.
-boReadRowkeyAsString :: Lens' BigtableOptions (Maybe Bool)
-boReadRowkeyAsString
-  = lens _boReadRowkeyAsString
-      (\ s a -> s{_boReadRowkeyAsString = a})
-
--- | [Optional] If field is true, then the column families that are not
--- specified in columnFamilies list are not exposed in the table schema.
--- Otherwise, they are read with BYTES type values. The default value is
--- false.
-boIgnoreUnspecifiedColumnFamilies :: Lens' BigtableOptions (Maybe Bool)
-boIgnoreUnspecifiedColumnFamilies
-  = lens _boIgnoreUnspecifiedColumnFamilies
-      (\ s a -> s{_boIgnoreUnspecifiedColumnFamilies = a})
-
--- | [Optional] List of column families to expose in the table schema along
--- with their types. This list restricts the column families that can be
--- referenced in queries and specifies their value types. You can use this
--- list to do type conversions - see the \'type\' field for more details.
--- If you leave this list empty, all column families are present in the
--- table schema and their values are read as BYTES. During a query only the
--- column families referenced in that query are read from Bigtable.
-boColumnFamilies :: Lens' BigtableOptions [BigtableColumnFamily]
-boColumnFamilies
-  = lens _boColumnFamilies
-      (\ s a -> s{_boColumnFamilies = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON BigtableOptions where
-        parseJSON
-          = withObject "BigtableOptions"
-              (\ o ->
-                 BigtableOptions' <$>
-                   (o .:? "readRowkeyAsString") <*>
-                     (o .:? "ignoreUnspecifiedColumnFamilies")
-                     <*> (o .:? "columnFamilies" .!= mempty))
-
-instance ToJSON BigtableOptions where
-        toJSON BigtableOptions'{..}
-          = object
-              (catMaybes
-                 [("readRowkeyAsString" .=) <$> _boReadRowkeyAsString,
-                  ("ignoreUnspecifiedColumnFamilies" .=) <$>
-                    _boIgnoreUnspecifiedColumnFamilies,
-                  ("columnFamilies" .=) <$> _boColumnFamilies])
-
---
--- /See:/ 'externalDataConfiguration' smart constructor.
-data ExternalDataConfiguration = ExternalDataConfiguration'
-    { _edcBigtableOptions     :: !(Maybe BigtableOptions)
-    , _edcIgnoreUnknownValues :: !(Maybe Bool)
-    , _edcCompression         :: !(Maybe Text)
-    , _edcSourceFormat        :: !(Maybe Text)
-    , _edcSchema              :: !(Maybe TableSchema)
-    , _edcMaxBadRecords       :: !(Maybe (Textual Int32))
-    , _edcGoogleSheetsOptions :: !(Maybe GoogleSheetsOptions)
-    , _edcAutodetect          :: !(Maybe Bool)
-    , _edcSourceURIs          :: !(Maybe [Text])
-    , _edcCSVOptions          :: !(Maybe CSVOptions)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExternalDataConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'edcBigtableOptions'
---
--- * 'edcIgnoreUnknownValues'
---
--- * 'edcCompression'
---
--- * 'edcSourceFormat'
---
--- * 'edcSchema'
---
--- * 'edcMaxBadRecords'
---
--- * 'edcGoogleSheetsOptions'
---
--- * 'edcAutodetect'
---
--- * 'edcSourceURIs'
---
--- * 'edcCSVOptions'
-externalDataConfiguration
-    :: ExternalDataConfiguration
-externalDataConfiguration =
-    ExternalDataConfiguration'
-    { _edcBigtableOptions = Nothing
-    , _edcIgnoreUnknownValues = Nothing
-    , _edcCompression = Nothing
-    , _edcSourceFormat = Nothing
-    , _edcSchema = Nothing
-    , _edcMaxBadRecords = Nothing
-    , _edcGoogleSheetsOptions = Nothing
-    , _edcAutodetect = Nothing
-    , _edcSourceURIs = Nothing
-    , _edcCSVOptions = Nothing
-    }
-
--- | [Optional] Additional options if sourceFormat is set to BIGTABLE.
-edcBigtableOptions :: Lens' ExternalDataConfiguration (Maybe BigtableOptions)
-edcBigtableOptions
-  = lens _edcBigtableOptions
-      (\ s a -> s{_edcBigtableOptions = a})
-
--- | [Optional] Indicates if BigQuery should allow extra values that are not
--- represented in the table schema. If true, the extra values are ignored.
--- If false, records with extra columns are treated as bad records, and if
--- there are too many bad records, an invalid error is returned in the job
--- result. The default value is false. The sourceFormat property determines
--- what BigQuery treats as an extra value: CSV: Trailing columns JSON:
--- Named values that don\'t match any column names Google Cloud Bigtable:
--- This setting is ignored. Google Cloud Datastore backups: This setting is
--- ignored. Avro: This setting is ignored.
-edcIgnoreUnknownValues :: Lens' ExternalDataConfiguration (Maybe Bool)
-edcIgnoreUnknownValues
-  = lens _edcIgnoreUnknownValues
-      (\ s a -> s{_edcIgnoreUnknownValues = a})
-
--- | [Optional] The compression type of the data source. Possible values
--- include GZIP and NONE. The default value is NONE. This setting is
--- ignored for Google Cloud Bigtable, Google Cloud Datastore backups and
--- Avro formats.
-edcCompression :: Lens' ExternalDataConfiguration (Maybe Text)
-edcCompression
-  = lens _edcCompression
-      (\ s a -> s{_edcCompression = a})
-
--- | [Required] The data format. For CSV files, specify \"CSV\". For Google
--- sheets, specify \"GOOGLE_SHEETS\". For newline-delimited JSON, specify
--- \"NEWLINE_DELIMITED_JSON\". For Avro files, specify \"AVRO\". For Google
--- Cloud Datastore backups, specify \"DATASTORE_BACKUP\". [Experimental]
--- For Google Cloud Bigtable, specify \"BIGTABLE\". Please note that
--- reading from Google Cloud Bigtable is experimental and has to be enabled
--- for your project. Please contact Google Cloud Support to enable this for
--- your project.
-edcSourceFormat :: Lens' ExternalDataConfiguration (Maybe Text)
-edcSourceFormat
-  = lens _edcSourceFormat
-      (\ s a -> s{_edcSourceFormat = a})
-
--- | [Optional] The schema for the data. Schema is required for CSV and JSON
--- formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore
--- backups, and Avro formats.
-edcSchema :: Lens' ExternalDataConfiguration (Maybe TableSchema)
-edcSchema
-  = lens _edcSchema (\ s a -> s{_edcSchema = a})
-
--- | [Optional] The maximum number of bad records that BigQuery can ignore
--- when reading data. If the number of bad records exceeds this value, an
--- invalid error is returned in the job result. The default value is 0,
--- which requires that all records are valid. This setting is ignored for
--- Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
-edcMaxBadRecords :: Lens' ExternalDataConfiguration (Maybe Int32)
-edcMaxBadRecords
-  = lens _edcMaxBadRecords
-      (\ s a -> s{_edcMaxBadRecords = a})
-      . mapping _Coerce
-
--- | [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
-edcGoogleSheetsOptions :: Lens' ExternalDataConfiguration (Maybe GoogleSheetsOptions)
-edcGoogleSheetsOptions
-  = lens _edcGoogleSheetsOptions
-      (\ s a -> s{_edcGoogleSheetsOptions = a})
-
--- | [Experimental] Try to detect schema and format options automatically.
--- Any option specified explicitly will be honored.
-edcAutodetect :: Lens' ExternalDataConfiguration (Maybe Bool)
-edcAutodetect
-  = lens _edcAutodetect
-      (\ s a -> s{_edcAutodetect = a})
-
--- | [Required] The fully-qualified URIs that point to your data in Google
--- Cloud. For Google Cloud Storage URIs: Each URI can contain one \'*\'
--- wildcard character and it must come after the \'bucket\' name. Size
--- limits related to load jobs apply to external data sources. For Google
--- Cloud Bigtable URIs: Exactly one URI can be specified and it has be a
--- fully specified and valid HTTPS URL for a Google Cloud Bigtable table.
--- For Google Cloud Datastore backups, exactly one URI can be specified,
--- and it must end with \'.backup_info\'. Also, the \'*\' wildcard
--- character is not allowed.
-edcSourceURIs :: Lens' ExternalDataConfiguration [Text]
-edcSourceURIs
-  = lens _edcSourceURIs
-      (\ s a -> s{_edcSourceURIs = a})
-      . _Default
-      . _Coerce
-
--- | Additional properties to set if sourceFormat is set to CSV.
-edcCSVOptions :: Lens' ExternalDataConfiguration (Maybe CSVOptions)
-edcCSVOptions
-  = lens _edcCSVOptions
-      (\ s a -> s{_edcCSVOptions = a})
-
-instance FromJSON ExternalDataConfiguration where
-        parseJSON
-          = withObject "ExternalDataConfiguration"
-              (\ o ->
-                 ExternalDataConfiguration' <$>
-                   (o .:? "bigtableOptions") <*>
-                     (o .:? "ignoreUnknownValues")
-                     <*> (o .:? "compression")
-                     <*> (o .:? "sourceFormat")
-                     <*> (o .:? "schema")
-                     <*> (o .:? "maxBadRecords")
-                     <*> (o .:? "googleSheetsOptions")
-                     <*> (o .:? "autodetect")
-                     <*> (o .:? "sourceUris" .!= mempty)
-                     <*> (o .:? "csvOptions"))
-
-instance ToJSON ExternalDataConfiguration where
-        toJSON ExternalDataConfiguration'{..}
-          = object
-              (catMaybes
-                 [("bigtableOptions" .=) <$> _edcBigtableOptions,
-                  ("ignoreUnknownValues" .=) <$>
-                    _edcIgnoreUnknownValues,
-                  ("compression" .=) <$> _edcCompression,
-                  ("sourceFormat" .=) <$> _edcSourceFormat,
-                  ("schema" .=) <$> _edcSchema,
-                  ("maxBadRecords" .=) <$> _edcMaxBadRecords,
-                  ("googleSheetsOptions" .=) <$>
-                    _edcGoogleSheetsOptions,
-                  ("autodetect" .=) <$> _edcAutodetect,
-                  ("sourceUris" .=) <$> _edcSourceURIs,
-                  ("csvOptions" .=) <$> _edcCSVOptions])
-
---
--- /See:/ 'tableReference' smart constructor.
-data TableReference = TableReference'
-    { _trDataSetId :: !(Maybe Text)
-    , _trProjectId :: !(Maybe Text)
-    , _trTableId   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trDataSetId'
---
--- * 'trProjectId'
---
--- * 'trTableId'
-tableReference
-    :: TableReference
-tableReference =
-    TableReference'
-    { _trDataSetId = Nothing
-    , _trProjectId = Nothing
-    , _trTableId = Nothing
-    }
-
--- | [Required] The ID of the dataset containing this table.
-trDataSetId :: Lens' TableReference (Maybe Text)
-trDataSetId
-  = lens _trDataSetId (\ s a -> s{_trDataSetId = a})
-
--- | [Required] The ID of the project containing this table.
-trProjectId :: Lens' TableReference (Maybe Text)
-trProjectId
-  = lens _trProjectId (\ s a -> s{_trProjectId = a})
-
--- | [Required] The ID of the table. The ID must contain only letters (a-z,
--- A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024
--- characters.
-trTableId :: Lens' TableReference (Maybe Text)
-trTableId
-  = lens _trTableId (\ s a -> s{_trTableId = a})
-
-instance FromJSON TableReference where
-        parseJSON
-          = withObject "TableReference"
-              (\ o ->
-                 TableReference' <$>
-                   (o .:? "datasetId") <*> (o .:? "projectId") <*>
-                     (o .:? "tableId"))
-
-instance ToJSON TableReference where
-        toJSON TableReference'{..}
-          = object
-              (catMaybes
-                 [("datasetId" .=) <$> _trDataSetId,
-                  ("projectId" .=) <$> _trProjectId,
-                  ("tableId" .=) <$> _trTableId])
-
---
--- /See:/ 'tableFieldSchema' smart constructor.
-data TableFieldSchema = TableFieldSchema'
-    { _tfsMode        :: !(Maybe Text)
-    , _tfsName        :: !(Maybe Text)
-    , _tfsType        :: !(Maybe Text)
-    , _tfsDescription :: !(Maybe Text)
-    , _tfsFields      :: !(Maybe [TableFieldSchema])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableFieldSchema' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tfsMode'
---
--- * 'tfsName'
---
--- * 'tfsType'
---
--- * 'tfsDescription'
---
--- * 'tfsFields'
-tableFieldSchema
-    :: TableFieldSchema
-tableFieldSchema =
-    TableFieldSchema'
-    { _tfsMode = Nothing
-    , _tfsName = Nothing
-    , _tfsType = Nothing
-    , _tfsDescription = Nothing
-    , _tfsFields = Nothing
-    }
-
--- | [Optional] The field mode. Possible values include NULLABLE, REQUIRED
--- and REPEATED. The default value is NULLABLE.
-tfsMode :: Lens' TableFieldSchema (Maybe Text)
-tfsMode = lens _tfsMode (\ s a -> s{_tfsMode = a})
-
--- | [Required] The field name. The name must contain only letters (a-z,
--- A-Z), numbers (0-9), or underscores (_), and must start with a letter or
--- underscore. The maximum length is 128 characters.
-tfsName :: Lens' TableFieldSchema (Maybe Text)
-tfsName = lens _tfsName (\ s a -> s{_tfsName = a})
-
--- | [Required] The field data type. Possible values include STRING, BYTES,
--- INTEGER, INT64 (same as INTEGER), FLOAT, FLOAT64 (same as FLOAT),
--- BOOLEAN, BOOL (same as BOOLEAN), TIMESTAMP, DATE, TIME, DATETIME, RECORD
--- (where RECORD indicates that the field contains a nested schema) or
--- STRUCT (same as RECORD).
-tfsType :: Lens' TableFieldSchema (Maybe Text)
-tfsType = lens _tfsType (\ s a -> s{_tfsType = a})
-
--- | [Optional] The field description. The maximum length is 16K characters.
-tfsDescription :: Lens' TableFieldSchema (Maybe Text)
-tfsDescription
-  = lens _tfsDescription
-      (\ s a -> s{_tfsDescription = a})
-
--- | [Optional] Describes the nested schema fields if the type property is
--- set to RECORD.
-tfsFields :: Lens' TableFieldSchema [TableFieldSchema]
-tfsFields
-  = lens _tfsFields (\ s a -> s{_tfsFields = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON TableFieldSchema where
-        parseJSON
-          = withObject "TableFieldSchema"
-              (\ o ->
-                 TableFieldSchema' <$>
-                   (o .:? "mode") <*> (o .:? "name") <*> (o .:? "type")
-                     <*> (o .:? "description")
-                     <*> (o .:? "fields" .!= mempty))
-
-instance ToJSON TableFieldSchema where
-        toJSON TableFieldSchema'{..}
-          = object
-              (catMaybes
-                 [("mode" .=) <$> _tfsMode, ("name" .=) <$> _tfsName,
-                  ("type" .=) <$> _tfsType,
-                  ("description" .=) <$> _tfsDescription,
-                  ("fields" .=) <$> _tfsFields])
-
---
--- /See:/ 'getQueryResultsResponse' smart constructor.
-data GetQueryResultsResponse = GetQueryResultsResponse'
-    { _gqrrJobReference        :: !(Maybe JobReference)
-    , _gqrrEtag                :: !(Maybe Text)
-    , _gqrrKind                :: !Text
-    , _gqrrSchema              :: !(Maybe TableSchema)
-    , _gqrrTotalBytesProcessed :: !(Maybe (Textual Int64))
-    , _gqrrRows                :: !(Maybe [TableRow])
-    , _gqrrPageToken           :: !(Maybe Text)
-    , _gqrrNumDmlAffectedRows  :: !(Maybe (Textual Int64))
-    , _gqrrTotalRows           :: !(Maybe (Textual Word64))
-    , _gqrrErrors              :: !(Maybe [ErrorProto])
-    , _gqrrJobComplete         :: !(Maybe Bool)
-    , _gqrrCacheHit            :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetQueryResultsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gqrrJobReference'
---
--- * 'gqrrEtag'
---
--- * 'gqrrKind'
---
--- * 'gqrrSchema'
---
--- * 'gqrrTotalBytesProcessed'
---
--- * 'gqrrRows'
---
--- * 'gqrrPageToken'
---
--- * 'gqrrNumDmlAffectedRows'
---
--- * 'gqrrTotalRows'
---
--- * 'gqrrErrors'
---
--- * 'gqrrJobComplete'
---
--- * 'gqrrCacheHit'
-getQueryResultsResponse
-    :: GetQueryResultsResponse
-getQueryResultsResponse =
-    GetQueryResultsResponse'
-    { _gqrrJobReference = Nothing
-    , _gqrrEtag = Nothing
-    , _gqrrKind = "bigquery#getQueryResultsResponse"
-    , _gqrrSchema = Nothing
-    , _gqrrTotalBytesProcessed = Nothing
-    , _gqrrRows = Nothing
-    , _gqrrPageToken = Nothing
-    , _gqrrNumDmlAffectedRows = Nothing
-    , _gqrrTotalRows = Nothing
-    , _gqrrErrors = Nothing
-    , _gqrrJobComplete = Nothing
-    , _gqrrCacheHit = Nothing
-    }
-
--- | Reference to the BigQuery Job that was created to run the query. This
--- field will be present even if the original request timed out, in which
--- case GetQueryResults can be used to read the results once the query has
--- completed. Since this API only returns the first page of results,
--- subsequent pages can be fetched via the same mechanism
--- (GetQueryResults).
-gqrrJobReference :: Lens' GetQueryResultsResponse (Maybe JobReference)
-gqrrJobReference
-  = lens _gqrrJobReference
-      (\ s a -> s{_gqrrJobReference = a})
-
--- | A hash of this response.
-gqrrEtag :: Lens' GetQueryResultsResponse (Maybe Text)
-gqrrEtag = lens _gqrrEtag (\ s a -> s{_gqrrEtag = a})
-
--- | The resource type of the response.
-gqrrKind :: Lens' GetQueryResultsResponse Text
-gqrrKind = lens _gqrrKind (\ s a -> s{_gqrrKind = a})
-
--- | The schema of the results. Present only when the query completes
--- successfully.
-gqrrSchema :: Lens' GetQueryResultsResponse (Maybe TableSchema)
-gqrrSchema
-  = lens _gqrrSchema (\ s a -> s{_gqrrSchema = a})
-
--- | The total number of bytes processed for this query.
-gqrrTotalBytesProcessed :: Lens' GetQueryResultsResponse (Maybe Int64)
-gqrrTotalBytesProcessed
-  = lens _gqrrTotalBytesProcessed
-      (\ s a -> s{_gqrrTotalBytesProcessed = a})
-      . mapping _Coerce
-
--- | An object with as many results as can be contained within the maximum
--- permitted reply size. To get any additional rows, you can call
--- GetQueryResults and specify the jobReference returned above. Present
--- only when the query completes successfully.
-gqrrRows :: Lens' GetQueryResultsResponse [TableRow]
-gqrrRows
-  = lens _gqrrRows (\ s a -> s{_gqrrRows = a}) .
-      _Default
-      . _Coerce
-
--- | A token used for paging results.
-gqrrPageToken :: Lens' GetQueryResultsResponse (Maybe Text)
-gqrrPageToken
-  = lens _gqrrPageToken
-      (\ s a -> s{_gqrrPageToken = a})
-
--- | [Output-only, Experimental] The number of rows affected by a DML
--- statement. Present only for DML statements INSERT, UPDATE or DELETE.
-gqrrNumDmlAffectedRows :: Lens' GetQueryResultsResponse (Maybe Int64)
-gqrrNumDmlAffectedRows
-  = lens _gqrrNumDmlAffectedRows
-      (\ s a -> s{_gqrrNumDmlAffectedRows = a})
-      . mapping _Coerce
-
--- | The total number of rows in the complete query result set, which can be
--- more than the number of rows in this single page of results. Present
--- only when the query completes successfully.
-gqrrTotalRows :: Lens' GetQueryResultsResponse (Maybe Word64)
-gqrrTotalRows
-  = lens _gqrrTotalRows
-      (\ s a -> s{_gqrrTotalRows = a})
-      . mapping _Coerce
-
--- | [Output-only] All errors and warnings encountered during the running of
--- the job. Errors here do not necessarily mean that the job has completed
--- or was unsuccessful.
-gqrrErrors :: Lens' GetQueryResultsResponse [ErrorProto]
-gqrrErrors
-  = lens _gqrrErrors (\ s a -> s{_gqrrErrors = a}) .
-      _Default
-      . _Coerce
-
--- | Whether the query has completed or not. If rows or totalRows are
--- present, this will always be true. If this is false, totalRows will not
--- be available.
-gqrrJobComplete :: Lens' GetQueryResultsResponse (Maybe Bool)
-gqrrJobComplete
-  = lens _gqrrJobComplete
-      (\ s a -> s{_gqrrJobComplete = a})
-
--- | Whether the query result was fetched from the query cache.
-gqrrCacheHit :: Lens' GetQueryResultsResponse (Maybe Bool)
-gqrrCacheHit
-  = lens _gqrrCacheHit (\ s a -> s{_gqrrCacheHit = a})
-
-instance FromJSON GetQueryResultsResponse where
-        parseJSON
-          = withObject "GetQueryResultsResponse"
-              (\ o ->
-                 GetQueryResultsResponse' <$>
-                   (o .:? "jobReference") <*> (o .:? "etag") <*>
-                     (o .:? "kind" .!= "bigquery#getQueryResultsResponse")
-                     <*> (o .:? "schema")
-                     <*> (o .:? "totalBytesProcessed")
-                     <*> (o .:? "rows" .!= mempty)
-                     <*> (o .:? "pageToken")
-                     <*> (o .:? "numDmlAffectedRows")
-                     <*> (o .:? "totalRows")
-                     <*> (o .:? "errors" .!= mempty)
-                     <*> (o .:? "jobComplete")
-                     <*> (o .:? "cacheHit"))
-
-instance ToJSON GetQueryResultsResponse where
-        toJSON GetQueryResultsResponse'{..}
-          = object
-              (catMaybes
-                 [("jobReference" .=) <$> _gqrrJobReference,
-                  ("etag" .=) <$> _gqrrEtag,
-                  Just ("kind" .= _gqrrKind),
-                  ("schema" .=) <$> _gqrrSchema,
-                  ("totalBytesProcessed" .=) <$>
-                    _gqrrTotalBytesProcessed,
-                  ("rows" .=) <$> _gqrrRows,
-                  ("pageToken" .=) <$> _gqrrPageToken,
-                  ("numDmlAffectedRows" .=) <$>
-                    _gqrrNumDmlAffectedRows,
-                  ("totalRows" .=) <$> _gqrrTotalRows,
-                  ("errors" .=) <$> _gqrrErrors,
-                  ("jobComplete" .=) <$> _gqrrJobComplete,
-                  ("cacheHit" .=) <$> _gqrrCacheHit])
-
---
--- /See:/ 'dataSetList' smart constructor.
-data DataSetList = DataSetList'
-    { _dslEtag          :: !(Maybe Text)
-    , _dslNextPageToken :: !(Maybe Text)
-    , _dslKind          :: !Text
-    , _dslDataSets      :: !(Maybe [DataSetListDataSetsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dslEtag'
---
--- * 'dslNextPageToken'
---
--- * 'dslKind'
---
--- * 'dslDataSets'
-dataSetList
-    :: DataSetList
-dataSetList =
-    DataSetList'
-    { _dslEtag = Nothing
-    , _dslNextPageToken = Nothing
-    , _dslKind = "bigquery#datasetList"
-    , _dslDataSets = Nothing
-    }
-
--- | A hash value of the results page. You can use this property to determine
--- if the page has changed since the last request.
-dslEtag :: Lens' DataSetList (Maybe Text)
-dslEtag = lens _dslEtag (\ s a -> s{_dslEtag = a})
-
--- | A token that can be used to request the next results page. This property
--- is omitted on the final results page.
-dslNextPageToken :: Lens' DataSetList (Maybe Text)
-dslNextPageToken
-  = lens _dslNextPageToken
-      (\ s a -> s{_dslNextPageToken = a})
-
--- | The list type. This property always returns the value
--- \"bigquery#datasetList\".
-dslKind :: Lens' DataSetList Text
-dslKind = lens _dslKind (\ s a -> s{_dslKind = a})
-
--- | An array of the dataset resources in the project. Each resource contains
--- basic information. For full information about a particular dataset
--- resource, use the Datasets: get method. This property is omitted when
--- there are no datasets in the project.
-dslDataSets :: Lens' DataSetList [DataSetListDataSetsItem]
-dslDataSets
-  = lens _dslDataSets (\ s a -> s{_dslDataSets = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON DataSetList where
-        parseJSON
-          = withObject "DataSetList"
-              (\ o ->
-                 DataSetList' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "bigquery#datasetList")
-                     <*> (o .:? "datasets" .!= mempty))
-
-instance ToJSON DataSetList where
-        toJSON DataSetList'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _dslEtag,
-                  ("nextPageToken" .=) <$> _dslNextPageToken,
-                  Just ("kind" .= _dslKind),
-                  ("datasets" .=) <$> _dslDataSets])
-
---
--- /See:/ 'queryRequest' smart constructor.
-data QueryRequest = QueryRequest'
-    { _qrUseQueryCache   :: !Bool
-    , _qrPreserveNulls   :: !(Maybe Bool)
-    , _qrKind            :: !Text
-    , _qrQueryParameters :: !(Maybe [QueryParameter])
-    , _qrQuery           :: !(Maybe Text)
-    , _qrParameterMode   :: !(Maybe Text)
-    , _qrTimeoutMs       :: !(Maybe (Textual Word32))
-    , _qrUseLegacySQL    :: !Bool
-    , _qrDryRun          :: !(Maybe Bool)
-    , _qrMaxResults      :: !(Maybe (Textual Word32))
-    , _qrDefaultDataSet  :: !(Maybe DataSetReference)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qrUseQueryCache'
---
--- * 'qrPreserveNulls'
---
--- * 'qrKind'
---
--- * 'qrQueryParameters'
---
--- * 'qrQuery'
---
--- * 'qrParameterMode'
---
--- * 'qrTimeoutMs'
---
--- * 'qrUseLegacySQL'
---
--- * 'qrDryRun'
---
--- * 'qrMaxResults'
---
--- * 'qrDefaultDataSet'
-queryRequest
-    :: QueryRequest
-queryRequest =
-    QueryRequest'
-    { _qrUseQueryCache = True
-    , _qrPreserveNulls = Nothing
-    , _qrKind = "bigquery#queryRequest"
-    , _qrQueryParameters = Nothing
-    , _qrQuery = Nothing
-    , _qrParameterMode = Nothing
-    , _qrTimeoutMs = Nothing
-    , _qrUseLegacySQL = True
-    , _qrDryRun = Nothing
-    , _qrMaxResults = Nothing
-    , _qrDefaultDataSet = Nothing
-    }
-
--- | [Optional] Whether to look for the result in the query cache. The query
--- cache is a best-effort cache that will be flushed whenever tables in the
--- query are modified. The default value is true.
-qrUseQueryCache :: Lens' QueryRequest Bool
-qrUseQueryCache
-  = lens _qrUseQueryCache
-      (\ s a -> s{_qrUseQueryCache = a})
-
--- | [Deprecated] This property is deprecated.
-qrPreserveNulls :: Lens' QueryRequest (Maybe Bool)
-qrPreserveNulls
-  = lens _qrPreserveNulls
-      (\ s a -> s{_qrPreserveNulls = a})
-
--- | The resource type of the request.
-qrKind :: Lens' QueryRequest Text
-qrKind = lens _qrKind (\ s a -> s{_qrKind = a})
-
--- | [Experimental] Query parameters for Standard SQL queries.
-qrQueryParameters :: Lens' QueryRequest [QueryParameter]
-qrQueryParameters
-  = lens _qrQueryParameters
-      (\ s a -> s{_qrQueryParameters = a})
-      . _Default
-      . _Coerce
-
--- | [Required] A query string, following the BigQuery query syntax, of the
--- query to execute. Example: \"SELECT count(f1) FROM
--- [myProjectId:myDatasetId.myTableId]\".
-qrQuery :: Lens' QueryRequest (Maybe Text)
-qrQuery = lens _qrQuery (\ s a -> s{_qrQuery = a})
-
--- | [Experimental] Standard SQL only. Set to POSITIONAL to use positional
--- (?) query parameters or to NAMED to use named (\'myparam) query
--- parameters in this query.
-qrParameterMode :: Lens' QueryRequest (Maybe Text)
-qrParameterMode
-  = lens _qrParameterMode
-      (\ s a -> s{_qrParameterMode = a})
-
--- | [Optional] How long to wait for the query to complete, in milliseconds,
--- before the request times out and returns. Note that this is only a
--- timeout for the request, not the query. If the query takes longer to run
--- than the timeout value, the call returns without any results and with
--- the \'jobComplete\' flag set to false. You can call GetQueryResults() to
--- wait for the query to complete and read the results. The default value
--- is 10000 milliseconds (10 seconds).
-qrTimeoutMs :: Lens' QueryRequest (Maybe Word32)
-qrTimeoutMs
-  = lens _qrTimeoutMs (\ s a -> s{_qrTimeoutMs = a}) .
-      mapping _Coerce
-
--- | Specifies whether to use BigQuery\'s legacy SQL dialect for this query.
--- The default value is true. If set to false, the query will use
--- BigQuery\'s standard SQL:
--- https:\/\/cloud.google.com\/bigquery\/sql-reference\/ When useLegacySql
--- is set to false, the values of allowLargeResults and flattenResults are
--- ignored; query will be run as if allowLargeResults is true and
--- flattenResults is false.
-qrUseLegacySQL :: Lens' QueryRequest Bool
-qrUseLegacySQL
-  = lens _qrUseLegacySQL
-      (\ s a -> s{_qrUseLegacySQL = a})
-
--- | [Optional] If set to true, BigQuery doesn\'t run the job. Instead, if
--- the query is valid, BigQuery returns statistics about the job such as
--- how many bytes would be processed. If the query is invalid, an error
--- returns. The default value is false.
-qrDryRun :: Lens' QueryRequest (Maybe Bool)
-qrDryRun = lens _qrDryRun (\ s a -> s{_qrDryRun = a})
-
--- | [Optional] The maximum number of rows of data to return per page of
--- results. Setting this flag to a small value such as 1000 and then paging
--- through results might improve reliability when the query result set is
--- large. In addition to this limit, responses are also limited to 10 MB.
--- By default, there is no maximum row count, and only the byte limit
--- applies.
-qrMaxResults :: Lens' QueryRequest (Maybe Word32)
-qrMaxResults
-  = lens _qrMaxResults (\ s a -> s{_qrMaxResults = a})
-      . mapping _Coerce
-
--- | [Optional] Specifies the default datasetId and projectId to assume for
--- any unqualified table names in the query. If not set, all table names in
--- the query string must be qualified in the format \'datasetId.tableId\'.
-qrDefaultDataSet :: Lens' QueryRequest (Maybe DataSetReference)
-qrDefaultDataSet
-  = lens _qrDefaultDataSet
-      (\ s a -> s{_qrDefaultDataSet = a})
-
-instance FromJSON QueryRequest where
-        parseJSON
-          = withObject "QueryRequest"
-              (\ o ->
-                 QueryRequest' <$>
-                   (o .:? "useQueryCache" .!= True) <*>
-                     (o .:? "preserveNulls")
-                     <*> (o .:? "kind" .!= "bigquery#queryRequest")
-                     <*> (o .:? "queryParameters" .!= mempty)
-                     <*> (o .:? "query")
-                     <*> (o .:? "parameterMode")
-                     <*> (o .:? "timeoutMs")
-                     <*> (o .:? "useLegacySql" .!= True)
-                     <*> (o .:? "dryRun")
-                     <*> (o .:? "maxResults")
-                     <*> (o .:? "defaultDataset"))
-
-instance ToJSON QueryRequest where
-        toJSON QueryRequest'{..}
-          = object
-              (catMaybes
-                 [Just ("useQueryCache" .= _qrUseQueryCache),
-                  ("preserveNulls" .=) <$> _qrPreserveNulls,
-                  Just ("kind" .= _qrKind),
-                  ("queryParameters" .=) <$> _qrQueryParameters,
-                  ("query" .=) <$> _qrQuery,
-                  ("parameterMode" .=) <$> _qrParameterMode,
-                  ("timeoutMs" .=) <$> _qrTimeoutMs,
-                  Just ("useLegacySql" .= _qrUseLegacySQL),
-                  ("dryRun" .=) <$> _qrDryRun,
-                  ("maxResults" .=) <$> _qrMaxResults,
-                  ("defaultDataset" .=) <$> _qrDefaultDataSet])
-
---
--- /See:/ 'queryParameter' smart constructor.
-data QueryParameter = QueryParameter'
-    { _qpParameterValue :: !(Maybe QueryParameterValue)
-    , _qpParameterType  :: !(Maybe QueryParameterType)
-    , _qpName           :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryParameter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qpParameterValue'
---
--- * 'qpParameterType'
---
--- * 'qpName'
-queryParameter
-    :: QueryParameter
-queryParameter =
-    QueryParameter'
-    { _qpParameterValue = Nothing
-    , _qpParameterType = Nothing
-    , _qpName = Nothing
-    }
-
--- | [Required] The value of this parameter.
-qpParameterValue :: Lens' QueryParameter (Maybe QueryParameterValue)
-qpParameterValue
-  = lens _qpParameterValue
-      (\ s a -> s{_qpParameterValue = a})
-
--- | [Required] The type of this parameter.
-qpParameterType :: Lens' QueryParameter (Maybe QueryParameterType)
-qpParameterType
-  = lens _qpParameterType
-      (\ s a -> s{_qpParameterType = a})
-
--- | [Optional] If unset, this is a positional parameter. Otherwise, should
--- be unique within a query.
-qpName :: Lens' QueryParameter (Maybe Text)
-qpName = lens _qpName (\ s a -> s{_qpName = a})
-
-instance FromJSON QueryParameter where
-        parseJSON
-          = withObject "QueryParameter"
-              (\ o ->
-                 QueryParameter' <$>
-                   (o .:? "parameterValue") <*> (o .:? "parameterType")
-                     <*> (o .:? "name"))
-
-instance ToJSON QueryParameter where
-        toJSON QueryParameter'{..}
-          = object
-              (catMaybes
-                 [("parameterValue" .=) <$> _qpParameterValue,
-                  ("parameterType" .=) <$> _qpParameterType,
-                  ("name" .=) <$> _qpName])
-
---
--- /See:/ 'jobStatistics4' smart constructor.
-newtype JobStatistics4 = JobStatistics4'
-    { _jsDestinationURIFileCounts :: Maybe [Textual Int64]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobStatistics4' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jsDestinationURIFileCounts'
-jobStatistics4
-    :: JobStatistics4
-jobStatistics4 =
-    JobStatistics4'
-    { _jsDestinationURIFileCounts = Nothing
-    }
-
--- | [Output-only] Number of files per destination URI or URI pattern
--- specified in the extract configuration. These values will be in the same
--- order as the URIs specified in the \'destinationUris\' field.
-jsDestinationURIFileCounts :: Lens' JobStatistics4 [Int64]
-jsDestinationURIFileCounts
-  = lens _jsDestinationURIFileCounts
-      (\ s a -> s{_jsDestinationURIFileCounts = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON JobStatistics4 where
-        parseJSON
-          = withObject "JobStatistics4"
-              (\ o ->
-                 JobStatistics4' <$>
-                   (o .:? "destinationUriFileCounts" .!= mempty))
-
-instance ToJSON JobStatistics4 where
-        toJSON JobStatistics4'{..}
-          = object
-              (catMaybes
-                 [("destinationUriFileCounts" .=) <$>
-                    _jsDestinationURIFileCounts])
-
---
--- /See:/ 'projectReference' smart constructor.
-newtype ProjectReference = ProjectReference'
-    { _prProjectId :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProjectReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prProjectId'
-projectReference
-    :: ProjectReference
-projectReference =
-    ProjectReference'
-    { _prProjectId = Nothing
-    }
-
--- | [Required] ID of the project. Can be either the numeric ID or the
--- assigned ID of the project.
-prProjectId :: Lens' ProjectReference (Maybe Text)
-prProjectId
-  = lens _prProjectId (\ s a -> s{_prProjectId = a})
-
-instance FromJSON ProjectReference where
-        parseJSON
-          = withObject "ProjectReference"
-              (\ o -> ProjectReference' <$> (o .:? "projectId"))
-
-instance ToJSON ProjectReference where
-        toJSON ProjectReference'{..}
-          = object
-              (catMaybes [("projectId" .=) <$> _prProjectId])
-
---
--- /See:/ 'explainQueryStage' smart constructor.
-data ExplainQueryStage = ExplainQueryStage'
-    { _eqsStatus          :: !(Maybe Text)
-    , _eqsWaitRatioMax    :: !(Maybe (Textual Double))
-    , _eqsRecordsWritten  :: !(Maybe (Textual Int64))
-    , _eqsSteps           :: !(Maybe [ExplainQueryStep])
-    , _eqsWriteRatioAvg   :: !(Maybe (Textual Double))
-    , _eqsRecordsRead     :: !(Maybe (Textual Int64))
-    , _eqsComputeRatioAvg :: !(Maybe (Textual Double))
-    , _eqsName            :: !(Maybe Text)
-    , _eqsReadRatioMax    :: !(Maybe (Textual Double))
-    , _eqsWaitRatioAvg    :: !(Maybe (Textual Double))
-    , _eqsId              :: !(Maybe (Textual Int64))
-    , _eqsComputeRatioMax :: !(Maybe (Textual Double))
-    , _eqsWriteRatioMax   :: !(Maybe (Textual Double))
-    , _eqsReadRatioAvg    :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExplainQueryStage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eqsStatus'
---
--- * 'eqsWaitRatioMax'
---
--- * 'eqsRecordsWritten'
---
--- * 'eqsSteps'
---
--- * 'eqsWriteRatioAvg'
---
--- * 'eqsRecordsRead'
---
--- * 'eqsComputeRatioAvg'
---
--- * 'eqsName'
---
--- * 'eqsReadRatioMax'
---
--- * 'eqsWaitRatioAvg'
---
--- * 'eqsId'
---
--- * 'eqsComputeRatioMax'
---
--- * 'eqsWriteRatioMax'
---
--- * 'eqsReadRatioAvg'
-explainQueryStage
-    :: ExplainQueryStage
-explainQueryStage =
-    ExplainQueryStage'
-    { _eqsStatus = Nothing
-    , _eqsWaitRatioMax = Nothing
-    , _eqsRecordsWritten = Nothing
-    , _eqsSteps = Nothing
-    , _eqsWriteRatioAvg = Nothing
-    , _eqsRecordsRead = Nothing
-    , _eqsComputeRatioAvg = Nothing
-    , _eqsName = Nothing
-    , _eqsReadRatioMax = Nothing
-    , _eqsWaitRatioAvg = Nothing
-    , _eqsId = Nothing
-    , _eqsComputeRatioMax = Nothing
-    , _eqsWriteRatioMax = Nothing
-    , _eqsReadRatioAvg = Nothing
-    }
-
--- | Current status for the stage.
-eqsStatus :: Lens' ExplainQueryStage (Maybe Text)
-eqsStatus
-  = lens _eqsStatus (\ s a -> s{_eqsStatus = a})
-
--- | Relative amount of time the slowest shard spent waiting to be scheduled.
-eqsWaitRatioMax :: Lens' ExplainQueryStage (Maybe Double)
-eqsWaitRatioMax
-  = lens _eqsWaitRatioMax
-      (\ s a -> s{_eqsWaitRatioMax = a})
-      . mapping _Coerce
-
--- | Number of records written by the stage.
-eqsRecordsWritten :: Lens' ExplainQueryStage (Maybe Int64)
-eqsRecordsWritten
-  = lens _eqsRecordsWritten
-      (\ s a -> s{_eqsRecordsWritten = a})
-      . mapping _Coerce
-
--- | List of operations within the stage in dependency order (approximately
--- chronological).
-eqsSteps :: Lens' ExplainQueryStage [ExplainQueryStep]
-eqsSteps
-  = lens _eqsSteps (\ s a -> s{_eqsSteps = a}) .
-      _Default
-      . _Coerce
-
--- | Relative amount of time the average shard spent on writing output.
-eqsWriteRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
-eqsWriteRatioAvg
-  = lens _eqsWriteRatioAvg
-      (\ s a -> s{_eqsWriteRatioAvg = a})
-      . mapping _Coerce
-
--- | Number of records read into the stage.
-eqsRecordsRead :: Lens' ExplainQueryStage (Maybe Int64)
-eqsRecordsRead
-  = lens _eqsRecordsRead
-      (\ s a -> s{_eqsRecordsRead = a})
-      . mapping _Coerce
-
--- | Relative amount of time the average shard spent on CPU-bound tasks.
-eqsComputeRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
-eqsComputeRatioAvg
-  = lens _eqsComputeRatioAvg
-      (\ s a -> s{_eqsComputeRatioAvg = a})
-      . mapping _Coerce
-
--- | Human-readable name for stage.
-eqsName :: Lens' ExplainQueryStage (Maybe Text)
-eqsName = lens _eqsName (\ s a -> s{_eqsName = a})
-
--- | Relative amount of time the slowest shard spent reading input.
-eqsReadRatioMax :: Lens' ExplainQueryStage (Maybe Double)
-eqsReadRatioMax
-  = lens _eqsReadRatioMax
-      (\ s a -> s{_eqsReadRatioMax = a})
-      . mapping _Coerce
-
--- | Relative amount of time the average shard spent waiting to be scheduled.
-eqsWaitRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
-eqsWaitRatioAvg
-  = lens _eqsWaitRatioAvg
-      (\ s a -> s{_eqsWaitRatioAvg = a})
-      . mapping _Coerce
-
--- | Unique ID for stage within plan.
-eqsId :: Lens' ExplainQueryStage (Maybe Int64)
-eqsId
-  = lens _eqsId (\ s a -> s{_eqsId = a}) .
-      mapping _Coerce
-
--- | Relative amount of time the slowest shard spent on CPU-bound tasks.
-eqsComputeRatioMax :: Lens' ExplainQueryStage (Maybe Double)
-eqsComputeRatioMax
-  = lens _eqsComputeRatioMax
-      (\ s a -> s{_eqsComputeRatioMax = a})
-      . mapping _Coerce
-
--- | Relative amount of time the slowest shard spent on writing output.
-eqsWriteRatioMax :: Lens' ExplainQueryStage (Maybe Double)
-eqsWriteRatioMax
-  = lens _eqsWriteRatioMax
-      (\ s a -> s{_eqsWriteRatioMax = a})
-      . mapping _Coerce
-
--- | Relative amount of time the average shard spent reading input.
-eqsReadRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
-eqsReadRatioAvg
-  = lens _eqsReadRatioAvg
-      (\ s a -> s{_eqsReadRatioAvg = a})
-      . mapping _Coerce
-
-instance FromJSON ExplainQueryStage where
-        parseJSON
-          = withObject "ExplainQueryStage"
-              (\ o ->
-                 ExplainQueryStage' <$>
-                   (o .:? "status") <*> (o .:? "waitRatioMax") <*>
-                     (o .:? "recordsWritten")
-                     <*> (o .:? "steps" .!= mempty)
-                     <*> (o .:? "writeRatioAvg")
-                     <*> (o .:? "recordsRead")
-                     <*> (o .:? "computeRatioAvg")
-                     <*> (o .:? "name")
-                     <*> (o .:? "readRatioMax")
-                     <*> (o .:? "waitRatioAvg")
-                     <*> (o .:? "id")
-                     <*> (o .:? "computeRatioMax")
-                     <*> (o .:? "writeRatioMax")
-                     <*> (o .:? "readRatioAvg"))
-
-instance ToJSON ExplainQueryStage where
-        toJSON ExplainQueryStage'{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _eqsStatus,
-                  ("waitRatioMax" .=) <$> _eqsWaitRatioMax,
-                  ("recordsWritten" .=) <$> _eqsRecordsWritten,
-                  ("steps" .=) <$> _eqsSteps,
-                  ("writeRatioAvg" .=) <$> _eqsWriteRatioAvg,
-                  ("recordsRead" .=) <$> _eqsRecordsRead,
-                  ("computeRatioAvg" .=) <$> _eqsComputeRatioAvg,
-                  ("name" .=) <$> _eqsName,
-                  ("readRatioMax" .=) <$> _eqsReadRatioMax,
-                  ("waitRatioAvg" .=) <$> _eqsWaitRatioAvg,
-                  ("id" .=) <$> _eqsId,
-                  ("computeRatioMax" .=) <$> _eqsComputeRatioMax,
-                  ("writeRatioMax" .=) <$> _eqsWriteRatioMax,
-                  ("readRatioAvg" .=) <$> _eqsReadRatioAvg])
-
---
--- /See:/ 'jobConfigurationLoad' smart constructor.
-data JobConfigurationLoad = JobConfigurationLoad'
-    { _jclSkipLeadingRows     :: !(Maybe (Textual Int32))
-    , _jclProjectionFields    :: !(Maybe [Text])
-    , _jclDestinationTable    :: !(Maybe TableReference)
-    , _jclWriteDisPosition    :: !(Maybe Text)
-    , _jclAllowJaggedRows     :: !(Maybe Bool)
-    , _jclSchemaInline        :: !(Maybe Text)
-    , _jclIgnoreUnknownValues :: !(Maybe Bool)
-    , _jclSchemaUpdateOptions :: !(Maybe [Text])
-    , _jclCreateDisPosition   :: !(Maybe Text)
-    , _jclSchemaInlineFormat  :: !(Maybe Text)
-    , _jclAllowQuotedNewlines :: !(Maybe Bool)
-    , _jclSourceFormat        :: !(Maybe Text)
-    , _jclSchema              :: !(Maybe TableSchema)
-    , _jclQuote               :: !(Maybe Text)
-    , _jclMaxBadRecords       :: !(Maybe (Textual Int32))
-    , _jclAutodetect          :: !(Maybe Bool)
-    , _jclSourceURIs          :: !(Maybe [Text])
-    , _jclEncoding            :: !(Maybe Text)
-    , _jclFieldDelimiter      :: !(Maybe Text)
-    , _jclNullMarker          :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfigurationLoad' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jclSkipLeadingRows'
---
--- * 'jclProjectionFields'
---
--- * 'jclDestinationTable'
---
--- * 'jclWriteDisPosition'
---
--- * 'jclAllowJaggedRows'
---
--- * 'jclSchemaInline'
---
--- * 'jclIgnoreUnknownValues'
---
--- * 'jclSchemaUpdateOptions'
---
--- * 'jclCreateDisPosition'
---
--- * 'jclSchemaInlineFormat'
---
--- * 'jclAllowQuotedNewlines'
---
--- * 'jclSourceFormat'
---
--- * 'jclSchema'
---
--- * 'jclQuote'
---
--- * 'jclMaxBadRecords'
---
--- * 'jclAutodetect'
---
--- * 'jclSourceURIs'
---
--- * 'jclEncoding'
---
--- * 'jclFieldDelimiter'
---
--- * 'jclNullMarker'
-jobConfigurationLoad
-    :: JobConfigurationLoad
-jobConfigurationLoad =
-    JobConfigurationLoad'
-    { _jclSkipLeadingRows = Nothing
-    , _jclProjectionFields = Nothing
-    , _jclDestinationTable = Nothing
-    , _jclWriteDisPosition = Nothing
-    , _jclAllowJaggedRows = Nothing
-    , _jclSchemaInline = Nothing
-    , _jclIgnoreUnknownValues = Nothing
-    , _jclSchemaUpdateOptions = Nothing
-    , _jclCreateDisPosition = Nothing
-    , _jclSchemaInlineFormat = Nothing
-    , _jclAllowQuotedNewlines = Nothing
-    , _jclSourceFormat = Nothing
-    , _jclSchema = Nothing
-    , _jclQuote = Nothing
-    , _jclMaxBadRecords = Nothing
-    , _jclAutodetect = Nothing
-    , _jclSourceURIs = Nothing
-    , _jclEncoding = Nothing
-    , _jclFieldDelimiter = Nothing
-    , _jclNullMarker = Nothing
-    }
-
--- | [Optional] The number of rows at the top of a CSV file that BigQuery
--- will skip when loading the data. The default value is 0. This property
--- is useful if you have header rows in the file that should be skipped.
-jclSkipLeadingRows :: Lens' JobConfigurationLoad (Maybe Int32)
-jclSkipLeadingRows
-  = lens _jclSkipLeadingRows
-      (\ s a -> s{_jclSkipLeadingRows = a})
-      . mapping _Coerce
-
--- | [Experimental] If sourceFormat is set to \"DATASTORE_BACKUP\", indicates
--- which entity properties to load into BigQuery from a Cloud Datastore
--- backup. Property names are case sensitive and must be top-level
--- properties. If no properties are specified, BigQuery loads all
--- properties. If any named property isn\'t found in the Cloud Datastore
--- backup, an invalid error is returned in the job result.
-jclProjectionFields :: Lens' JobConfigurationLoad [Text]
-jclProjectionFields
-  = lens _jclProjectionFields
-      (\ s a -> s{_jclProjectionFields = a})
-      . _Default
-      . _Coerce
-
--- | [Required] The destination table to load the data into.
-jclDestinationTable :: Lens' JobConfigurationLoad (Maybe TableReference)
-jclDestinationTable
-  = lens _jclDestinationTable
-      (\ s a -> s{_jclDestinationTable = a})
-
--- | [Optional] Specifies the action that occurs if the destination table
--- already exists. The following values are supported: WRITE_TRUNCATE: If
--- the table already exists, BigQuery overwrites the table data.
--- WRITE_APPEND: If the table already exists, BigQuery appends the data to
--- the table. WRITE_EMPTY: If the table already exists and contains data, a
--- \'duplicate\' error is returned in the job result. The default value is
--- WRITE_APPEND. Each action is atomic and only occurs if BigQuery is able
--- to complete the job successfully. Creation, truncation and append
--- actions occur as one atomic update upon job completion.
-jclWriteDisPosition :: Lens' JobConfigurationLoad (Maybe Text)
-jclWriteDisPosition
-  = lens _jclWriteDisPosition
-      (\ s a -> s{_jclWriteDisPosition = a})
-
--- | [Optional] Accept rows that are missing trailing optional columns. The
--- missing values are treated as nulls. If false, records with missing
--- trailing columns are treated as bad records, and if there are too many
--- bad records, an invalid error is returned in the job result. The default
--- value is false. Only applicable to CSV, ignored for other formats.
-jclAllowJaggedRows :: Lens' JobConfigurationLoad (Maybe Bool)
-jclAllowJaggedRows
-  = lens _jclAllowJaggedRows
-      (\ s a -> s{_jclAllowJaggedRows = a})
-
--- | [Deprecated] The inline schema. For CSV schemas, specify as
--- \"Field1:Type1[,Field2:Type2]*\". For example, \"foo:STRING,
--- bar:INTEGER, baz:FLOAT\".
-jclSchemaInline :: Lens' JobConfigurationLoad (Maybe Text)
-jclSchemaInline
-  = lens _jclSchemaInline
-      (\ s a -> s{_jclSchemaInline = a})
-
--- | [Optional] Indicates if BigQuery should allow extra values that are not
--- represented in the table schema. If true, the extra values are ignored.
--- If false, records with extra columns are treated as bad records, and if
--- there are too many bad records, an invalid error is returned in the job
--- result. The default value is false. The sourceFormat property determines
--- what BigQuery treats as an extra value: CSV: Trailing columns JSON:
--- Named values that don\'t match any column names
-jclIgnoreUnknownValues :: Lens' JobConfigurationLoad (Maybe Bool)
-jclIgnoreUnknownValues
-  = lens _jclIgnoreUnknownValues
-      (\ s a -> s{_jclIgnoreUnknownValues = a})
-
--- | [Experimental] Allows the schema of the desitination table to be updated
--- as a side effect of the load job. Schema update options are supported in
--- two cases: when writeDisposition is WRITE_APPEND; when writeDisposition
--- is WRITE_TRUNCATE and the destination table is a partition of a table,
--- specified by partition decorators. For normal tables, WRITE_TRUNCATE
--- will always overwrite the schema. One or more of the following values
--- are specified: ALLOW_FIELD_ADDITION: allow adding a nullable field to
--- the schema. ALLOW_FIELD_RELAXATION: allow relaxing a required field in
--- the original schema to nullable.
-jclSchemaUpdateOptions :: Lens' JobConfigurationLoad [Text]
-jclSchemaUpdateOptions
-  = lens _jclSchemaUpdateOptions
-      (\ s a -> s{_jclSchemaUpdateOptions = a})
-      . _Default
-      . _Coerce
-
--- | [Optional] Specifies whether the job is allowed to create new tables.
--- The following values are supported: CREATE_IF_NEEDED: If the table does
--- not exist, BigQuery creates the table. CREATE_NEVER: The table must
--- already exist. If it does not, a \'notFound\' error is returned in the
--- job result. The default value is CREATE_IF_NEEDED. Creation, truncation
--- and append actions occur as one atomic update upon job completion.
-jclCreateDisPosition :: Lens' JobConfigurationLoad (Maybe Text)
-jclCreateDisPosition
-  = lens _jclCreateDisPosition
-      (\ s a -> s{_jclCreateDisPosition = a})
-
--- | [Deprecated] The format of the schemaInline property.
-jclSchemaInlineFormat :: Lens' JobConfigurationLoad (Maybe Text)
-jclSchemaInlineFormat
-  = lens _jclSchemaInlineFormat
-      (\ s a -> s{_jclSchemaInlineFormat = a})
-
--- | Indicates if BigQuery should allow quoted data sections that contain
--- newline characters in a CSV file. The default value is false.
-jclAllowQuotedNewlines :: Lens' JobConfigurationLoad (Maybe Bool)
-jclAllowQuotedNewlines
-  = lens _jclAllowQuotedNewlines
-      (\ s a -> s{_jclAllowQuotedNewlines = a})
-
--- | [Optional] The format of the data files. For CSV files, specify \"CSV\".
--- For datastore backups, specify \"DATASTORE_BACKUP\". For
--- newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\". For Avro,
--- specify \"AVRO\". The default value is CSV.
-jclSourceFormat :: Lens' JobConfigurationLoad (Maybe Text)
-jclSourceFormat
-  = lens _jclSourceFormat
-      (\ s a -> s{_jclSourceFormat = a})
-
--- | [Optional] The schema for the destination table. The schema can be
--- omitted if the destination table already exists, or if you\'re loading
--- data from Google Cloud Datastore.
-jclSchema :: Lens' JobConfigurationLoad (Maybe TableSchema)
-jclSchema
-  = lens _jclSchema (\ s a -> s{_jclSchema = a})
-
--- | [Optional] The value that is used to quote data sections in a CSV file.
--- BigQuery converts the string to ISO-8859-1 encoding, and then uses the
--- first byte of the encoded string to split the data in its raw, binary
--- state. The default value is a double-quote (\'\"\'). If your data does
--- not contain quoted sections, set the property value to an empty string.
--- If your data contains quoted newline characters, you must also set the
--- allowQuotedNewlines property to true.
-jclQuote :: Lens' JobConfigurationLoad (Maybe Text)
-jclQuote = lens _jclQuote (\ s a -> s{_jclQuote = a})
-
--- | [Optional] The maximum number of bad records that BigQuery can ignore
--- when running the job. If the number of bad records exceeds this value,
--- an invalid error is returned in the job result. The default value is 0,
--- which requires that all records are valid.
-jclMaxBadRecords :: Lens' JobConfigurationLoad (Maybe Int32)
-jclMaxBadRecords
-  = lens _jclMaxBadRecords
-      (\ s a -> s{_jclMaxBadRecords = a})
-      . mapping _Coerce
-
--- | [Experimental] Indicates if we should automatically infer the options
--- and schema for CSV and JSON sources.
-jclAutodetect :: Lens' JobConfigurationLoad (Maybe Bool)
-jclAutodetect
-  = lens _jclAutodetect
-      (\ s a -> s{_jclAutodetect = a})
-
--- | [Required] The fully-qualified URIs that point to your data in Google
--- Cloud Storage. Each URI can contain one \'*\' wildcard character and it
--- must come after the \'bucket\' name.
-jclSourceURIs :: Lens' JobConfigurationLoad [Text]
-jclSourceURIs
-  = lens _jclSourceURIs
-      (\ s a -> s{_jclSourceURIs = a})
-      . _Default
-      . _Coerce
-
--- | [Optional] The character encoding of the data. The supported values are
--- UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the
--- data after the raw, binary data has been split using the values of the
--- quote and fieldDelimiter properties.
-jclEncoding :: Lens' JobConfigurationLoad (Maybe Text)
-jclEncoding
-  = lens _jclEncoding (\ s a -> s{_jclEncoding = a})
-
--- | [Optional] The separator for fields in a CSV file. The separator can be
--- any ISO-8859-1 single-byte character. To use a character in the range
--- 128-255, you must encode the character as UTF8. BigQuery converts the
--- string to ISO-8859-1 encoding, and then uses the first byte of the
--- encoded string to split the data in its raw, binary state. BigQuery also
--- supports the escape sequence \"\\t\" to specify a tab separator. The
--- default value is a comma (\',\').
-jclFieldDelimiter :: Lens' JobConfigurationLoad (Maybe Text)
-jclFieldDelimiter
-  = lens _jclFieldDelimiter
-      (\ s a -> s{_jclFieldDelimiter = a})
-
--- | [Optional] Specifies a string that represents a null value in a CSV
--- file. For example, if you specify \"\\N\", BigQuery interprets \"\\N\"
--- as a null value when loading a CSV file. The default value is the empty
--- string. If you set this property to a custom value, BigQuery still
--- interprets the empty string as a null value for all data types except
--- for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets
--- the empty string as an empty value.
-jclNullMarker :: Lens' JobConfigurationLoad (Maybe Text)
-jclNullMarker
-  = lens _jclNullMarker
-      (\ s a -> s{_jclNullMarker = a})
-
-instance FromJSON JobConfigurationLoad where
-        parseJSON
-          = withObject "JobConfigurationLoad"
-              (\ o ->
-                 JobConfigurationLoad' <$>
-                   (o .:? "skipLeadingRows") <*>
-                     (o .:? "projectionFields" .!= mempty)
-                     <*> (o .:? "destinationTable")
-                     <*> (o .:? "writeDisposition")
-                     <*> (o .:? "allowJaggedRows")
-                     <*> (o .:? "schemaInline")
-                     <*> (o .:? "ignoreUnknownValues")
-                     <*> (o .:? "schemaUpdateOptions" .!= mempty)
-                     <*> (o .:? "createDisposition")
-                     <*> (o .:? "schemaInlineFormat")
-                     <*> (o .:? "allowQuotedNewlines")
-                     <*> (o .:? "sourceFormat")
-                     <*> (o .:? "schema")
-                     <*> (o .:? "quote")
-                     <*> (o .:? "maxBadRecords")
-                     <*> (o .:? "autodetect")
-                     <*> (o .:? "sourceUris" .!= mempty)
-                     <*> (o .:? "encoding")
-                     <*> (o .:? "fieldDelimiter")
-                     <*> (o .:? "nullMarker"))
-
-instance ToJSON JobConfigurationLoad where
-        toJSON JobConfigurationLoad'{..}
-          = object
-              (catMaybes
-                 [("skipLeadingRows" .=) <$> _jclSkipLeadingRows,
-                  ("projectionFields" .=) <$> _jclProjectionFields,
-                  ("destinationTable" .=) <$> _jclDestinationTable,
-                  ("writeDisposition" .=) <$> _jclWriteDisPosition,
-                  ("allowJaggedRows" .=) <$> _jclAllowJaggedRows,
-                  ("schemaInline" .=) <$> _jclSchemaInline,
-                  ("ignoreUnknownValues" .=) <$>
-                    _jclIgnoreUnknownValues,
-                  ("schemaUpdateOptions" .=) <$>
-                    _jclSchemaUpdateOptions,
-                  ("createDisposition" .=) <$> _jclCreateDisPosition,
-                  ("schemaInlineFormat" .=) <$> _jclSchemaInlineFormat,
-                  ("allowQuotedNewlines" .=) <$>
-                    _jclAllowQuotedNewlines,
-                  ("sourceFormat" .=) <$> _jclSourceFormat,
-                  ("schema" .=) <$> _jclSchema,
-                  ("quote" .=) <$> _jclQuote,
-                  ("maxBadRecords" .=) <$> _jclMaxBadRecords,
-                  ("autodetect" .=) <$> _jclAutodetect,
-                  ("sourceUris" .=) <$> _jclSourceURIs,
-                  ("encoding" .=) <$> _jclEncoding,
-                  ("fieldDelimiter" .=) <$> _jclFieldDelimiter,
-                  ("nullMarker" .=) <$> _jclNullMarker])
-
---
--- /See:/ 'dataSetReference' smart constructor.
-data DataSetReference = DataSetReference'
-    { _dsrDataSetId :: !(Maybe Text)
-    , _dsrProjectId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrDataSetId'
---
--- * 'dsrProjectId'
-dataSetReference
-    :: DataSetReference
-dataSetReference =
-    DataSetReference'
-    { _dsrDataSetId = Nothing
-    , _dsrProjectId = Nothing
-    }
-
--- | [Required] A unique ID for this dataset, without the project name. The
--- ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores
--- (_). The maximum length is 1,024 characters.
-dsrDataSetId :: Lens' DataSetReference (Maybe Text)
-dsrDataSetId
-  = lens _dsrDataSetId (\ s a -> s{_dsrDataSetId = a})
-
--- | [Optional] The ID of the project containing this dataset.
-dsrProjectId :: Lens' DataSetReference (Maybe Text)
-dsrProjectId
-  = lens _dsrProjectId (\ s a -> s{_dsrProjectId = a})
-
-instance FromJSON DataSetReference where
-        parseJSON
-          = withObject "DataSetReference"
-              (\ o ->
-                 DataSetReference' <$>
-                   (o .:? "datasetId") <*> (o .:? "projectId"))
-
-instance ToJSON DataSetReference where
-        toJSON DataSetReference'{..}
-          = object
-              (catMaybes
-                 [("datasetId" .=) <$> _dsrDataSetId,
-                  ("projectId" .=) <$> _dsrProjectId])
-
---
--- /See:/ 'tableDataInsertAllRequest' smart constructor.
-data TableDataInsertAllRequest = TableDataInsertAllRequest'
-    { _tdiarKind                :: !Text
-    , _tdiarIgnoreUnknownValues :: !(Maybe Bool)
-    , _tdiarRows                :: !(Maybe [TableDataInsertAllRequestRowsItem])
-    , _tdiarTemplateSuffix      :: !(Maybe Text)
-    , _tdiarSkipInvalidRows     :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableDataInsertAllRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdiarKind'
---
--- * 'tdiarIgnoreUnknownValues'
---
--- * 'tdiarRows'
---
--- * 'tdiarTemplateSuffix'
---
--- * 'tdiarSkipInvalidRows'
-tableDataInsertAllRequest
-    :: TableDataInsertAllRequest
-tableDataInsertAllRequest =
-    TableDataInsertAllRequest'
-    { _tdiarKind = "bigquery#tableDataInsertAllRequest"
-    , _tdiarIgnoreUnknownValues = Nothing
-    , _tdiarRows = Nothing
-    , _tdiarTemplateSuffix = Nothing
-    , _tdiarSkipInvalidRows = Nothing
-    }
-
--- | The resource type of the response.
-tdiarKind :: Lens' TableDataInsertAllRequest Text
-tdiarKind
-  = lens _tdiarKind (\ s a -> s{_tdiarKind = a})
-
--- | [Optional] Accept rows that contain values that do not match the schema.
--- The unknown values are ignored. Default is false, which treats unknown
--- values as errors.
-tdiarIgnoreUnknownValues :: Lens' TableDataInsertAllRequest (Maybe Bool)
-tdiarIgnoreUnknownValues
-  = lens _tdiarIgnoreUnknownValues
-      (\ s a -> s{_tdiarIgnoreUnknownValues = a})
-
--- | The rows to insert.
-tdiarRows :: Lens' TableDataInsertAllRequest [TableDataInsertAllRequestRowsItem]
-tdiarRows
-  = lens _tdiarRows (\ s a -> s{_tdiarRows = a}) .
-      _Default
-      . _Coerce
-
--- | [Experimental] If specified, treats the destination table as a base
--- template, and inserts the rows into an instance table named
--- \"{destination}{templateSuffix}\". BigQuery will manage creation of the
--- instance table, using the schema of the base template table. See
--- https:\/\/cloud.google.com\/bigquery\/streaming-data-into-bigquery#template-tables
--- for considerations when working with templates tables.
-tdiarTemplateSuffix :: Lens' TableDataInsertAllRequest (Maybe Text)
-tdiarTemplateSuffix
-  = lens _tdiarTemplateSuffix
-      (\ s a -> s{_tdiarTemplateSuffix = a})
-
--- | [Optional] Insert all valid rows of a request, even if invalid rows
--- exist. The default value is false, which causes the entire request to
--- fail if any invalid rows exist.
-tdiarSkipInvalidRows :: Lens' TableDataInsertAllRequest (Maybe Bool)
-tdiarSkipInvalidRows
-  = lens _tdiarSkipInvalidRows
-      (\ s a -> s{_tdiarSkipInvalidRows = a})
-
-instance FromJSON TableDataInsertAllRequest where
-        parseJSON
-          = withObject "TableDataInsertAllRequest"
-              (\ o ->
-                 TableDataInsertAllRequest' <$>
-                   (o .:? "kind" .!=
-                      "bigquery#tableDataInsertAllRequest")
-                     <*> (o .:? "ignoreUnknownValues")
-                     <*> (o .:? "rows" .!= mempty)
-                     <*> (o .:? "templateSuffix")
-                     <*> (o .:? "skipInvalidRows"))
-
-instance ToJSON TableDataInsertAllRequest where
-        toJSON TableDataInsertAllRequest'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _tdiarKind),
-                  ("ignoreUnknownValues" .=) <$>
-                    _tdiarIgnoreUnknownValues,
-                  ("rows" .=) <$> _tdiarRows,
-                  ("templateSuffix" .=) <$> _tdiarTemplateSuffix,
-                  ("skipInvalidRows" .=) <$> _tdiarSkipInvalidRows])
-
---
--- /See:/ 'projectListProjectsItem' smart constructor.
-data ProjectListProjectsItem = ProjectListProjectsItem'
-    { _plpiFriendlyName     :: !(Maybe Text)
-    , _plpiKind             :: !Text
-    , _plpiProjectReference :: !(Maybe ProjectReference)
-    , _plpiId               :: !(Maybe Text)
-    , _plpiNumericId        :: !(Maybe (Textual Word64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProjectListProjectsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'plpiFriendlyName'
---
--- * 'plpiKind'
---
--- * 'plpiProjectReference'
---
--- * 'plpiId'
---
--- * 'plpiNumericId'
-projectListProjectsItem
-    :: ProjectListProjectsItem
-projectListProjectsItem =
-    ProjectListProjectsItem'
-    { _plpiFriendlyName = Nothing
-    , _plpiKind = "bigquery#project"
-    , _plpiProjectReference = Nothing
-    , _plpiId = Nothing
-    , _plpiNumericId = Nothing
-    }
-
--- | A descriptive name for this project.
-plpiFriendlyName :: Lens' ProjectListProjectsItem (Maybe Text)
-plpiFriendlyName
-  = lens _plpiFriendlyName
-      (\ s a -> s{_plpiFriendlyName = a})
-
--- | The resource type.
-plpiKind :: Lens' ProjectListProjectsItem Text
-plpiKind = lens _plpiKind (\ s a -> s{_plpiKind = a})
-
--- | A unique reference to this project.
-plpiProjectReference :: Lens' ProjectListProjectsItem (Maybe ProjectReference)
-plpiProjectReference
-  = lens _plpiProjectReference
-      (\ s a -> s{_plpiProjectReference = a})
-
--- | An opaque ID of this project.
-plpiId :: Lens' ProjectListProjectsItem (Maybe Text)
-plpiId = lens _plpiId (\ s a -> s{_plpiId = a})
-
--- | The numeric ID of this project.
-plpiNumericId :: Lens' ProjectListProjectsItem (Maybe Word64)
-plpiNumericId
-  = lens _plpiNumericId
-      (\ s a -> s{_plpiNumericId = a})
-      . mapping _Coerce
-
-instance FromJSON ProjectListProjectsItem where
-        parseJSON
-          = withObject "ProjectListProjectsItem"
-              (\ o ->
-                 ProjectListProjectsItem' <$>
-                   (o .:? "friendlyName") <*>
-                     (o .:? "kind" .!= "bigquery#project")
-                     <*> (o .:? "projectReference")
-                     <*> (o .:? "id")
-                     <*> (o .:? "numericId"))
-
-instance ToJSON ProjectListProjectsItem where
-        toJSON ProjectListProjectsItem'{..}
-          = object
-              (catMaybes
-                 [("friendlyName" .=) <$> _plpiFriendlyName,
-                  Just ("kind" .= _plpiKind),
-                  ("projectReference" .=) <$> _plpiProjectReference,
-                  ("id" .=) <$> _plpiId,
-                  ("numericId" .=) <$> _plpiNumericId])
-
---
--- /See:/ 'bigtableColumn' smart constructor.
-data BigtableColumn = BigtableColumn'
-    { _bcQualifierEncoded :: !(Maybe Bytes)
-    , _bcFieldName        :: !(Maybe Text)
-    , _bcQualifierString  :: !(Maybe Text)
-    , _bcOnlyReadLatest   :: !(Maybe Bool)
-    , _bcType             :: !(Maybe Text)
-    , _bcEncoding         :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BigtableColumn' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bcQualifierEncoded'
---
--- * 'bcFieldName'
---
--- * 'bcQualifierString'
---
--- * 'bcOnlyReadLatest'
---
--- * 'bcType'
---
--- * 'bcEncoding'
-bigtableColumn
-    :: BigtableColumn
-bigtableColumn =
-    BigtableColumn'
-    { _bcQualifierEncoded = Nothing
-    , _bcFieldName = Nothing
-    , _bcQualifierString = Nothing
-    , _bcOnlyReadLatest = Nothing
-    , _bcType = Nothing
-    , _bcEncoding = Nothing
-    }
-
--- | [Required] Qualifier of the column. Columns in the parent column family
--- that has this exact qualifier are exposed as . field. If the qualifier
--- is valid UTF-8 string, it can be specified in the qualifier_string
--- field. Otherwise, a base-64 encoded value must be set to
--- qualifier_encoded. The column field name is the same as the column
--- qualifier. However, if the qualifier is not a valid BigQuery field
--- identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier
--- must be provided as field_name.
-bcQualifierEncoded :: Lens' BigtableColumn (Maybe ByteString)
-bcQualifierEncoded
-  = lens _bcQualifierEncoded
-      (\ s a -> s{_bcQualifierEncoded = a})
-      . mapping _Bytes
-
--- | [Optional] If the qualifier is not a valid BigQuery field identifier
--- i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be
--- provided as the column field name and is used as field name in queries.
-bcFieldName :: Lens' BigtableColumn (Maybe Text)
-bcFieldName
-  = lens _bcFieldName (\ s a -> s{_bcFieldName = a})
-
-bcQualifierString :: Lens' BigtableColumn (Maybe Text)
-bcQualifierString
-  = lens _bcQualifierString
-      (\ s a -> s{_bcQualifierString = a})
-
--- | [Optional] If this is set, only the latest version of value in this
--- column are exposed. \'onlyReadLatest\' can also be set at the column
--- family level. However, the setting at this level takes precedence if
--- \'onlyReadLatest\' is set at both levels.
-bcOnlyReadLatest :: Lens' BigtableColumn (Maybe Bool)
-bcOnlyReadLatest
-  = lens _bcOnlyReadLatest
-      (\ s a -> s{_bcOnlyReadLatest = a})
-
--- | [Optional] The type to convert the value in cells of this column. The
--- values are expected to be encoded using HBase Bytes.toBytes function
--- when using the BINARY encoding value. Following BigQuery types are
--- allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Default
--- type is BYTES. \'type\' can also be set at the column family level.
--- However, the setting at this level takes precedence if \'type\' is set
--- at both levels.
-bcType :: Lens' BigtableColumn (Maybe Text)
-bcType = lens _bcType (\ s a -> s{_bcType = a})
-
--- | [Optional] The encoding of the values when the type is not STRING.
--- Acceptable encoding values are: TEXT - indicates values are alphanumeric
--- text strings. BINARY - indicates values are encoded using HBase
--- Bytes.toBytes family of functions. \'encoding\' can also be set at the
--- column family level. However, the setting at this level takes precedence
--- if \'encoding\' is set at both levels.
-bcEncoding :: Lens' BigtableColumn (Maybe Text)
-bcEncoding
-  = lens _bcEncoding (\ s a -> s{_bcEncoding = a})
-
-instance FromJSON BigtableColumn where
-        parseJSON
-          = withObject "BigtableColumn"
-              (\ o ->
-                 BigtableColumn' <$>
-                   (o .:? "qualifierEncoded") <*> (o .:? "fieldName")
-                     <*> (o .:? "qualifierString")
-                     <*> (o .:? "onlyReadLatest")
-                     <*> (o .:? "type")
-                     <*> (o .:? "encoding"))
-
-instance ToJSON BigtableColumn where
-        toJSON BigtableColumn'{..}
-          = object
-              (catMaybes
-                 [("qualifierEncoded" .=) <$> _bcQualifierEncoded,
-                  ("fieldName" .=) <$> _bcFieldName,
-                  ("qualifierString" .=) <$> _bcQualifierString,
-                  ("onlyReadLatest" .=) <$> _bcOnlyReadLatest,
-                  ("type" .=) <$> _bcType,
-                  ("encoding" .=) <$> _bcEncoding])
-
---
--- /See:/ 'streamingbuffer' smart constructor.
-data Streamingbuffer = Streamingbuffer'
-    { _sEstimatedBytes  :: !(Maybe (Textual Word64))
-    , _sOldestEntryTime :: !(Maybe (Textual Word64))
-    , _sEstimatedRows   :: !(Maybe (Textual Word64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Streamingbuffer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sEstimatedBytes'
---
--- * 'sOldestEntryTime'
---
--- * 'sEstimatedRows'
-streamingbuffer
-    :: Streamingbuffer
-streamingbuffer =
-    Streamingbuffer'
-    { _sEstimatedBytes = Nothing
-    , _sOldestEntryTime = Nothing
-    , _sEstimatedRows = Nothing
-    }
-
--- | [Output-only] A lower-bound estimate of the number of bytes currently in
--- the streaming buffer.
-sEstimatedBytes :: Lens' Streamingbuffer (Maybe Word64)
-sEstimatedBytes
-  = lens _sEstimatedBytes
-      (\ s a -> s{_sEstimatedBytes = a})
-      . mapping _Coerce
-
--- | [Output-only] Contains the timestamp of the oldest entry in the
--- streaming buffer, in milliseconds since the epoch, if the streaming
--- buffer is available.
-sOldestEntryTime :: Lens' Streamingbuffer (Maybe Word64)
-sOldestEntryTime
-  = lens _sOldestEntryTime
-      (\ s a -> s{_sOldestEntryTime = a})
-      . mapping _Coerce
-
--- | [Output-only] A lower-bound estimate of the number of rows currently in
--- the streaming buffer.
-sEstimatedRows :: Lens' Streamingbuffer (Maybe Word64)
-sEstimatedRows
-  = lens _sEstimatedRows
-      (\ s a -> s{_sEstimatedRows = a})
-      . mapping _Coerce
-
-instance FromJSON Streamingbuffer where
-        parseJSON
-          = withObject "Streamingbuffer"
-              (\ o ->
-                 Streamingbuffer' <$>
-                   (o .:? "estimatedBytes") <*>
-                     (o .:? "oldestEntryTime")
-                     <*> (o .:? "estimatedRows"))
-
-instance ToJSON Streamingbuffer where
-        toJSON Streamingbuffer'{..}
-          = object
-              (catMaybes
-                 [("estimatedBytes" .=) <$> _sEstimatedBytes,
-                  ("oldestEntryTime" .=) <$> _sOldestEntryTime,
-                  ("estimatedRows" .=) <$> _sEstimatedRows])
-
---
--- /See:/ 'tableRow' smart constructor.
-newtype TableRow = TableRow'
-    { _trF :: Maybe [TableCell]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableRow' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trF'
-tableRow
-    :: TableRow
-tableRow =
-    TableRow'
-    { _trF = Nothing
-    }
-
--- | Represents a single row in the result set, consisting of one or more
--- fields.
-trF :: Lens' TableRow [TableCell]
-trF
-  = lens _trF (\ s a -> s{_trF = a}) . _Default .
-      _Coerce
-
-instance FromJSON TableRow where
-        parseJSON
-          = withObject "TableRow"
-              (\ o -> TableRow' <$> (o .:? "f" .!= mempty))
-
-instance ToJSON TableRow where
-        toJSON TableRow'{..}
-          = object (catMaybes [("f" .=) <$> _trF])
-
---
--- /See:/ 'jobListJobsItem' smart constructor.
-data JobListJobsItem = JobListJobsItem'
-    { _jljiJobReference  :: !(Maybe JobReference)
-    , _jljiStatus        :: !(Maybe JobStatus)
-    , _jljiState         :: !(Maybe Text)
-    , _jljiUserEmail     :: !(Maybe Text)
-    , _jljiKind          :: !Text
-    , _jljiErrorResult   :: !(Maybe ErrorProto)
-    , _jljiId            :: !(Maybe Text)
-    , _jljiStatistics    :: !(Maybe JobStatistics)
-    , _jljiConfiguration :: !(Maybe JobConfiguration)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobListJobsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jljiJobReference'
---
--- * 'jljiStatus'
---
--- * 'jljiState'
---
--- * 'jljiUserEmail'
---
--- * 'jljiKind'
---
--- * 'jljiErrorResult'
---
--- * 'jljiId'
---
--- * 'jljiStatistics'
---
--- * 'jljiConfiguration'
-jobListJobsItem
-    :: JobListJobsItem
-jobListJobsItem =
-    JobListJobsItem'
-    { _jljiJobReference = Nothing
-    , _jljiStatus = Nothing
-    , _jljiState = Nothing
-    , _jljiUserEmail = Nothing
-    , _jljiKind = "bigquery#job"
-    , _jljiErrorResult = Nothing
-    , _jljiId = Nothing
-    , _jljiStatistics = Nothing
-    , _jljiConfiguration = Nothing
-    }
-
--- | Job reference uniquely identifying the job.
-jljiJobReference :: Lens' JobListJobsItem (Maybe JobReference)
-jljiJobReference
-  = lens _jljiJobReference
-      (\ s a -> s{_jljiJobReference = a})
-
--- | [Full-projection-only] Describes the state of the job.
-jljiStatus :: Lens' JobListJobsItem (Maybe JobStatus)
-jljiStatus
-  = lens _jljiStatus (\ s a -> s{_jljiStatus = a})
-
--- | Running state of the job. When the state is DONE, errorResult can be
--- checked to determine whether the job succeeded or failed.
-jljiState :: Lens' JobListJobsItem (Maybe Text)
-jljiState
-  = lens _jljiState (\ s a -> s{_jljiState = a})
-
--- | [Full-projection-only] Email address of the user who ran the job.
-jljiUserEmail :: Lens' JobListJobsItem (Maybe Text)
-jljiUserEmail
-  = lens _jljiUserEmail
-      (\ s a -> s{_jljiUserEmail = a})
-
--- | The resource type.
-jljiKind :: Lens' JobListJobsItem Text
-jljiKind = lens _jljiKind (\ s a -> s{_jljiKind = a})
-
--- | A result object that will be present only if the job has failed.
-jljiErrorResult :: Lens' JobListJobsItem (Maybe ErrorProto)
-jljiErrorResult
-  = lens _jljiErrorResult
-      (\ s a -> s{_jljiErrorResult = a})
-
--- | Unique opaque ID of the job.
-jljiId :: Lens' JobListJobsItem (Maybe Text)
-jljiId = lens _jljiId (\ s a -> s{_jljiId = a})
-
--- | [Output-only] Information about the job, including starting time and
--- ending time of the job.
-jljiStatistics :: Lens' JobListJobsItem (Maybe JobStatistics)
-jljiStatistics
-  = lens _jljiStatistics
-      (\ s a -> s{_jljiStatistics = a})
-
--- | [Full-projection-only] Specifies the job configuration.
-jljiConfiguration :: Lens' JobListJobsItem (Maybe JobConfiguration)
-jljiConfiguration
-  = lens _jljiConfiguration
-      (\ s a -> s{_jljiConfiguration = a})
-
-instance FromJSON JobListJobsItem where
-        parseJSON
-          = withObject "JobListJobsItem"
-              (\ o ->
-                 JobListJobsItem' <$>
-                   (o .:? "jobReference") <*> (o .:? "status") <*>
-                     (o .:? "state")
-                     <*> (o .:? "user_email")
-                     <*> (o .:? "kind" .!= "bigquery#job")
-                     <*> (o .:? "errorResult")
-                     <*> (o .:? "id")
-                     <*> (o .:? "statistics")
-                     <*> (o .:? "configuration"))
-
-instance ToJSON JobListJobsItem where
-        toJSON JobListJobsItem'{..}
-          = object
-              (catMaybes
-                 [("jobReference" .=) <$> _jljiJobReference,
-                  ("status" .=) <$> _jljiStatus,
-                  ("state" .=) <$> _jljiState,
-                  ("user_email" .=) <$> _jljiUserEmail,
-                  Just ("kind" .= _jljiKind),
-                  ("errorResult" .=) <$> _jljiErrorResult,
-                  ("id" .=) <$> _jljiId,
-                  ("statistics" .=) <$> _jljiStatistics,
-                  ("configuration" .=) <$> _jljiConfiguration])
-
---
--- /See:/ 'timePartitioning' smart constructor.
-data TimePartitioning = TimePartitioning'
-    { _tpExpirationMs :: !(Maybe (Textual Int64))
-    , _tpType         :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TimePartitioning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpExpirationMs'
---
--- * 'tpType'
-timePartitioning
-    :: TimePartitioning
-timePartitioning =
-    TimePartitioning'
-    { _tpExpirationMs = Nothing
-    , _tpType = Nothing
-    }
-
--- | [Optional] Number of milliseconds for which to keep the storage for a
--- partition.
-tpExpirationMs :: Lens' TimePartitioning (Maybe Int64)
-tpExpirationMs
-  = lens _tpExpirationMs
-      (\ s a -> s{_tpExpirationMs = a})
-      . mapping _Coerce
-
--- | [Required] The only type supported is DAY, which will generate one
--- partition per day based on data loading time.
-tpType :: Lens' TimePartitioning (Maybe Text)
-tpType = lens _tpType (\ s a -> s{_tpType = a})
-
-instance FromJSON TimePartitioning where
-        parseJSON
-          = withObject "TimePartitioning"
-              (\ o ->
-                 TimePartitioning' <$>
-                   (o .:? "expirationMs") <*> (o .:? "type"))
-
-instance ToJSON TimePartitioning where
-        toJSON TimePartitioning'{..}
-          = object
-              (catMaybes
-                 [("expirationMs" .=) <$> _tpExpirationMs,
-                  ("type" .=) <$> _tpType])
-
--- | [Optional] The struct field values, in order of the struct type\'s
--- declaration.
---
--- /See:/ 'queryParameterValueStructValues' smart constructor.
-newtype QueryParameterValueStructValues = QueryParameterValueStructValues'
-    { _qpvsvAddtional :: HashMap Text QueryParameterValue
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryParameterValueStructValues' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qpvsvAddtional'
-queryParameterValueStructValues
-    :: HashMap Text QueryParameterValue -- ^ 'qpvsvAddtional'
-    -> QueryParameterValueStructValues
-queryParameterValueStructValues pQpvsvAddtional_ =
-    QueryParameterValueStructValues'
-    { _qpvsvAddtional = _Coerce # pQpvsvAddtional_
-    }
-
-qpvsvAddtional :: Lens' QueryParameterValueStructValues (HashMap Text QueryParameterValue)
-qpvsvAddtional
-  = lens _qpvsvAddtional
-      (\ s a -> s{_qpvsvAddtional = a})
-      . _Coerce
-
-instance FromJSON QueryParameterValueStructValues
-         where
-        parseJSON
-          = withObject "QueryParameterValueStructValues"
-              (\ o ->
-                 QueryParameterValueStructValues' <$>
-                   (parseJSONObject o))
-
-instance ToJSON QueryParameterValueStructValues where
-        toJSON = toJSON . _qpvsvAddtional
-
--- | [Experimental] The labels associated with this dataset. You can use
--- these to organize and group your datasets. You can set this property
--- when inserting or updating a dataset. See Labeling Datasets for more
--- information.
---
--- /See:/ 'dataSetLabels' smart constructor.
-newtype DataSetLabels = DataSetLabels'
-    { _dslAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetLabels' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dslAddtional'
-dataSetLabels
-    :: HashMap Text Text -- ^ 'dslAddtional'
-    -> DataSetLabels
-dataSetLabels pDslAddtional_ =
-    DataSetLabels'
-    { _dslAddtional = _Coerce # pDslAddtional_
-    }
-
-dslAddtional :: Lens' DataSetLabels (HashMap Text Text)
-dslAddtional
-  = lens _dslAddtional (\ s a -> s{_dslAddtional = a})
-      . _Coerce
-
-instance FromJSON DataSetLabels where
-        parseJSON
-          = withObject "DataSetLabels"
-              (\ o -> DataSetLabels' <$> (parseJSONObject o))
-
-instance ToJSON DataSetLabels where
-        toJSON = toJSON . _dslAddtional
-
---
--- /See:/ 'jobConfiguration' smart constructor.
-data JobConfiguration = JobConfiguration'
-    { _jcCopy    :: !(Maybe JobConfigurationTableCopy)
-    , _jcLoad    :: !(Maybe JobConfigurationLoad)
-    , _jcQuery   :: !(Maybe JobConfigurationQuery)
-    , _jcExtract :: !(Maybe JobConfigurationExtract)
-    , _jcLabels  :: !(Maybe JobConfigurationLabels)
-    , _jcDryRun  :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jcCopy'
---
--- * 'jcLoad'
---
--- * 'jcQuery'
---
--- * 'jcExtract'
---
--- * 'jcLabels'
---
--- * 'jcDryRun'
-jobConfiguration
-    :: JobConfiguration
-jobConfiguration =
-    JobConfiguration'
-    { _jcCopy = Nothing
-    , _jcLoad = Nothing
-    , _jcQuery = Nothing
-    , _jcExtract = Nothing
-    , _jcLabels = Nothing
-    , _jcDryRun = Nothing
-    }
-
--- | [Pick one] Copies a table.
-jcCopy :: Lens' JobConfiguration (Maybe JobConfigurationTableCopy)
-jcCopy = lens _jcCopy (\ s a -> s{_jcCopy = a})
-
--- | [Pick one] Configures a load job.
-jcLoad :: Lens' JobConfiguration (Maybe JobConfigurationLoad)
-jcLoad = lens _jcLoad (\ s a -> s{_jcLoad = a})
-
--- | [Pick one] Configures a query job.
-jcQuery :: Lens' JobConfiguration (Maybe JobConfigurationQuery)
-jcQuery = lens _jcQuery (\ s a -> s{_jcQuery = a})
-
--- | [Pick one] Configures an extract job.
-jcExtract :: Lens' JobConfiguration (Maybe JobConfigurationExtract)
-jcExtract
-  = lens _jcExtract (\ s a -> s{_jcExtract = a})
-
--- | [Experimental] The labels associated with this job. You can use these to
--- organize and group your jobs. Label keys and values can be no longer
--- than 63 characters, can only contain letters, numeric characters,
--- underscores and dashes. International characters are allowed. Label
--- values are optional. Label keys must start with a letter and must be
--- unique within a dataset. Both keys and values are additionally
--- constrained to be \<= 128 bytes in size.
-jcLabels :: Lens' JobConfiguration (Maybe JobConfigurationLabels)
-jcLabels = lens _jcLabels (\ s a -> s{_jcLabels = a})
-
--- | [Optional] If set, don\'t actually run this job. A valid query will
--- return a mostly empty response with some processing statistics, while an
--- invalid query will return the same error it would if it wasn\'t a dry
--- run. Behavior of non-query jobs is undefined.
-jcDryRun :: Lens' JobConfiguration (Maybe Bool)
-jcDryRun = lens _jcDryRun (\ s a -> s{_jcDryRun = a})
-
-instance FromJSON JobConfiguration where
-        parseJSON
-          = withObject "JobConfiguration"
-              (\ o ->
-                 JobConfiguration' <$>
-                   (o .:? "copy") <*> (o .:? "load") <*> (o .:? "query")
-                     <*> (o .:? "extract")
-                     <*> (o .:? "labels")
-                     <*> (o .:? "dryRun"))
-
-instance ToJSON JobConfiguration where
-        toJSON JobConfiguration'{..}
-          = object
-              (catMaybes
-                 [("copy" .=) <$> _jcCopy, ("load" .=) <$> _jcLoad,
-                  ("query" .=) <$> _jcQuery,
-                  ("extract" .=) <$> _jcExtract,
-                  ("labels" .=) <$> _jcLabels,
-                  ("dryRun" .=) <$> _jcDryRun])
-
---
--- /See:/ 'job' smart constructor.
-data Job = Job'
-    { _jJobReference  :: !(Maybe JobReference)
-    , _jStatus        :: !(Maybe JobStatus)
-    , _jEtag          :: !(Maybe Text)
-    , _jUserEmail     :: !(Maybe Text)
-    , _jKind          :: !Text
-    , _jSelfLink      :: !(Maybe Text)
-    , _jId            :: !(Maybe Text)
-    , _jStatistics    :: !(Maybe JobStatistics)
-    , _jConfiguration :: !(Maybe JobConfiguration)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Job' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jJobReference'
---
--- * 'jStatus'
---
--- * 'jEtag'
---
--- * 'jUserEmail'
---
--- * 'jKind'
---
--- * 'jSelfLink'
---
--- * 'jId'
---
--- * 'jStatistics'
---
--- * 'jConfiguration'
-job
-    :: Job
-job =
-    Job'
-    { _jJobReference = Nothing
-    , _jStatus = Nothing
-    , _jEtag = Nothing
-    , _jUserEmail = Nothing
-    , _jKind = "bigquery#job"
-    , _jSelfLink = Nothing
-    , _jId = Nothing
-    , _jStatistics = Nothing
-    , _jConfiguration = Nothing
-    }
-
--- | [Optional] Reference describing the unique-per-user name of the job.
-jJobReference :: Lens' Job (Maybe JobReference)
-jJobReference
-  = lens _jJobReference
-      (\ s a -> s{_jJobReference = a})
-
--- | [Output-only] The status of this job. Examine this value when polling an
--- asynchronous job to see if the job is complete.
-jStatus :: Lens' Job (Maybe JobStatus)
-jStatus = lens _jStatus (\ s a -> s{_jStatus = a})
-
--- | [Output-only] A hash of this resource.
-jEtag :: Lens' Job (Maybe Text)
-jEtag = lens _jEtag (\ s a -> s{_jEtag = a})
-
--- | [Output-only] Email address of the user who ran the job.
-jUserEmail :: Lens' Job (Maybe Text)
-jUserEmail
-  = lens _jUserEmail (\ s a -> s{_jUserEmail = a})
-
--- | [Output-only] The type of the resource.
-jKind :: Lens' Job Text
-jKind = lens _jKind (\ s a -> s{_jKind = a})
-
--- | [Output-only] A URL that can be used to access this resource again.
-jSelfLink :: Lens' Job (Maybe Text)
-jSelfLink
-  = lens _jSelfLink (\ s a -> s{_jSelfLink = a})
-
--- | [Output-only] Opaque ID field of the job
-jId :: Lens' Job (Maybe Text)
-jId = lens _jId (\ s a -> s{_jId = a})
-
--- | [Output-only] Information about the job, including starting time and
--- ending time of the job.
-jStatistics :: Lens' Job (Maybe JobStatistics)
-jStatistics
-  = lens _jStatistics (\ s a -> s{_jStatistics = a})
-
--- | [Required] Describes the job configuration.
-jConfiguration :: Lens' Job (Maybe JobConfiguration)
-jConfiguration
-  = lens _jConfiguration
-      (\ s a -> s{_jConfiguration = a})
-
-instance FromJSON Job where
-        parseJSON
-          = withObject "Job"
-              (\ o ->
-                 Job' <$>
-                   (o .:? "jobReference") <*> (o .:? "status") <*>
-                     (o .:? "etag")
-                     <*> (o .:? "user_email")
-                     <*> (o .:? "kind" .!= "bigquery#job")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id")
-                     <*> (o .:? "statistics")
-                     <*> (o .:? "configuration"))
-
-instance ToJSON Job where
-        toJSON Job'{..}
-          = object
-              (catMaybes
-                 [("jobReference" .=) <$> _jJobReference,
-                  ("status" .=) <$> _jStatus, ("etag" .=) <$> _jEtag,
-                  ("user_email" .=) <$> _jUserEmail,
-                  Just ("kind" .= _jKind),
-                  ("selfLink" .=) <$> _jSelfLink, ("id" .=) <$> _jId,
-                  ("statistics" .=) <$> _jStatistics,
-                  ("configuration" .=) <$> _jConfiguration])
-
---
--- /See:/ 'tableDataInsertAllResponseInsertErrorsItem' smart constructor.
-data TableDataInsertAllResponseInsertErrorsItem = TableDataInsertAllResponseInsertErrorsItem'
-    { _tdiarieiErrors :: !(Maybe [ErrorProto])
-    , _tdiarieiIndex  :: !(Maybe (Textual Word32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableDataInsertAllResponseInsertErrorsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdiarieiErrors'
---
--- * 'tdiarieiIndex'
-tableDataInsertAllResponseInsertErrorsItem
-    :: TableDataInsertAllResponseInsertErrorsItem
-tableDataInsertAllResponseInsertErrorsItem =
-    TableDataInsertAllResponseInsertErrorsItem'
-    { _tdiarieiErrors = Nothing
-    , _tdiarieiIndex = Nothing
-    }
-
--- | Error information for the row indicated by the index property.
-tdiarieiErrors :: Lens' TableDataInsertAllResponseInsertErrorsItem [ErrorProto]
-tdiarieiErrors
-  = lens _tdiarieiErrors
-      (\ s a -> s{_tdiarieiErrors = a})
-      . _Default
-      . _Coerce
-
--- | The index of the row that error applies to.
-tdiarieiIndex :: Lens' TableDataInsertAllResponseInsertErrorsItem (Maybe Word32)
-tdiarieiIndex
-  = lens _tdiarieiIndex
-      (\ s a -> s{_tdiarieiIndex = a})
-      . mapping _Coerce
-
-instance FromJSON
-         TableDataInsertAllResponseInsertErrorsItem where
-        parseJSON
-          = withObject
-              "TableDataInsertAllResponseInsertErrorsItem"
-              (\ o ->
-                 TableDataInsertAllResponseInsertErrorsItem' <$>
-                   (o .:? "errors" .!= mempty) <*> (o .:? "index"))
-
-instance ToJSON
-         TableDataInsertAllResponseInsertErrorsItem where
-        toJSON
-          TableDataInsertAllResponseInsertErrorsItem'{..}
-          = object
-              (catMaybes
-                 [("errors" .=) <$> _tdiarieiErrors,
-                  ("index" .=) <$> _tdiarieiIndex])
-
---
--- /See:/ 'jobConfigurationExtract' smart constructor.
-data JobConfigurationExtract = JobConfigurationExtract'
-    { _jceDestinationFormat :: !(Maybe Text)
-    , _jceSourceTable       :: !(Maybe TableReference)
-    , _jcePrintHeader       :: !Bool
-    , _jceCompression       :: !(Maybe Text)
-    , _jceDestinationURIs   :: !(Maybe [Text])
-    , _jceDestinationURI    :: !(Maybe Text)
-    , _jceFieldDelimiter    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfigurationExtract' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jceDestinationFormat'
---
--- * 'jceSourceTable'
---
--- * 'jcePrintHeader'
---
--- * 'jceCompression'
---
--- * 'jceDestinationURIs'
---
--- * 'jceDestinationURI'
---
--- * 'jceFieldDelimiter'
-jobConfigurationExtract
-    :: JobConfigurationExtract
-jobConfigurationExtract =
-    JobConfigurationExtract'
-    { _jceDestinationFormat = Nothing
-    , _jceSourceTable = Nothing
-    , _jcePrintHeader = True
-    , _jceCompression = Nothing
-    , _jceDestinationURIs = Nothing
-    , _jceDestinationURI = Nothing
-    , _jceFieldDelimiter = Nothing
-    }
-
--- | [Optional] The exported file format. Possible values include CSV,
--- NEWLINE_DELIMITED_JSON and AVRO. The default value is CSV. Tables with
--- nested or repeated fields cannot be exported as CSV.
-jceDestinationFormat :: Lens' JobConfigurationExtract (Maybe Text)
-jceDestinationFormat
-  = lens _jceDestinationFormat
-      (\ s a -> s{_jceDestinationFormat = a})
-
--- | [Required] A reference to the table being exported.
-jceSourceTable :: Lens' JobConfigurationExtract (Maybe TableReference)
-jceSourceTable
-  = lens _jceSourceTable
-      (\ s a -> s{_jceSourceTable = a})
-
--- | [Optional] Whether to print out a header row in the results. Default is
--- true.
-jcePrintHeader :: Lens' JobConfigurationExtract Bool
-jcePrintHeader
-  = lens _jcePrintHeader
-      (\ s a -> s{_jcePrintHeader = a})
-
--- | [Optional] The compression type to use for exported files. Possible
--- values include GZIP and NONE. The default value is NONE.
-jceCompression :: Lens' JobConfigurationExtract (Maybe Text)
-jceCompression
-  = lens _jceCompression
-      (\ s a -> s{_jceCompression = a})
-
--- | [Pick one] A list of fully-qualified Google Cloud Storage URIs where the
--- extracted table should be written.
-jceDestinationURIs :: Lens' JobConfigurationExtract [Text]
-jceDestinationURIs
-  = lens _jceDestinationURIs
-      (\ s a -> s{_jceDestinationURIs = a})
-      . _Default
-      . _Coerce
-
--- | [Pick one] DEPRECATED: Use destinationUris instead, passing only one URI
--- as necessary. The fully-qualified Google Cloud Storage URI where the
--- extracted table should be written.
-jceDestinationURI :: Lens' JobConfigurationExtract (Maybe Text)
-jceDestinationURI
-  = lens _jceDestinationURI
-      (\ s a -> s{_jceDestinationURI = a})
-
--- | [Optional] Delimiter to use between fields in the exported data. Default
--- is \',\'
-jceFieldDelimiter :: Lens' JobConfigurationExtract (Maybe Text)
-jceFieldDelimiter
-  = lens _jceFieldDelimiter
-      (\ s a -> s{_jceFieldDelimiter = a})
-
-instance FromJSON JobConfigurationExtract where
-        parseJSON
-          = withObject "JobConfigurationExtract"
-              (\ o ->
-                 JobConfigurationExtract' <$>
-                   (o .:? "destinationFormat") <*> (o .:? "sourceTable")
-                     <*> (o .:? "printHeader" .!= True)
-                     <*> (o .:? "compression")
-                     <*> (o .:? "destinationUris" .!= mempty)
-                     <*> (o .:? "destinationUri")
-                     <*> (o .:? "fieldDelimiter"))
-
-instance ToJSON JobConfigurationExtract where
-        toJSON JobConfigurationExtract'{..}
-          = object
-              (catMaybes
-                 [("destinationFormat" .=) <$> _jceDestinationFormat,
-                  ("sourceTable" .=) <$> _jceSourceTable,
-                  Just ("printHeader" .= _jcePrintHeader),
-                  ("compression" .=) <$> _jceCompression,
-                  ("destinationUris" .=) <$> _jceDestinationURIs,
-                  ("destinationUri" .=) <$> _jceDestinationURI,
-                  ("fieldDelimiter" .=) <$> _jceFieldDelimiter])
-
---
--- /See:/ 'jobCancelResponse' smart constructor.
-data JobCancelResponse = JobCancelResponse'
-    { _jcrKind :: !Text
-    , _jcrJob  :: !(Maybe Job)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobCancelResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jcrKind'
---
--- * 'jcrJob'
-jobCancelResponse
-    :: JobCancelResponse
-jobCancelResponse =
-    JobCancelResponse'
-    { _jcrKind = "bigquery#jobCancelResponse"
-    , _jcrJob = Nothing
-    }
-
--- | The resource type of the response.
-jcrKind :: Lens' JobCancelResponse Text
-jcrKind = lens _jcrKind (\ s a -> s{_jcrKind = a})
-
--- | The final state of the job.
-jcrJob :: Lens' JobCancelResponse (Maybe Job)
-jcrJob = lens _jcrJob (\ s a -> s{_jcrJob = a})
-
-instance FromJSON JobCancelResponse where
-        parseJSON
-          = withObject "JobCancelResponse"
-              (\ o ->
-                 JobCancelResponse' <$>
-                   (o .:? "kind" .!= "bigquery#jobCancelResponse") <*>
-                     (o .:? "job"))
-
-instance ToJSON JobCancelResponse where
-        toJSON JobCancelResponse'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _jcrKind), ("job" .=) <$> _jcrJob])
-
--- | Represents a single JSON object.
---
--- /See:/ 'jsonObject' smart constructor.
-newtype JSONObject = JSONObject'
-    { _joAddtional :: HashMap Text JSONValue
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JSONObject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'joAddtional'
-jsonObject
-    :: HashMap Text JSONValue -- ^ 'joAddtional'
-    -> JSONObject
-jsonObject pJoAddtional_ =
-    JSONObject'
-    { _joAddtional = _Coerce # pJoAddtional_
-    }
-
-joAddtional :: Lens' JSONObject (HashMap Text JSONValue)
-joAddtional
-  = lens _joAddtional (\ s a -> s{_joAddtional = a}) .
-      _Coerce
-
-instance FromJSON JSONObject where
-        parseJSON
-          = withObject "JSONObject"
-              (\ o -> JSONObject' <$> (parseJSONObject o))
-
-instance ToJSON JSONObject where
-        toJSON = toJSON . _joAddtional
-
---
--- /See:/ 'jobConfigurationQuery' smart constructor.
-data JobConfigurationQuery = JobConfigurationQuery'
-    { _jcqDestinationTable             :: !(Maybe TableReference)
-    , _jcqWriteDisPosition             :: !(Maybe Text)
-    , _jcqPriority                     :: !(Maybe Text)
-    , _jcqUseQueryCache                :: !Bool
-    , _jcqPreserveNulls                :: !(Maybe Bool)
-    , _jcqTableDefinitions             :: !(Maybe JobConfigurationQueryTableDefinitions)
-    , _jcqQueryParameters              :: !(Maybe [QueryParameter])
-    , _jcqSchemaUpdateOptions          :: !(Maybe [Text])
-    , _jcqMaximumBytesBilled           :: !(Maybe (Textual Int64))
-    , _jcqCreateDisPosition            :: !(Maybe Text)
-    , _jcqUserDefinedFunctionResources :: !(Maybe [UserDefinedFunctionResource])
-    , _jcqAllowLargeResults            :: !(Maybe Bool)
-    , _jcqMaximumBillingTier           :: !(Textual Int32)
-    , _jcqQuery                        :: !(Maybe Text)
-    , _jcqFlattenResults               :: !Bool
-    , _jcqParameterMode                :: !(Maybe Text)
-    , _jcqUseLegacySQL                 :: !(Maybe Bool)
-    , _jcqDefaultDataSet               :: !(Maybe DataSetReference)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfigurationQuery' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jcqDestinationTable'
---
--- * 'jcqWriteDisPosition'
---
--- * 'jcqPriority'
---
--- * 'jcqUseQueryCache'
---
--- * 'jcqPreserveNulls'
---
--- * 'jcqTableDefinitions'
---
--- * 'jcqQueryParameters'
---
--- * 'jcqSchemaUpdateOptions'
---
--- * 'jcqMaximumBytesBilled'
---
--- * 'jcqCreateDisPosition'
---
--- * 'jcqUserDefinedFunctionResources'
---
--- * 'jcqAllowLargeResults'
---
--- * 'jcqMaximumBillingTier'
---
--- * 'jcqQuery'
---
--- * 'jcqFlattenResults'
---
--- * 'jcqParameterMode'
---
--- * 'jcqUseLegacySQL'
---
--- * 'jcqDefaultDataSet'
-jobConfigurationQuery
-    :: JobConfigurationQuery
-jobConfigurationQuery =
-    JobConfigurationQuery'
-    { _jcqDestinationTable = Nothing
-    , _jcqWriteDisPosition = Nothing
-    , _jcqPriority = Nothing
-    , _jcqUseQueryCache = True
-    , _jcqPreserveNulls = Nothing
-    , _jcqTableDefinitions = Nothing
-    , _jcqQueryParameters = Nothing
-    , _jcqSchemaUpdateOptions = Nothing
-    , _jcqMaximumBytesBilled = Nothing
-    , _jcqCreateDisPosition = Nothing
-    , _jcqUserDefinedFunctionResources = Nothing
-    , _jcqAllowLargeResults = Nothing
-    , _jcqMaximumBillingTier = 1
-    , _jcqQuery = Nothing
-    , _jcqFlattenResults = True
-    , _jcqParameterMode = Nothing
-    , _jcqUseLegacySQL = Nothing
-    , _jcqDefaultDataSet = Nothing
-    }
-
--- | [Optional] Describes the table where the query results should be stored.
--- If not present, a new table will be created to store the results.
-jcqDestinationTable :: Lens' JobConfigurationQuery (Maybe TableReference)
-jcqDestinationTable
-  = lens _jcqDestinationTable
-      (\ s a -> s{_jcqDestinationTable = a})
-
--- | [Optional] Specifies the action that occurs if the destination table
--- already exists. The following values are supported: WRITE_TRUNCATE: If
--- the table already exists, BigQuery overwrites the table data.
--- WRITE_APPEND: If the table already exists, BigQuery appends the data to
--- the table. WRITE_EMPTY: If the table already exists and contains data, a
--- \'duplicate\' error is returned in the job result. The default value is
--- WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able
--- to complete the job successfully. Creation, truncation and append
--- actions occur as one atomic update upon job completion.
-jcqWriteDisPosition :: Lens' JobConfigurationQuery (Maybe Text)
-jcqWriteDisPosition
-  = lens _jcqWriteDisPosition
-      (\ s a -> s{_jcqWriteDisPosition = a})
-
--- | [Optional] Specifies a priority for the query. Possible values include
--- INTERACTIVE and BATCH. The default value is INTERACTIVE.
-jcqPriority :: Lens' JobConfigurationQuery (Maybe Text)
-jcqPriority
-  = lens _jcqPriority (\ s a -> s{_jcqPriority = a})
-
--- | [Optional] Whether to look for the result in the query cache. The query
--- cache is a best-effort cache that will be flushed whenever tables in the
--- query are modified. Moreover, the query cache is only available when a
--- query does not have a destination table specified. The default value is
--- true.
-jcqUseQueryCache :: Lens' JobConfigurationQuery Bool
-jcqUseQueryCache
-  = lens _jcqUseQueryCache
-      (\ s a -> s{_jcqUseQueryCache = a})
-
--- | [Deprecated] This property is deprecated.
-jcqPreserveNulls :: Lens' JobConfigurationQuery (Maybe Bool)
-jcqPreserveNulls
-  = lens _jcqPreserveNulls
-      (\ s a -> s{_jcqPreserveNulls = a})
-
--- | [Optional] If querying an external data source outside of BigQuery,
--- describes the data format, location and other properties of the data
--- source. By defining these properties, the data source can then be
--- queried as if it were a standard BigQuery table.
-jcqTableDefinitions :: Lens' JobConfigurationQuery (Maybe JobConfigurationQueryTableDefinitions)
-jcqTableDefinitions
-  = lens _jcqTableDefinitions
-      (\ s a -> s{_jcqTableDefinitions = a})
-
--- | Query parameters for standard SQL queries.
-jcqQueryParameters :: Lens' JobConfigurationQuery [QueryParameter]
-jcqQueryParameters
-  = lens _jcqQueryParameters
-      (\ s a -> s{_jcqQueryParameters = a})
-      . _Default
-      . _Coerce
-
--- | [Experimental] Allows the schema of the destination table to be updated
--- as a side effect of the query job. Schema update options are supported
--- in two cases: when writeDisposition is WRITE_APPEND; when
--- writeDisposition is WRITE_TRUNCATE and the destination table is a
--- partition of a table, specified by partition decorators. For normal
--- tables, WRITE_TRUNCATE will always overwrite the schema. One or more of
--- the following values are specified: ALLOW_FIELD_ADDITION: allow adding a
--- nullable field to the schema. ALLOW_FIELD_RELAXATION: allow relaxing a
--- required field in the original schema to nullable.
-jcqSchemaUpdateOptions :: Lens' JobConfigurationQuery [Text]
-jcqSchemaUpdateOptions
-  = lens _jcqSchemaUpdateOptions
-      (\ s a -> s{_jcqSchemaUpdateOptions = a})
-      . _Default
-      . _Coerce
-
--- | [Optional] Limits the bytes billed for this job. Queries that will have
--- bytes billed beyond this limit will fail (without incurring a charge).
--- If unspecified, this will be set to your project default.
-jcqMaximumBytesBilled :: Lens' JobConfigurationQuery (Maybe Int64)
-jcqMaximumBytesBilled
-  = lens _jcqMaximumBytesBilled
-      (\ s a -> s{_jcqMaximumBytesBilled = a})
-      . mapping _Coerce
-
--- | [Optional] Specifies whether the job is allowed to create new tables.
--- The following values are supported: CREATE_IF_NEEDED: If the table does
--- not exist, BigQuery creates the table. CREATE_NEVER: The table must
--- already exist. If it does not, a \'notFound\' error is returned in the
--- job result. The default value is CREATE_IF_NEEDED. Creation, truncation
--- and append actions occur as one atomic update upon job completion.
-jcqCreateDisPosition :: Lens' JobConfigurationQuery (Maybe Text)
-jcqCreateDisPosition
-  = lens _jcqCreateDisPosition
-      (\ s a -> s{_jcqCreateDisPosition = a})
-
--- | [Experimental] Describes user-defined function resources used in the
--- query.
-jcqUserDefinedFunctionResources :: Lens' JobConfigurationQuery [UserDefinedFunctionResource]
-jcqUserDefinedFunctionResources
-  = lens _jcqUserDefinedFunctionResources
-      (\ s a -> s{_jcqUserDefinedFunctionResources = a})
-      . _Default
-      . _Coerce
-
--- | If true, allows the query to produce arbitrarily large result tables at
--- a slight cost in performance. Requires destinationTable to be set.
-jcqAllowLargeResults :: Lens' JobConfigurationQuery (Maybe Bool)
-jcqAllowLargeResults
-  = lens _jcqAllowLargeResults
-      (\ s a -> s{_jcqAllowLargeResults = a})
-
--- | [Optional] Limits the billing tier for this job. Queries that have
--- resource usage beyond this tier will fail (without incurring a charge).
--- If unspecified, this will be set to your project default.
-jcqMaximumBillingTier :: Lens' JobConfigurationQuery Int32
-jcqMaximumBillingTier
-  = lens _jcqMaximumBillingTier
-      (\ s a -> s{_jcqMaximumBillingTier = a})
-      . _Coerce
-
--- | [Required] BigQuery SQL query to execute.
-jcqQuery :: Lens' JobConfigurationQuery (Maybe Text)
-jcqQuery = lens _jcqQuery (\ s a -> s{_jcqQuery = a})
-
--- | [Optional] Flattens all nested and repeated fields in the query results.
--- The default value is true. allowLargeResults must be true if this is set
--- to false.
-jcqFlattenResults :: Lens' JobConfigurationQuery Bool
-jcqFlattenResults
-  = lens _jcqFlattenResults
-      (\ s a -> s{_jcqFlattenResults = a})
-
--- | [Experimental] Standard SQL only. Set to POSITIONAL to use positional
--- (?) query parameters or to NAMED to use named (\'myparam) query
--- parameters in this query.
-jcqParameterMode :: Lens' JobConfigurationQuery (Maybe Text)
-jcqParameterMode
-  = lens _jcqParameterMode
-      (\ s a -> s{_jcqParameterMode = a})
-
--- | Specifies whether to use BigQuery\'s legacy SQL dialect for this query.
--- The default value is true. If set to false, the query will use
--- BigQuery\'s standard SQL:
--- https:\/\/cloud.google.com\/bigquery\/sql-reference\/ When useLegacySql
--- is set to false, the values of allowLargeResults and flattenResults are
--- ignored; query will be run as if allowLargeResults is true and
--- flattenResults is false.
-jcqUseLegacySQL :: Lens' JobConfigurationQuery (Maybe Bool)
-jcqUseLegacySQL
-  = lens _jcqUseLegacySQL
-      (\ s a -> s{_jcqUseLegacySQL = a})
-
--- | [Optional] Specifies the default dataset to use for unqualified table
--- names in the query.
-jcqDefaultDataSet :: Lens' JobConfigurationQuery (Maybe DataSetReference)
-jcqDefaultDataSet
-  = lens _jcqDefaultDataSet
-      (\ s a -> s{_jcqDefaultDataSet = a})
-
-instance FromJSON JobConfigurationQuery where
-        parseJSON
-          = withObject "JobConfigurationQuery"
-              (\ o ->
-                 JobConfigurationQuery' <$>
-                   (o .:? "destinationTable") <*>
-                     (o .:? "writeDisposition")
-                     <*> (o .:? "priority")
-                     <*> (o .:? "useQueryCache" .!= True)
-                     <*> (o .:? "preserveNulls")
-                     <*> (o .:? "tableDefinitions")
-                     <*> (o .:? "queryParameters" .!= mempty)
-                     <*> (o .:? "schemaUpdateOptions" .!= mempty)
-                     <*> (o .:? "maximumBytesBilled")
-                     <*> (o .:? "createDisposition")
-                     <*> (o .:? "userDefinedFunctionResources" .!= mempty)
-                     <*> (o .:? "allowLargeResults")
-                     <*> (o .:? "maximumBillingTier" .!= 1)
-                     <*> (o .:? "query")
-                     <*> (o .:? "flattenResults" .!= True)
-                     <*> (o .:? "parameterMode")
-                     <*> (o .:? "useLegacySql")
-                     <*> (o .:? "defaultDataset"))
-
-instance ToJSON JobConfigurationQuery where
-        toJSON JobConfigurationQuery'{..}
-          = object
-              (catMaybes
-                 [("destinationTable" .=) <$> _jcqDestinationTable,
-                  ("writeDisposition" .=) <$> _jcqWriteDisPosition,
-                  ("priority" .=) <$> _jcqPriority,
-                  Just ("useQueryCache" .= _jcqUseQueryCache),
-                  ("preserveNulls" .=) <$> _jcqPreserveNulls,
-                  ("tableDefinitions" .=) <$> _jcqTableDefinitions,
-                  ("queryParameters" .=) <$> _jcqQueryParameters,
-                  ("schemaUpdateOptions" .=) <$>
-                    _jcqSchemaUpdateOptions,
-                  ("maximumBytesBilled" .=) <$> _jcqMaximumBytesBilled,
-                  ("createDisposition" .=) <$> _jcqCreateDisPosition,
-                  ("userDefinedFunctionResources" .=) <$>
-                    _jcqUserDefinedFunctionResources,
-                  ("allowLargeResults" .=) <$> _jcqAllowLargeResults,
-                  Just
-                    ("maximumBillingTier" .= _jcqMaximumBillingTier),
-                  ("query" .=) <$> _jcqQuery,
-                  Just ("flattenResults" .= _jcqFlattenResults),
-                  ("parameterMode" .=) <$> _jcqParameterMode,
-                  ("useLegacySql" .=) <$> _jcqUseLegacySQL,
-                  ("defaultDataset" .=) <$> _jcqDefaultDataSet])
-
---
--- /See:/ 'googleSheetsOptions' smart constructor.
-newtype GoogleSheetsOptions = GoogleSheetsOptions'
-    { _gsoSkipLeadingRows :: Maybe (Textual Int64)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GoogleSheetsOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsoSkipLeadingRows'
-googleSheetsOptions
-    :: GoogleSheetsOptions
-googleSheetsOptions =
-    GoogleSheetsOptions'
-    { _gsoSkipLeadingRows = Nothing
-    }
-
--- | [Optional] The number of rows at the top of a sheet that BigQuery will
--- skip when reading the data. The default value is 0. This property is
--- useful if you have header rows that should be skipped. When autodetect
--- is on, behavior is the following: * skipLeadingRows unspecified -
--- Autodetect tries to detect headers in the first row. If they are not
--- detected, the row is read as data. Otherwise data is read starting from
--- the second row. * skipLeadingRows is 0 - Instructs autodetect that there
--- are no headers and data should be read starting from the first row. *
--- skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect
--- headers in row N. If headers are not detected, row N is just skipped.
--- Otherwise row N is used to extract column names for the detected schema.
-gsoSkipLeadingRows :: Lens' GoogleSheetsOptions (Maybe Int64)
-gsoSkipLeadingRows
-  = lens _gsoSkipLeadingRows
-      (\ s a -> s{_gsoSkipLeadingRows = a})
-      . mapping _Coerce
-
-instance FromJSON GoogleSheetsOptions where
-        parseJSON
-          = withObject "GoogleSheetsOptions"
-              (\ o ->
-                 GoogleSheetsOptions' <$> (o .:? "skipLeadingRows"))
-
-instance ToJSON GoogleSheetsOptions where
-        toJSON GoogleSheetsOptions'{..}
-          = object
-              (catMaybes
-                 [("skipLeadingRows" .=) <$> _gsoSkipLeadingRows])
-
---
--- /See:/ 'tableDataInsertAllRequestRowsItem' smart constructor.
-data TableDataInsertAllRequestRowsItem = TableDataInsertAllRequestRowsItem'
-    { _tdiarriJSON     :: !(Maybe JSONObject)
-    , _tdiarriInsertId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableDataInsertAllRequestRowsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdiarriJSON'
---
--- * 'tdiarriInsertId'
-tableDataInsertAllRequestRowsItem
-    :: TableDataInsertAllRequestRowsItem
-tableDataInsertAllRequestRowsItem =
-    TableDataInsertAllRequestRowsItem'
-    { _tdiarriJSON = Nothing
-    , _tdiarriInsertId = Nothing
-    }
-
--- | [Required] A JSON object that contains a row of data. The object\'s
--- properties and values must match the destination table\'s schema.
-tdiarriJSON :: Lens' TableDataInsertAllRequestRowsItem (Maybe JSONObject)
-tdiarriJSON
-  = lens _tdiarriJSON (\ s a -> s{_tdiarriJSON = a})
-
--- | [Optional] A unique ID for each row. BigQuery uses this property to
--- detect duplicate insertion requests on a best-effort basis.
-tdiarriInsertId :: Lens' TableDataInsertAllRequestRowsItem (Maybe Text)
-tdiarriInsertId
-  = lens _tdiarriInsertId
-      (\ s a -> s{_tdiarriInsertId = a})
-
-instance FromJSON TableDataInsertAllRequestRowsItem
-         where
-        parseJSON
-          = withObject "TableDataInsertAllRequestRowsItem"
-              (\ o ->
-                 TableDataInsertAllRequestRowsItem' <$>
-                   (o .:? "json") <*> (o .:? "insertId"))
-
-instance ToJSON TableDataInsertAllRequestRowsItem
-         where
-        toJSON TableDataInsertAllRequestRowsItem'{..}
-          = object
-              (catMaybes
-                 [("json" .=) <$> _tdiarriJSON,
-                  ("insertId" .=) <$> _tdiarriInsertId])
-
---
--- /See:/ 'jobList' smart constructor.
-data JobList = JobList'
-    { _jlEtag          :: !(Maybe Text)
-    , _jlNextPageToken :: !(Maybe Text)
-    , _jlKind          :: !Text
-    , _jlJobs          :: !(Maybe [JobListJobsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jlEtag'
---
--- * 'jlNextPageToken'
---
--- * 'jlKind'
---
--- * 'jlJobs'
-jobList
-    :: JobList
-jobList =
-    JobList'
-    { _jlEtag = Nothing
-    , _jlNextPageToken = Nothing
-    , _jlKind = "bigquery#jobList"
-    , _jlJobs = Nothing
-    }
-
--- | A hash of this page of results.
-jlEtag :: Lens' JobList (Maybe Text)
-jlEtag = lens _jlEtag (\ s a -> s{_jlEtag = a})
-
--- | A token to request the next page of results.
-jlNextPageToken :: Lens' JobList (Maybe Text)
-jlNextPageToken
-  = lens _jlNextPageToken
-      (\ s a -> s{_jlNextPageToken = a})
-
--- | The resource type of the response.
-jlKind :: Lens' JobList Text
-jlKind = lens _jlKind (\ s a -> s{_jlKind = a})
-
--- | List of jobs that were requested.
-jlJobs :: Lens' JobList [JobListJobsItem]
-jlJobs
-  = lens _jlJobs (\ s a -> s{_jlJobs = a}) . _Default .
-      _Coerce
-
-instance FromJSON JobList where
-        parseJSON
-          = withObject "JobList"
-              (\ o ->
-                 JobList' <$>
-                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "bigquery#jobList")
-                     <*> (o .:? "jobs" .!= mempty))
-
-instance ToJSON JobList where
-        toJSON JobList'{..}
-          = object
-              (catMaybes
-                 [("etag" .=) <$> _jlEtag,
-                  ("nextPageToken" .=) <$> _jlNextPageToken,
-                  Just ("kind" .= _jlKind), ("jobs" .=) <$> _jlJobs])
-
--- | [Optional] If querying an external data source outside of BigQuery,
--- describes the data format, location and other properties of the data
--- source. By defining these properties, the data source can then be
--- queried as if it were a standard BigQuery table.
---
--- /See:/ 'jobConfigurationQueryTableDefinitions' smart constructor.
-newtype JobConfigurationQueryTableDefinitions = JobConfigurationQueryTableDefinitions'
-    { _jcqtdAddtional :: HashMap Text ExternalDataConfiguration
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobConfigurationQueryTableDefinitions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jcqtdAddtional'
-jobConfigurationQueryTableDefinitions
-    :: HashMap Text ExternalDataConfiguration -- ^ 'jcqtdAddtional'
-    -> JobConfigurationQueryTableDefinitions
-jobConfigurationQueryTableDefinitions pJcqtdAddtional_ =
-    JobConfigurationQueryTableDefinitions'
-    { _jcqtdAddtional = _Coerce # pJcqtdAddtional_
-    }
-
-jcqtdAddtional :: Lens' JobConfigurationQueryTableDefinitions (HashMap Text ExternalDataConfiguration)
-jcqtdAddtional
-  = lens _jcqtdAddtional
-      (\ s a -> s{_jcqtdAddtional = a})
-      . _Coerce
-
-instance FromJSON
-         JobConfigurationQueryTableDefinitions where
-        parseJSON
-          = withObject "JobConfigurationQueryTableDefinitions"
-              (\ o ->
-                 JobConfigurationQueryTableDefinitions' <$>
-                   (parseJSONObject o))
-
-instance ToJSON JobConfigurationQueryTableDefinitions
-         where
-        toJSON = toJSON . _jcqtdAddtional
-
---
--- /See:/ 'tableCell' smart constructor.
-newtype TableCell = TableCell'
-    { _tcV :: Maybe JSONValue
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableCell' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tcV'
-tableCell
-    :: TableCell
-tableCell =
-    TableCell'
-    { _tcV = Nothing
-    }
-
-tcV :: Lens' TableCell (Maybe JSONValue)
-tcV = lens _tcV (\ s a -> s{_tcV = a})
-
-instance FromJSON TableCell where
-        parseJSON
-          = withObject "TableCell"
-              (\ o -> TableCell' <$> (o .:? "v"))
-
-instance ToJSON TableCell where
-        toJSON TableCell'{..}
-          = object (catMaybes [("v" .=) <$> _tcV])
-
---
--- /See:/ 'queryParameterValue' smart constructor.
-data QueryParameterValue = QueryParameterValue'
-    { _qpvStructValues :: !(Maybe QueryParameterValueStructValues)
-    , _qpvValue        :: !(Maybe Text)
-    , _qpvArrayValues  :: !(Maybe [QueryParameterValue])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryParameterValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qpvStructValues'
---
--- * 'qpvValue'
---
--- * 'qpvArrayValues'
-queryParameterValue
-    :: QueryParameterValue
-queryParameterValue =
-    QueryParameterValue'
-    { _qpvStructValues = Nothing
-    , _qpvValue = Nothing
-    , _qpvArrayValues = Nothing
-    }
-
--- | [Optional] The struct field values, in order of the struct type\'s
--- declaration.
-qpvStructValues :: Lens' QueryParameterValue (Maybe QueryParameterValueStructValues)
-qpvStructValues
-  = lens _qpvStructValues
-      (\ s a -> s{_qpvStructValues = a})
-
--- | [Optional] The value of this value, if a simple scalar type.
-qpvValue :: Lens' QueryParameterValue (Maybe Text)
-qpvValue = lens _qpvValue (\ s a -> s{_qpvValue = a})
-
--- | [Optional] The array values, if this is an array type.
-qpvArrayValues :: Lens' QueryParameterValue [QueryParameterValue]
-qpvArrayValues
-  = lens _qpvArrayValues
-      (\ s a -> s{_qpvArrayValues = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON QueryParameterValue where
-        parseJSON
-          = withObject "QueryParameterValue"
-              (\ o ->
-                 QueryParameterValue' <$>
-                   (o .:? "structValues") <*> (o .:? "value") <*>
-                     (o .:? "arrayValues" .!= mempty))
-
-instance ToJSON QueryParameterValue where
-        toJSON QueryParameterValue'{..}
-          = object
-              (catMaybes
-                 [("structValues" .=) <$> _qpvStructValues,
-                  ("value" .=) <$> _qpvValue,
-                  ("arrayValues" .=) <$> _qpvArrayValues])
-
---
--- /See:/ 'viewDefinition' smart constructor.
-data ViewDefinition = ViewDefinition'
-    { _vdUserDefinedFunctionResources :: !(Maybe [UserDefinedFunctionResource])
-    , _vdQuery                        :: !(Maybe Text)
-    , _vdUseLegacySQL                 :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ViewDefinition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vdUserDefinedFunctionResources'
---
--- * 'vdQuery'
---
--- * 'vdUseLegacySQL'
-viewDefinition
-    :: ViewDefinition
-viewDefinition =
-    ViewDefinition'
-    { _vdUserDefinedFunctionResources = Nothing
-    , _vdQuery = Nothing
-    , _vdUseLegacySQL = Nothing
-    }
-
--- | [Experimental] Describes user-defined function resources used in the
--- query.
-vdUserDefinedFunctionResources :: Lens' ViewDefinition [UserDefinedFunctionResource]
-vdUserDefinedFunctionResources
-  = lens _vdUserDefinedFunctionResources
-      (\ s a -> s{_vdUserDefinedFunctionResources = a})
-      . _Default
-      . _Coerce
-
--- | [Required] A query that BigQuery executes when the view is referenced.
-vdQuery :: Lens' ViewDefinition (Maybe Text)
-vdQuery = lens _vdQuery (\ s a -> s{_vdQuery = a})
-
--- | Specifies whether to use BigQuery\'s legacy SQL for this view. The
--- default value is true. If set to false, the view will use BigQuery\'s
--- standard SQL: https:\/\/cloud.google.com\/bigquery\/sql-reference\/
--- Queries and views that reference this view must use the same flag value.
-vdUseLegacySQL :: Lens' ViewDefinition (Maybe Bool)
-vdUseLegacySQL
-  = lens _vdUseLegacySQL
-      (\ s a -> s{_vdUseLegacySQL = a})
-
-instance FromJSON ViewDefinition where
-        parseJSON
-          = withObject "ViewDefinition"
-              (\ o ->
-                 ViewDefinition' <$>
-                   (o .:? "userDefinedFunctionResources" .!= mempty) <*>
-                     (o .:? "query")
-                     <*> (o .:? "useLegacySql"))
-
-instance ToJSON ViewDefinition where
-        toJSON ViewDefinition'{..}
-          = object
-              (catMaybes
-                 [("userDefinedFunctionResources" .=) <$>
-                    _vdUserDefinedFunctionResources,
-                  ("query" .=) <$> _vdQuery,
-                  ("useLegacySql" .=) <$> _vdUseLegacySQL])
-
---
--- /See:/ 'userDefinedFunctionResource' smart constructor.
-data UserDefinedFunctionResource = UserDefinedFunctionResource'
-    { _udfrResourceURI :: !(Maybe Text)
-    , _udfrInlineCode  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserDefinedFunctionResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udfrResourceURI'
---
--- * 'udfrInlineCode'
-userDefinedFunctionResource
-    :: UserDefinedFunctionResource
-userDefinedFunctionResource =
-    UserDefinedFunctionResource'
-    { _udfrResourceURI = Nothing
-    , _udfrInlineCode = Nothing
-    }
-
--- | [Pick one] A code resource to load from a Google Cloud Storage URI
--- (gs:\/\/bucket\/path).
-udfrResourceURI :: Lens' UserDefinedFunctionResource (Maybe Text)
-udfrResourceURI
-  = lens _udfrResourceURI
-      (\ s a -> s{_udfrResourceURI = a})
-
--- | [Pick one] An inline resource that contains code for a user-defined
--- function (UDF). Providing a inline code resource is equivalent to
--- providing a URI for a file containing the same code.
-udfrInlineCode :: Lens' UserDefinedFunctionResource (Maybe Text)
-udfrInlineCode
-  = lens _udfrInlineCode
-      (\ s a -> s{_udfrInlineCode = a})
-
-instance FromJSON UserDefinedFunctionResource where
-        parseJSON
-          = withObject "UserDefinedFunctionResource"
-              (\ o ->
-                 UserDefinedFunctionResource' <$>
-                   (o .:? "resourceUri") <*> (o .:? "inlineCode"))
-
-instance ToJSON UserDefinedFunctionResource where
-        toJSON UserDefinedFunctionResource'{..}
-          = object
-              (catMaybes
-                 [("resourceUri" .=) <$> _udfrResourceURI,
-                  ("inlineCode" .=) <$> _udfrInlineCode])
-
---
--- /See:/ 'jobStatistics2' smart constructor.
-data JobStatistics2 = JobStatistics2'
-    { _jSchema                    :: !(Maybe TableSchema)
-    , _jTotalBytesProcessed       :: !(Maybe (Textual Int64))
-    , _jBillingTier               :: !(Maybe (Textual Int32))
-    , _jUndeclaredQueryParameters :: !(Maybe [QueryParameter])
-    , _jReferencedTables          :: !(Maybe [TableReference])
-    , _jStatementType             :: !(Maybe Text)
-    , _jNumDmlAffectedRows        :: !(Maybe (Textual Int64))
-    , _jQueryPlan                 :: !(Maybe [ExplainQueryStage])
-    , _jCacheHit                  :: !(Maybe Bool)
-    , _jTotalBytesBilled          :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobStatistics2' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jSchema'
---
--- * 'jTotalBytesProcessed'
---
--- * 'jBillingTier'
---
--- * 'jUndeclaredQueryParameters'
---
--- * 'jReferencedTables'
---
--- * 'jStatementType'
---
--- * 'jNumDmlAffectedRows'
---
--- * 'jQueryPlan'
---
--- * 'jCacheHit'
---
--- * 'jTotalBytesBilled'
-jobStatistics2
-    :: JobStatistics2
-jobStatistics2 =
-    JobStatistics2'
-    { _jSchema = Nothing
-    , _jTotalBytesProcessed = Nothing
-    , _jBillingTier = Nothing
-    , _jUndeclaredQueryParameters = Nothing
-    , _jReferencedTables = Nothing
-    , _jStatementType = Nothing
-    , _jNumDmlAffectedRows = Nothing
-    , _jQueryPlan = Nothing
-    , _jCacheHit = Nothing
-    , _jTotalBytesBilled = Nothing
-    }
-
--- | [Output-only, Experimental] The schema of the results. Present only for
--- successful dry run of non-legacy SQL queries.
-jSchema :: Lens' JobStatistics2 (Maybe TableSchema)
-jSchema = lens _jSchema (\ s a -> s{_jSchema = a})
-
--- | [Output-only] Total bytes processed for the job.
-jTotalBytesProcessed :: Lens' JobStatistics2 (Maybe Int64)
-jTotalBytesProcessed
-  = lens _jTotalBytesProcessed
-      (\ s a -> s{_jTotalBytesProcessed = a})
-      . mapping _Coerce
-
--- | [Output-only] Billing tier for the job.
-jBillingTier :: Lens' JobStatistics2 (Maybe Int32)
-jBillingTier
-  = lens _jBillingTier (\ s a -> s{_jBillingTier = a})
-      . mapping _Coerce
-
--- | [Output-only, Experimental] Standard SQL only: list of undeclared query
--- parameters detected during a dry run validation.
-jUndeclaredQueryParameters :: Lens' JobStatistics2 [QueryParameter]
-jUndeclaredQueryParameters
-  = lens _jUndeclaredQueryParameters
-      (\ s a -> s{_jUndeclaredQueryParameters = a})
-      . _Default
-      . _Coerce
-
--- | [Output-only, Experimental] Referenced tables for the job. Queries that
--- reference more than 50 tables will not have a complete list.
-jReferencedTables :: Lens' JobStatistics2 [TableReference]
-jReferencedTables
-  = lens _jReferencedTables
-      (\ s a -> s{_jReferencedTables = a})
-      . _Default
-      . _Coerce
-
--- | [Output-only, Experimental] The type of query statement, if valid.
-jStatementType :: Lens' JobStatistics2 (Maybe Text)
-jStatementType
-  = lens _jStatementType
-      (\ s a -> s{_jStatementType = a})
-
--- | [Output-only, Experimental] The number of rows affected by a DML
--- statement. Present only for DML statements INSERT, UPDATE or DELETE.
-jNumDmlAffectedRows :: Lens' JobStatistics2 (Maybe Int64)
-jNumDmlAffectedRows
-  = lens _jNumDmlAffectedRows
-      (\ s a -> s{_jNumDmlAffectedRows = a})
-      . mapping _Coerce
-
--- | [Output-only, Experimental] Describes execution plan for the query.
-jQueryPlan :: Lens' JobStatistics2 [ExplainQueryStage]
-jQueryPlan
-  = lens _jQueryPlan (\ s a -> s{_jQueryPlan = a}) .
-      _Default
-      . _Coerce
-
--- | [Output-only] Whether the query result was fetched from the query cache.
-jCacheHit :: Lens' JobStatistics2 (Maybe Bool)
-jCacheHit
-  = lens _jCacheHit (\ s a -> s{_jCacheHit = a})
-
--- | [Output-only] Total bytes billed for the job.
-jTotalBytesBilled :: Lens' JobStatistics2 (Maybe Int64)
-jTotalBytesBilled
-  = lens _jTotalBytesBilled
-      (\ s a -> s{_jTotalBytesBilled = a})
-      . mapping _Coerce
-
-instance FromJSON JobStatistics2 where
-        parseJSON
-          = withObject "JobStatistics2"
-              (\ o ->
-                 JobStatistics2' <$>
-                   (o .:? "schema") <*> (o .:? "totalBytesProcessed")
-                     <*> (o .:? "billingTier")
-                     <*> (o .:? "undeclaredQueryParameters" .!= mempty)
-                     <*> (o .:? "referencedTables" .!= mempty)
-                     <*> (o .:? "statementType")
-                     <*> (o .:? "numDmlAffectedRows")
-                     <*> (o .:? "queryPlan" .!= mempty)
-                     <*> (o .:? "cacheHit")
-                     <*> (o .:? "totalBytesBilled"))
-
-instance ToJSON JobStatistics2 where
-        toJSON JobStatistics2'{..}
-          = object
-              (catMaybes
-                 [("schema" .=) <$> _jSchema,
-                  ("totalBytesProcessed" .=) <$> _jTotalBytesProcessed,
-                  ("billingTier" .=) <$> _jBillingTier,
-                  ("undeclaredQueryParameters" .=) <$>
-                    _jUndeclaredQueryParameters,
-                  ("referencedTables" .=) <$> _jReferencedTables,
-                  ("statementType" .=) <$> _jStatementType,
-                  ("numDmlAffectedRows" .=) <$> _jNumDmlAffectedRows,
-                  ("queryPlan" .=) <$> _jQueryPlan,
-                  ("cacheHit" .=) <$> _jCacheHit,
-                  ("totalBytesBilled" .=) <$> _jTotalBytesBilled])
-
---
--- /See:/ 'jobStatus' smart constructor.
-data JobStatus = JobStatus'
-    { _jsState       :: !(Maybe Text)
-    , _jsErrorResult :: !(Maybe ErrorProto)
-    , _jsErrors      :: !(Maybe [ErrorProto])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jsState'
---
--- * 'jsErrorResult'
---
--- * 'jsErrors'
-jobStatus
-    :: JobStatus
-jobStatus =
-    JobStatus'
-    { _jsState = Nothing
-    , _jsErrorResult = Nothing
-    , _jsErrors = Nothing
-    }
-
--- | [Output-only] Running state of the job.
-jsState :: Lens' JobStatus (Maybe Text)
-jsState = lens _jsState (\ s a -> s{_jsState = a})
-
--- | [Output-only] Final error result of the job. If present, indicates that
--- the job has completed and was unsuccessful.
-jsErrorResult :: Lens' JobStatus (Maybe ErrorProto)
-jsErrorResult
-  = lens _jsErrorResult
-      (\ s a -> s{_jsErrorResult = a})
-
--- | [Output-only] All errors encountered during the running of the job.
--- Errors here do not necessarily mean that the job has completed or was
--- unsuccessful.
-jsErrors :: Lens' JobStatus [ErrorProto]
-jsErrors
-  = lens _jsErrors (\ s a -> s{_jsErrors = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON JobStatus where
-        parseJSON
-          = withObject "JobStatus"
-              (\ o ->
-                 JobStatus' <$>
-                   (o .:? "state") <*> (o .:? "errorResult") <*>
-                     (o .:? "errors" .!= mempty))
-
-instance ToJSON JobStatus where
-        toJSON JobStatus'{..}
-          = object
-              (catMaybes
-                 [("state" .=) <$> _jsState,
-                  ("errorResult" .=) <$> _jsErrorResult,
-                  ("errors" .=) <$> _jsErrors])
-
--- | [Experimental] The labels associated with this table. You can use these
--- to organize and group your tables. Label keys and values can be no
--- longer than 63 characters, can only contain letters, numeric characters,
--- underscores and dashes. International characters are allowed. Label
--- values are optional. Label keys must start with a letter and must be
--- unique within a dataset. Both keys and values are additionally
--- constrained to be \<= 128 bytes in size.
---
--- /See:/ 'tableLabels' smart constructor.
-newtype TableLabels = TableLabels'
-    { _tlAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableLabels' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tlAddtional'
-tableLabels
-    :: HashMap Text Text -- ^ 'tlAddtional'
-    -> TableLabels
-tableLabels pTlAddtional_ =
-    TableLabels'
-    { _tlAddtional = _Coerce # pTlAddtional_
-    }
-
-tlAddtional :: Lens' TableLabels (HashMap Text Text)
-tlAddtional
-  = lens _tlAddtional (\ s a -> s{_tlAddtional = a}) .
-      _Coerce
-
-instance FromJSON TableLabels where
-        parseJSON
-          = withObject "TableLabels"
-              (\ o -> TableLabels' <$> (parseJSONObject o))
-
-instance ToJSON TableLabels where
-        toJSON = toJSON . _tlAddtional
-
---
--- /See:/ 'dataSetAccessItem' smart constructor.
-data DataSetAccessItem = DataSetAccessItem'
-    { _dsaiGroupByEmail :: !(Maybe Text)
-    , _dsaiDomain       :: !(Maybe Text)
-    , _dsaiSpecialGroup :: !(Maybe Text)
-    , _dsaiRole         :: !(Maybe Text)
-    , _dsaiView         :: !(Maybe TableReference)
-    , _dsaiUserByEmail  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetAccessItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsaiGroupByEmail'
---
--- * 'dsaiDomain'
---
--- * 'dsaiSpecialGroup'
---
--- * 'dsaiRole'
---
--- * 'dsaiView'
---
--- * 'dsaiUserByEmail'
-dataSetAccessItem
-    :: DataSetAccessItem
-dataSetAccessItem =
-    DataSetAccessItem'
-    { _dsaiGroupByEmail = Nothing
-    , _dsaiDomain = Nothing
-    , _dsaiSpecialGroup = Nothing
-    , _dsaiRole = Nothing
-    , _dsaiView = Nothing
-    , _dsaiUserByEmail = Nothing
-    }
-
--- | [Pick one] An email address of a Google Group to grant access to.
-dsaiGroupByEmail :: Lens' DataSetAccessItem (Maybe Text)
-dsaiGroupByEmail
-  = lens _dsaiGroupByEmail
-      (\ s a -> s{_dsaiGroupByEmail = a})
-
--- | [Pick one] A domain to grant access to. Any users signed in with the
--- domain specified will be granted the specified access. Example:
--- \"example.com\".
-dsaiDomain :: Lens' DataSetAccessItem (Maybe Text)
-dsaiDomain
-  = lens _dsaiDomain (\ s a -> s{_dsaiDomain = a})
-
--- | [Pick one] A special group to grant access to. Possible values include:
--- projectOwners: Owners of the enclosing project. projectReaders: Readers
--- of the enclosing project. projectWriters: Writers of the enclosing
--- project. allAuthenticatedUsers: All authenticated BigQuery users.
-dsaiSpecialGroup :: Lens' DataSetAccessItem (Maybe Text)
-dsaiSpecialGroup
-  = lens _dsaiSpecialGroup
-      (\ s a -> s{_dsaiSpecialGroup = a})
-
--- | [Required] Describes the rights granted to the user specified by the
--- other member of the access object. The following string values are
--- supported: READER, WRITER, OWNER.
-dsaiRole :: Lens' DataSetAccessItem (Maybe Text)
-dsaiRole = lens _dsaiRole (\ s a -> s{_dsaiRole = a})
-
--- | [Pick one] A view from a different dataset to grant access to. Queries
--- executed against that view will have read access to tables in this
--- dataset. The role field is not required when this field is set. If that
--- view is updated by any user, access to the view needs to be granted
--- again via an update operation.
-dsaiView :: Lens' DataSetAccessItem (Maybe TableReference)
-dsaiView = lens _dsaiView (\ s a -> s{_dsaiView = a})
-
--- | [Pick one] An email address of a user to grant access to. For example:
--- fred\'example.com.
-dsaiUserByEmail :: Lens' DataSetAccessItem (Maybe Text)
-dsaiUserByEmail
-  = lens _dsaiUserByEmail
-      (\ s a -> s{_dsaiUserByEmail = a})
-
-instance FromJSON DataSetAccessItem where
-        parseJSON
-          = withObject "DataSetAccessItem"
-              (\ o ->
-                 DataSetAccessItem' <$>
-                   (o .:? "groupByEmail") <*> (o .:? "domain") <*>
-                     (o .:? "specialGroup")
-                     <*> (o .:? "role")
-                     <*> (o .:? "view")
-                     <*> (o .:? "userByEmail"))
-
-instance ToJSON DataSetAccessItem where
-        toJSON DataSetAccessItem'{..}
-          = object
-              (catMaybes
-                 [("groupByEmail" .=) <$> _dsaiGroupByEmail,
-                  ("domain" .=) <$> _dsaiDomain,
-                  ("specialGroup" .=) <$> _dsaiSpecialGroup,
-                  ("role" .=) <$> _dsaiRole, ("view" .=) <$> _dsaiView,
-                  ("userByEmail" .=) <$> _dsaiUserByEmail])
-
---
--- /See:/ 'tableDataInsertAllResponse' smart constructor.
-data TableDataInsertAllResponse = TableDataInsertAllResponse'
-    { _tKind         :: !Text
-    , _tInsertErrors :: !(Maybe [TableDataInsertAllResponseInsertErrorsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TableDataInsertAllResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tKind'
---
--- * 'tInsertErrors'
-tableDataInsertAllResponse
-    :: TableDataInsertAllResponse
-tableDataInsertAllResponse =
-    TableDataInsertAllResponse'
-    { _tKind = "bigquery#tableDataInsertAllResponse"
-    , _tInsertErrors = Nothing
-    }
-
--- | The resource type of the response.
-tKind :: Lens' TableDataInsertAllResponse Text
-tKind = lens _tKind (\ s a -> s{_tKind = a})
-
--- | An array of errors for rows that were not inserted.
-tInsertErrors :: Lens' TableDataInsertAllResponse [TableDataInsertAllResponseInsertErrorsItem]
-tInsertErrors
-  = lens _tInsertErrors
-      (\ s a -> s{_tInsertErrors = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TableDataInsertAllResponse where
-        parseJSON
-          = withObject "TableDataInsertAllResponse"
-              (\ o ->
-                 TableDataInsertAllResponse' <$>
-                   (o .:? "kind" .!=
-                      "bigquery#tableDataInsertAllResponse")
-                     <*> (o .:? "insertErrors" .!= mempty))
-
-instance ToJSON TableDataInsertAllResponse where
-        toJSON TableDataInsertAllResponse'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _tKind),
-                  ("insertErrors" .=) <$> _tInsertErrors])
-
---
--- /See:/ 'queryParameterType' smart constructor.
-data QueryParameterType = QueryParameterType'
-    { _qptStructTypes :: !(Maybe [QueryParameterTypeStructTypesItem])
-    , _qptType        :: !(Maybe Text)
-    , _qptArrayType   :: !(Maybe QueryParameterType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryParameterType' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qptStructTypes'
---
--- * 'qptType'
---
--- * 'qptArrayType'
-queryParameterType
-    :: QueryParameterType
-queryParameterType =
-    QueryParameterType'
-    { _qptStructTypes = Nothing
-    , _qptType = Nothing
-    , _qptArrayType = Nothing
-    }
-
--- | [Optional] The types of the fields of this struct, in order, if this is
--- a struct.
-qptStructTypes :: Lens' QueryParameterType [QueryParameterTypeStructTypesItem]
-qptStructTypes
-  = lens _qptStructTypes
-      (\ s a -> s{_qptStructTypes = a})
-      . _Default
-      . _Coerce
-
--- | [Required] The top level type of this field.
-qptType :: Lens' QueryParameterType (Maybe Text)
-qptType = lens _qptType (\ s a -> s{_qptType = a})
-
--- | [Optional] The type of the array\'s elements, if this is an array.
-qptArrayType :: Lens' QueryParameterType (Maybe QueryParameterType)
-qptArrayType
-  = lens _qptArrayType (\ s a -> s{_qptArrayType = a})
-
-instance FromJSON QueryParameterType where
-        parseJSON
-          = withObject "QueryParameterType"
-              (\ o ->
-                 QueryParameterType' <$>
-                   (o .:? "structTypes" .!= mempty) <*> (o .:? "type")
-                     <*> (o .:? "arrayType"))
-
-instance ToJSON QueryParameterType where
-        toJSON QueryParameterType'{..}
-          = object
-              (catMaybes
-                 [("structTypes" .=) <$> _qptStructTypes,
-                  ("type" .=) <$> _qptType,
-                  ("arrayType" .=) <$> _qptArrayType])
-
---
--- /See:/ 'table' smart constructor.
-data Table = Table'
-    { _tabCreationTime              :: !(Maybe (Textual Int64))
-    , _tabEtag                      :: !(Maybe Text)
-    , _tabNumBytes                  :: !(Maybe (Textual Int64))
-    , _tabExternalDataConfiguration :: !(Maybe ExternalDataConfiguration)
-    , _tabLocation                  :: !(Maybe Text)
-    , _tabTableReference            :: !(Maybe TableReference)
-    , _tabFriendlyName              :: !(Maybe Text)
-    , _tabKind                      :: !Text
-    , _tabLastModifiedTime          :: !(Maybe (Textual Word64))
-    , _tabSchema                    :: !(Maybe TableSchema)
-    , _tabStreamingBuffer           :: !(Maybe Streamingbuffer)
-    , _tabSelfLink                  :: !(Maybe Text)
-    , _tabTimePartitioning          :: !(Maybe TimePartitioning)
-    , _tabNumRows                   :: !(Maybe (Textual Word64))
-    , _tabView                      :: !(Maybe ViewDefinition)
-    , _tabId                        :: !(Maybe Text)
-    , _tabLabels                    :: !(Maybe TableLabels)
-    , _tabType                      :: !(Maybe Text)
-    , _tabNumLongTermBytes          :: !(Maybe (Textual Int64))
-    , _tabExpirationTime            :: !(Maybe (Textual Int64))
-    , _tabDescription               :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Table' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tabCreationTime'
---
--- * 'tabEtag'
---
--- * 'tabNumBytes'
---
--- * 'tabExternalDataConfiguration'
---
--- * 'tabLocation'
---
--- * 'tabTableReference'
---
--- * 'tabFriendlyName'
---
--- * 'tabKind'
---
--- * 'tabLastModifiedTime'
---
--- * 'tabSchema'
---
--- * 'tabStreamingBuffer'
---
--- * 'tabSelfLink'
---
--- * 'tabTimePartitioning'
---
--- * 'tabNumRows'
---
--- * 'tabView'
---
--- * 'tabId'
---
--- * 'tabLabels'
---
--- * 'tabType'
---
--- * 'tabNumLongTermBytes'
---
--- * 'tabExpirationTime'
---
--- * 'tabDescription'
-table
-    :: Table
-table =
-    Table'
-    { _tabCreationTime = Nothing
-    , _tabEtag = Nothing
-    , _tabNumBytes = Nothing
-    , _tabExternalDataConfiguration = Nothing
-    , _tabLocation = Nothing
-    , _tabTableReference = Nothing
-    , _tabFriendlyName = Nothing
-    , _tabKind = "bigquery#table"
-    , _tabLastModifiedTime = Nothing
-    , _tabSchema = Nothing
-    , _tabStreamingBuffer = Nothing
-    , _tabSelfLink = Nothing
-    , _tabTimePartitioning = Nothing
-    , _tabNumRows = Nothing
-    , _tabView = Nothing
-    , _tabId = Nothing
-    , _tabLabels = Nothing
-    , _tabType = Nothing
-    , _tabNumLongTermBytes = Nothing
-    , _tabExpirationTime = Nothing
-    , _tabDescription = Nothing
-    }
-
--- | [Output-only] The time when this table was created, in milliseconds
--- since the epoch.
-tabCreationTime :: Lens' Table (Maybe Int64)
-tabCreationTime
-  = lens _tabCreationTime
-      (\ s a -> s{_tabCreationTime = a})
-      . mapping _Coerce
-
--- | [Output-only] A hash of this resource.
-tabEtag :: Lens' Table (Maybe Text)
-tabEtag = lens _tabEtag (\ s a -> s{_tabEtag = a})
-
--- | [Output-only] The size of this table in bytes, excluding any data in the
--- streaming buffer.
-tabNumBytes :: Lens' Table (Maybe Int64)
-tabNumBytes
-  = lens _tabNumBytes (\ s a -> s{_tabNumBytes = a}) .
-      mapping _Coerce
-
--- | [Optional] Describes the data format, location, and other properties of
--- a table stored outside of BigQuery. By defining these properties, the
--- data source can then be queried as if it were a standard BigQuery table.
-tabExternalDataConfiguration :: Lens' Table (Maybe ExternalDataConfiguration)
-tabExternalDataConfiguration
-  = lens _tabExternalDataConfiguration
-      (\ s a -> s{_tabExternalDataConfiguration = a})
-
--- | [Output-only] The geographic location where the table resides. This
--- value is inherited from the dataset.
-tabLocation :: Lens' Table (Maybe Text)
-tabLocation
-  = lens _tabLocation (\ s a -> s{_tabLocation = a})
-
--- | [Required] Reference describing the ID of this table.
-tabTableReference :: Lens' Table (Maybe TableReference)
-tabTableReference
-  = lens _tabTableReference
-      (\ s a -> s{_tabTableReference = a})
-
--- | [Optional] A descriptive name for this table.
-tabFriendlyName :: Lens' Table (Maybe Text)
-tabFriendlyName
-  = lens _tabFriendlyName
-      (\ s a -> s{_tabFriendlyName = a})
-
--- | [Output-only] The type of the resource.
-tabKind :: Lens' Table Text
-tabKind = lens _tabKind (\ s a -> s{_tabKind = a})
-
--- | [Output-only] The time when this table was last modified, in
--- milliseconds since the epoch.
-tabLastModifiedTime :: Lens' Table (Maybe Word64)
-tabLastModifiedTime
-  = lens _tabLastModifiedTime
-      (\ s a -> s{_tabLastModifiedTime = a})
-      . mapping _Coerce
-
--- | [Optional] Describes the schema of this table.
-tabSchema :: Lens' Table (Maybe TableSchema)
-tabSchema
-  = lens _tabSchema (\ s a -> s{_tabSchema = a})
-
--- | [Output-only] Contains information regarding this table\'s streaming
--- buffer, if one is present. This field will be absent if the table is not
--- being streamed to or if there is no data in the streaming buffer.
-tabStreamingBuffer :: Lens' Table (Maybe Streamingbuffer)
-tabStreamingBuffer
-  = lens _tabStreamingBuffer
-      (\ s a -> s{_tabStreamingBuffer = a})
-
--- | [Output-only] A URL that can be used to access this resource again.
-tabSelfLink :: Lens' Table (Maybe Text)
-tabSelfLink
-  = lens _tabSelfLink (\ s a -> s{_tabSelfLink = a})
-
--- | [Experimental] If specified, configures time-based partitioning for this
--- table.
-tabTimePartitioning :: Lens' Table (Maybe TimePartitioning)
-tabTimePartitioning
-  = lens _tabTimePartitioning
-      (\ s a -> s{_tabTimePartitioning = a})
-
--- | [Output-only] The number of rows of data in this table, excluding any
--- data in the streaming buffer.
-tabNumRows :: Lens' Table (Maybe Word64)
-tabNumRows
-  = lens _tabNumRows (\ s a -> s{_tabNumRows = a}) .
-      mapping _Coerce
-
--- | [Optional] The view definition.
-tabView :: Lens' Table (Maybe ViewDefinition)
-tabView = lens _tabView (\ s a -> s{_tabView = a})
-
--- | [Output-only] An opaque ID uniquely identifying the table.
-tabId :: Lens' Table (Maybe Text)
-tabId = lens _tabId (\ s a -> s{_tabId = a})
-
--- | [Experimental] The labels associated with this table. You can use these
--- to organize and group your tables. Label keys and values can be no
--- longer than 63 characters, can only contain letters, numeric characters,
--- underscores and dashes. International characters are allowed. Label
--- values are optional. Label keys must start with a letter and must be
--- unique within a dataset. Both keys and values are additionally
--- constrained to be \<= 128 bytes in size.
-tabLabels :: Lens' Table (Maybe TableLabels)
-tabLabels
-  = lens _tabLabels (\ s a -> s{_tabLabels = a})
-
--- | [Output-only] Describes the table type. The following values are
--- supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined
--- by a SQL query. EXTERNAL: A table that references data stored in an
--- external storage system, such as Google Cloud Storage. The default value
--- is TABLE.
-tabType :: Lens' Table (Maybe Text)
-tabType = lens _tabType (\ s a -> s{_tabType = a})
-
--- | [Output-only] The number of bytes in the table that are considered
--- \"long-term storage\".
-tabNumLongTermBytes :: Lens' Table (Maybe Int64)
-tabNumLongTermBytes
-  = lens _tabNumLongTermBytes
-      (\ s a -> s{_tabNumLongTermBytes = a})
-      . mapping _Coerce
-
--- | [Optional] The time when this table expires, in milliseconds since the
--- epoch. If not present, the table will persist indefinitely. Expired
--- tables will be deleted and their storage reclaimed.
-tabExpirationTime :: Lens' Table (Maybe Int64)
-tabExpirationTime
-  = lens _tabExpirationTime
-      (\ s a -> s{_tabExpirationTime = a})
-      . mapping _Coerce
-
--- | [Optional] A user-friendly description of this table.
-tabDescription :: Lens' Table (Maybe Text)
-tabDescription
-  = lens _tabDescription
-      (\ s a -> s{_tabDescription = a})
-
-instance FromJSON Table where
-        parseJSON
-          = withObject "Table"
-              (\ o ->
-                 Table' <$>
-                   (o .:? "creationTime") <*> (o .:? "etag") <*>
-                     (o .:? "numBytes")
-                     <*> (o .:? "externalDataConfiguration")
-                     <*> (o .:? "location")
-                     <*> (o .:? "tableReference")
-                     <*> (o .:? "friendlyName")
-                     <*> (o .:? "kind" .!= "bigquery#table")
-                     <*> (o .:? "lastModifiedTime")
-                     <*> (o .:? "schema")
-                     <*> (o .:? "streamingBuffer")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "timePartitioning")
-                     <*> (o .:? "numRows")
-                     <*> (o .:? "view")
-                     <*> (o .:? "id")
-                     <*> (o .:? "labels")
-                     <*> (o .:? "type")
-                     <*> (o .:? "numLongTermBytes")
-                     <*> (o .:? "expirationTime")
-                     <*> (o .:? "description"))
-
-instance ToJSON Table where
-        toJSON Table'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _tabCreationTime,
-                  ("etag" .=) <$> _tabEtag,
-                  ("numBytes" .=) <$> _tabNumBytes,
-                  ("externalDataConfiguration" .=) <$>
-                    _tabExternalDataConfiguration,
-                  ("location" .=) <$> _tabLocation,
-                  ("tableReference" .=) <$> _tabTableReference,
-                  ("friendlyName" .=) <$> _tabFriendlyName,
-                  Just ("kind" .= _tabKind),
-                  ("lastModifiedTime" .=) <$> _tabLastModifiedTime,
-                  ("schema" .=) <$> _tabSchema,
-                  ("streamingBuffer" .=) <$> _tabStreamingBuffer,
-                  ("selfLink" .=) <$> _tabSelfLink,
-                  ("timePartitioning" .=) <$> _tabTimePartitioning,
-                  ("numRows" .=) <$> _tabNumRows,
-                  ("view" .=) <$> _tabView, ("id" .=) <$> _tabId,
-                  ("labels" .=) <$> _tabLabels,
-                  ("type" .=) <$> _tabType,
-                  ("numLongTermBytes" .=) <$> _tabNumLongTermBytes,
-                  ("expirationTime" .=) <$> _tabExpirationTime,
-                  ("description" .=) <$> _tabDescription])
-
---
--- /See:/ 'errorProto' smart constructor.
-data ErrorProto = ErrorProto'
-    { _epDebugInfo :: !(Maybe Text)
-    , _epLocation  :: !(Maybe Text)
-    , _epReason    :: !(Maybe Text)
-    , _epMessage   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ErrorProto' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'epDebugInfo'
---
--- * 'epLocation'
---
--- * 'epReason'
---
--- * 'epMessage'
-errorProto
-    :: ErrorProto
-errorProto =
-    ErrorProto'
-    { _epDebugInfo = Nothing
-    , _epLocation = Nothing
-    , _epReason = Nothing
-    , _epMessage = Nothing
-    }
-
--- | Debugging information. This property is internal to Google and should
--- not be used.
-epDebugInfo :: Lens' ErrorProto (Maybe Text)
-epDebugInfo
-  = lens _epDebugInfo (\ s a -> s{_epDebugInfo = a})
-
--- | Specifies where the error occurred, if present.
-epLocation :: Lens' ErrorProto (Maybe Text)
-epLocation
-  = lens _epLocation (\ s a -> s{_epLocation = a})
-
--- | A short error code that summarizes the error.
-epReason :: Lens' ErrorProto (Maybe Text)
-epReason = lens _epReason (\ s a -> s{_epReason = a})
-
--- | A human-readable description of the error.
-epMessage :: Lens' ErrorProto (Maybe Text)
-epMessage
-  = lens _epMessage (\ s a -> s{_epMessage = a})
-
-instance FromJSON ErrorProto where
-        parseJSON
-          = withObject "ErrorProto"
-              (\ o ->
-                 ErrorProto' <$>
-                   (o .:? "debugInfo") <*> (o .:? "location") <*>
-                     (o .:? "reason")
-                     <*> (o .:? "message"))
-
-instance ToJSON ErrorProto where
-        toJSON ErrorProto'{..}
-          = object
-              (catMaybes
-                 [("debugInfo" .=) <$> _epDebugInfo,
-                  ("location" .=) <$> _epLocation,
-                  ("reason" .=) <$> _epReason,
-                  ("message" .=) <$> _epMessage])
-
---
--- /See:/ 'csvOptions' smart constructor.
-data CSVOptions = CSVOptions'
-    { _coSkipLeadingRows     :: !(Maybe (Textual Int64))
-    , _coAllowJaggedRows     :: !(Maybe Bool)
-    , _coAllowQuotedNewlines :: !(Maybe Bool)
-    , _coQuote               :: !Text
-    , _coEncoding            :: !(Maybe Text)
-    , _coFieldDelimiter      :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CSVOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'coSkipLeadingRows'
---
--- * 'coAllowJaggedRows'
---
--- * 'coAllowQuotedNewlines'
---
--- * 'coQuote'
---
--- * 'coEncoding'
---
--- * 'coFieldDelimiter'
-csvOptions
-    :: CSVOptions
-csvOptions =
-    CSVOptions'
-    { _coSkipLeadingRows = Nothing
-    , _coAllowJaggedRows = Nothing
-    , _coAllowQuotedNewlines = Nothing
-    , _coQuote = "\""
-    , _coEncoding = Nothing
-    , _coFieldDelimiter = Nothing
-    }
-
--- | [Optional] The number of rows at the top of a CSV file that BigQuery
--- will skip when reading the data. The default value is 0. This property
--- is useful if you have header rows in the file that should be skipped.
-coSkipLeadingRows :: Lens' CSVOptions (Maybe Int64)
-coSkipLeadingRows
-  = lens _coSkipLeadingRows
-      (\ s a -> s{_coSkipLeadingRows = a})
-      . mapping _Coerce
-
--- | [Optional] Indicates if BigQuery should accept rows that are missing
--- trailing optional columns. If true, BigQuery treats missing trailing
--- columns as null values. If false, records with missing trailing columns
--- are treated as bad records, and if there are too many bad records, an
--- invalid error is returned in the job result. The default value is false.
-coAllowJaggedRows :: Lens' CSVOptions (Maybe Bool)
-coAllowJaggedRows
-  = lens _coAllowJaggedRows
-      (\ s a -> s{_coAllowJaggedRows = a})
-
--- | [Optional] Indicates if BigQuery should allow quoted data sections that
--- contain newline characters in a CSV file. The default value is false.
-coAllowQuotedNewlines :: Lens' CSVOptions (Maybe Bool)
-coAllowQuotedNewlines
-  = lens _coAllowQuotedNewlines
-      (\ s a -> s{_coAllowQuotedNewlines = a})
-
--- | [Optional] The value that is used to quote data sections in a CSV file.
--- BigQuery converts the string to ISO-8859-1 encoding, and then uses the
--- first byte of the encoded string to split the data in its raw, binary
--- state. The default value is a double-quote (\'\"\'). If your data does
--- not contain quoted sections, set the property value to an empty string.
--- If your data contains quoted newline characters, you must also set the
--- allowQuotedNewlines property to true.
-coQuote :: Lens' CSVOptions Text
-coQuote = lens _coQuote (\ s a -> s{_coQuote = a})
-
--- | [Optional] The character encoding of the data. The supported values are
--- UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the
--- data after the raw, binary data has been split using the values of the
--- quote and fieldDelimiter properties.
-coEncoding :: Lens' CSVOptions (Maybe Text)
-coEncoding
-  = lens _coEncoding (\ s a -> s{_coEncoding = a})
-
--- | [Optional] The separator for fields in a CSV file. BigQuery converts the
--- string to ISO-8859-1 encoding, and then uses the first byte of the
--- encoded string to split the data in its raw, binary state. BigQuery also
--- supports the escape sequence \"\\t\" to specify a tab separator. The
--- default value is a comma (\',\').
-coFieldDelimiter :: Lens' CSVOptions (Maybe Text)
-coFieldDelimiter
-  = lens _coFieldDelimiter
-      (\ s a -> s{_coFieldDelimiter = a})
-
-instance FromJSON CSVOptions where
-        parseJSON
-          = withObject "CSVOptions"
-              (\ o ->
-                 CSVOptions' <$>
-                   (o .:? "skipLeadingRows") <*>
-                     (o .:? "allowJaggedRows")
-                     <*> (o .:? "allowQuotedNewlines")
-                     <*> (o .:? "quote" .!= "\"")
-                     <*> (o .:? "encoding")
-                     <*> (o .:? "fieldDelimiter"))
-
-instance ToJSON CSVOptions where
-        toJSON CSVOptions'{..}
-          = object
-              (catMaybes
-                 [("skipLeadingRows" .=) <$> _coSkipLeadingRows,
-                  ("allowJaggedRows" .=) <$> _coAllowJaggedRows,
-                  ("allowQuotedNewlines" .=) <$>
-                    _coAllowQuotedNewlines,
-                  Just ("quote" .= _coQuote),
-                  ("encoding" .=) <$> _coEncoding,
-                  ("fieldDelimiter" .=) <$> _coFieldDelimiter])
-
---
--- /See:/ 'jobStatistics3' smart constructor.
-data JobStatistics3 = JobStatistics3'
-    { _jsInputFiles     :: !(Maybe (Textual Int64))
-    , _jsOutputRows     :: !(Maybe (Textual Int64))
-    , _jsOutputBytes    :: !(Maybe (Textual Int64))
-    , _jsInputFileBytes :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'JobStatistics3' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jsInputFiles'
---
--- * 'jsOutputRows'
---
--- * 'jsOutputBytes'
---
--- * 'jsInputFileBytes'
-jobStatistics3
-    :: JobStatistics3
-jobStatistics3 =
-    JobStatistics3'
-    { _jsInputFiles = Nothing
-    , _jsOutputRows = Nothing
-    , _jsOutputBytes = Nothing
-    , _jsInputFileBytes = Nothing
-    }
-
--- | [Output-only] Number of source files in a load job.
-jsInputFiles :: Lens' JobStatistics3 (Maybe Int64)
-jsInputFiles
-  = lens _jsInputFiles (\ s a -> s{_jsInputFiles = a})
-      . mapping _Coerce
-
--- | [Output-only] Number of rows imported in a load job. Note that while an
--- import job is in the running state, this value may change.
-jsOutputRows :: Lens' JobStatistics3 (Maybe Int64)
-jsOutputRows
-  = lens _jsOutputRows (\ s a -> s{_jsOutputRows = a})
-      . mapping _Coerce
-
--- | [Output-only] Size of the loaded data in bytes. Note that while a load
--- job is in the running state, this value may change.
-jsOutputBytes :: Lens' JobStatistics3 (Maybe Int64)
-jsOutputBytes
-  = lens _jsOutputBytes
-      (\ s a -> s{_jsOutputBytes = a})
-      . mapping _Coerce
-
--- | [Output-only] Number of bytes of source data in a load job.
-jsInputFileBytes :: Lens' JobStatistics3 (Maybe Int64)
-jsInputFileBytes
-  = lens _jsInputFileBytes
-      (\ s a -> s{_jsInputFileBytes = a})
-      . mapping _Coerce
-
-instance FromJSON JobStatistics3 where
-        parseJSON
-          = withObject "JobStatistics3"
-              (\ o ->
-                 JobStatistics3' <$>
-                   (o .:? "inputFiles") <*> (o .:? "outputRows") <*>
-                     (o .:? "outputBytes")
-                     <*> (o .:? "inputFileBytes"))
-
-instance ToJSON JobStatistics3 where
-        toJSON JobStatistics3'{..}
-          = object
-              (catMaybes
-                 [("inputFiles" .=) <$> _jsInputFiles,
-                  ("outputRows" .=) <$> _jsOutputRows,
-                  ("outputBytes" .=) <$> _jsOutputBytes,
-                  ("inputFileBytes" .=) <$> _jsInputFileBytes])
-
---
--- /See:/ 'queryResponse' smart constructor.
-data QueryResponse = QueryResponse'
-    { _qJobReference        :: !(Maybe JobReference)
-    , _qKind                :: !Text
-    , _qSchema              :: !(Maybe TableSchema)
-    , _qTotalBytesProcessed :: !(Maybe (Textual Int64))
-    , _qRows                :: !(Maybe [TableRow])
-    , _qPageToken           :: !(Maybe Text)
-    , _qNumDmlAffectedRows  :: !(Maybe (Textual Int64))
-    , _qTotalRows           :: !(Maybe (Textual Word64))
-    , _qErrors              :: !(Maybe [ErrorProto])
-    , _qJobComplete         :: !(Maybe Bool)
-    , _qCacheHit            :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qJobReference'
---
--- * 'qKind'
---
--- * 'qSchema'
---
--- * 'qTotalBytesProcessed'
---
--- * 'qRows'
---
--- * 'qPageToken'
---
--- * 'qNumDmlAffectedRows'
---
--- * 'qTotalRows'
---
--- * 'qErrors'
---
--- * 'qJobComplete'
---
--- * 'qCacheHit'
-queryResponse
-    :: QueryResponse
-queryResponse =
-    QueryResponse'
-    { _qJobReference = Nothing
-    , _qKind = "bigquery#queryResponse"
-    , _qSchema = Nothing
-    , _qTotalBytesProcessed = Nothing
-    , _qRows = Nothing
-    , _qPageToken = Nothing
-    , _qNumDmlAffectedRows = Nothing
-    , _qTotalRows = Nothing
-    , _qErrors = Nothing
-    , _qJobComplete = Nothing
-    , _qCacheHit = Nothing
-    }
-
--- | Reference to the Job that was created to run the query. This field will
--- be present even if the original request timed out, in which case
--- GetQueryResults can be used to read the results once the query has
--- completed. Since this API only returns the first page of results,
--- subsequent pages can be fetched via the same mechanism
--- (GetQueryResults).
-qJobReference :: Lens' QueryResponse (Maybe JobReference)
-qJobReference
-  = lens _qJobReference
-      (\ s a -> s{_qJobReference = a})
-
--- | The resource type.
-qKind :: Lens' QueryResponse Text
-qKind = lens _qKind (\ s a -> s{_qKind = a})
-
--- | The schema of the results. Present only when the query completes
--- successfully.
-qSchema :: Lens' QueryResponse (Maybe TableSchema)
-qSchema = lens _qSchema (\ s a -> s{_qSchema = a})
-
--- | The total number of bytes processed for this query. If this query was a
--- dry run, this is the number of bytes that would be processed if the
--- query were run.
-qTotalBytesProcessed :: Lens' QueryResponse (Maybe Int64)
-qTotalBytesProcessed
-  = lens _qTotalBytesProcessed
-      (\ s a -> s{_qTotalBytesProcessed = a})
-      . mapping _Coerce
-
--- | An object with as many results as can be contained within the maximum
--- permitted reply size. To get any additional rows, you can call
--- GetQueryResults and specify the jobReference returned above.
-qRows :: Lens' QueryResponse [TableRow]
-qRows
-  = lens _qRows (\ s a -> s{_qRows = a}) . _Default .
-      _Coerce
-
--- | A token used for paging results.
-qPageToken :: Lens' QueryResponse (Maybe Text)
-qPageToken
-  = lens _qPageToken (\ s a -> s{_qPageToken = a})
-
--- | [Output-only, Experimental] The number of rows affected by a DML
--- statement. Present only for DML statements INSERT, UPDATE or DELETE.
-qNumDmlAffectedRows :: Lens' QueryResponse (Maybe Int64)
-qNumDmlAffectedRows
-  = lens _qNumDmlAffectedRows
-      (\ s a -> s{_qNumDmlAffectedRows = a})
-      . mapping _Coerce
-
--- | The total number of rows in the complete query result set, which can be
--- more than the number of rows in this single page of results.
-qTotalRows :: Lens' QueryResponse (Maybe Word64)
-qTotalRows
-  = lens _qTotalRows (\ s a -> s{_qTotalRows = a}) .
-      mapping _Coerce
-
--- | [Output-only] All errors and warnings encountered during the running of
--- the job. Errors here do not necessarily mean that the job has completed
--- or was unsuccessful.
-qErrors :: Lens' QueryResponse [ErrorProto]
-qErrors
-  = lens _qErrors (\ s a -> s{_qErrors = a}) . _Default
-      . _Coerce
-
--- | Whether the query has completed or not. If rows or totalRows are
--- present, this will always be true. If this is false, totalRows will not
--- be available.
-qJobComplete :: Lens' QueryResponse (Maybe Bool)
-qJobComplete
-  = lens _qJobComplete (\ s a -> s{_qJobComplete = a})
-
--- | Whether the query result was fetched from the query cache.
-qCacheHit :: Lens' QueryResponse (Maybe Bool)
-qCacheHit
-  = lens _qCacheHit (\ s a -> s{_qCacheHit = a})
-
-instance FromJSON QueryResponse where
-        parseJSON
-          = withObject "QueryResponse"
-              (\ o ->
-                 QueryResponse' <$>
-                   (o .:? "jobReference") <*>
-                     (o .:? "kind" .!= "bigquery#queryResponse")
-                     <*> (o .:? "schema")
-                     <*> (o .:? "totalBytesProcessed")
-                     <*> (o .:? "rows" .!= mempty)
-                     <*> (o .:? "pageToken")
-                     <*> (o .:? "numDmlAffectedRows")
-                     <*> (o .:? "totalRows")
-                     <*> (o .:? "errors" .!= mempty)
-                     <*> (o .:? "jobComplete")
-                     <*> (o .:? "cacheHit"))
-
-instance ToJSON QueryResponse where
-        toJSON QueryResponse'{..}
-          = object
-              (catMaybes
-                 [("jobReference" .=) <$> _qJobReference,
-                  Just ("kind" .= _qKind), ("schema" .=) <$> _qSchema,
-                  ("totalBytesProcessed" .=) <$> _qTotalBytesProcessed,
-                  ("rows" .=) <$> _qRows,
-                  ("pageToken" .=) <$> _qPageToken,
-                  ("numDmlAffectedRows" .=) <$> _qNumDmlAffectedRows,
-                  ("totalRows" .=) <$> _qTotalRows,
-                  ("errors" .=) <$> _qErrors,
-                  ("jobComplete" .=) <$> _qJobComplete,
-                  ("cacheHit" .=) <$> _qCacheHit])
-
--- | [Experimental] The labels associated with this dataset. You can use
--- these to organize and group your datasets.
---
--- /See:/ 'dataSetListDataSetsItemLabels' smart constructor.
-newtype DataSetListDataSetsItemLabels = DataSetListDataSetsItemLabels'
-    { _dsldsilAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetListDataSetsItemLabels' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsldsilAddtional'
-dataSetListDataSetsItemLabels
-    :: HashMap Text Text -- ^ 'dsldsilAddtional'
-    -> DataSetListDataSetsItemLabels
-dataSetListDataSetsItemLabels pDsldsilAddtional_ =
-    DataSetListDataSetsItemLabels'
-    { _dsldsilAddtional = _Coerce # pDsldsilAddtional_
-    }
-
-dsldsilAddtional :: Lens' DataSetListDataSetsItemLabels (HashMap Text Text)
-dsldsilAddtional
-  = lens _dsldsilAddtional
-      (\ s a -> s{_dsldsilAddtional = a})
-      . _Coerce
-
-instance FromJSON DataSetListDataSetsItemLabels where
-        parseJSON
-          = withObject "DataSetListDataSetsItemLabels"
-              (\ o ->
-                 DataSetListDataSetsItemLabels' <$>
-                   (parseJSONObject o))
-
-instance ToJSON DataSetListDataSetsItemLabels where
-        toJSON = toJSON . _dsldsilAddtional
-
--- | [Experimental] The labels associated with this table. You can use these
--- to organize and group your tables.
+    , _jrLocation  :: !(Maybe Text)
+    , _jrProjectId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jrJobId'
+--
+-- * 'jrLocation'
+--
+-- * 'jrProjectId'
+jobReference
+    :: JobReference
+jobReference =
+    JobReference'
+    { _jrJobId = Nothing
+    , _jrLocation = Nothing
+    , _jrProjectId = Nothing
+    }
+
+-- | [Required] The ID of the job. The ID must contain only letters (a-z,
+-- A-Z), numbers (0-9), underscores (_), or dashes (-). The maximum length
+-- is 1,024 characters.
+jrJobId :: Lens' JobReference (Maybe Text)
+jrJobId = lens _jrJobId (\ s a -> s{_jrJobId = a})
+
+-- | The geographic location of the job. See details at
+-- https:\/\/cloud.google.com\/bigquery\/docs\/locations#specifying_your_location.
+jrLocation :: Lens' JobReference (Maybe Text)
+jrLocation
+  = lens _jrLocation (\ s a -> s{_jrLocation = a})
+
+-- | [Required] The ID of the project containing this job.
+jrProjectId :: Lens' JobReference (Maybe Text)
+jrProjectId
+  = lens _jrProjectId (\ s a -> s{_jrProjectId = a})
+
+instance FromJSON JobReference where
+        parseJSON
+          = withObject "JobReference"
+              (\ o ->
+                 JobReference' <$>
+                   (o .:? "jobId") <*> (o .:? "location") <*>
+                     (o .:? "projectId"))
+
+instance ToJSON JobReference where
+        toJSON JobReference'{..}
+          = object
+              (catMaybes
+                 [("jobId" .=) <$> _jrJobId,
+                  ("location" .=) <$> _jrLocation,
+                  ("projectId" .=) <$> _jrProjectId])
+
+--
+-- /See:/ 'tableList' smart constructor.
+data TableList = TableList'
+    { _tlTotalItems    :: !(Maybe (Textual Int32))
+    , _tlEtag          :: !(Maybe Text)
+    , _tlNextPageToken :: !(Maybe Text)
+    , _tlKind          :: !Text
+    , _tlTables        :: !(Maybe [TableListTablesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tlTotalItems'
+--
+-- * 'tlEtag'
+--
+-- * 'tlNextPageToken'
+--
+-- * 'tlKind'
+--
+-- * 'tlTables'
+tableList
+    :: TableList
+tableList =
+    TableList'
+    { _tlTotalItems = Nothing
+    , _tlEtag = Nothing
+    , _tlNextPageToken = Nothing
+    , _tlKind = "bigquery#tableList"
+    , _tlTables = Nothing
+    }
+
+-- | The total number of tables in the dataset.
+tlTotalItems :: Lens' TableList (Maybe Int32)
+tlTotalItems
+  = lens _tlTotalItems (\ s a -> s{_tlTotalItems = a})
+      . mapping _Coerce
+
+-- | A hash of this page of results.
+tlEtag :: Lens' TableList (Maybe Text)
+tlEtag = lens _tlEtag (\ s a -> s{_tlEtag = a})
+
+-- | A token to request the next page of results.
+tlNextPageToken :: Lens' TableList (Maybe Text)
+tlNextPageToken
+  = lens _tlNextPageToken
+      (\ s a -> s{_tlNextPageToken = a})
+
+-- | The type of list.
+tlKind :: Lens' TableList Text
+tlKind = lens _tlKind (\ s a -> s{_tlKind = a})
+
+-- | Tables in the requested dataset.
+tlTables :: Lens' TableList [TableListTablesItem]
+tlTables
+  = lens _tlTables (\ s a -> s{_tlTables = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON TableList where
+        parseJSON
+          = withObject "TableList"
+              (\ o ->
+                 TableList' <$>
+                   (o .:? "totalItems") <*> (o .:? "etag") <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "kind" .!= "bigquery#tableList")
+                     <*> (o .:? "tables" .!= mempty))
+
+instance ToJSON TableList where
+        toJSON TableList'{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _tlTotalItems,
+                  ("etag" .=) <$> _tlEtag,
+                  ("nextPageToken" .=) <$> _tlNextPageToken,
+                  Just ("kind" .= _tlKind),
+                  ("tables" .=) <$> _tlTables])
+
+--
+-- /See:/ 'dataSetListDataSetsItem' smart constructor.
+data DataSetListDataSetsItem = DataSetListDataSetsItem'
+    { _dsldsiLocation         :: !(Maybe Text)
+    , _dsldsiFriendlyName     :: !(Maybe Text)
+    , _dsldsiKind             :: !Text
+    , _dsldsiDataSetReference :: !(Maybe DataSetReference)
+    , _dsldsiId               :: !(Maybe Text)
+    , _dsldsiLabels           :: !(Maybe DataSetListDataSetsItemLabels)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetListDataSetsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsldsiLocation'
+--
+-- * 'dsldsiFriendlyName'
+--
+-- * 'dsldsiKind'
+--
+-- * 'dsldsiDataSetReference'
+--
+-- * 'dsldsiId'
+--
+-- * 'dsldsiLabels'
+dataSetListDataSetsItem
+    :: DataSetListDataSetsItem
+dataSetListDataSetsItem =
+    DataSetListDataSetsItem'
+    { _dsldsiLocation = Nothing
+    , _dsldsiFriendlyName = Nothing
+    , _dsldsiKind = "bigquery#dataset"
+    , _dsldsiDataSetReference = Nothing
+    , _dsldsiId = Nothing
+    , _dsldsiLabels = Nothing
+    }
+
+-- | The geographic location where the data resides.
+dsldsiLocation :: Lens' DataSetListDataSetsItem (Maybe Text)
+dsldsiLocation
+  = lens _dsldsiLocation
+      (\ s a -> s{_dsldsiLocation = a})
+
+-- | A descriptive name for the dataset, if one exists.
+dsldsiFriendlyName :: Lens' DataSetListDataSetsItem (Maybe Text)
+dsldsiFriendlyName
+  = lens _dsldsiFriendlyName
+      (\ s a -> s{_dsldsiFriendlyName = a})
+
+-- | The resource type. This property always returns the value
+-- \"bigquery#dataset\".
+dsldsiKind :: Lens' DataSetListDataSetsItem Text
+dsldsiKind
+  = lens _dsldsiKind (\ s a -> s{_dsldsiKind = a})
+
+-- | The dataset reference. Use this property to access specific parts of the
+-- dataset\'s ID, such as project ID or dataset ID.
+dsldsiDataSetReference :: Lens' DataSetListDataSetsItem (Maybe DataSetReference)
+dsldsiDataSetReference
+  = lens _dsldsiDataSetReference
+      (\ s a -> s{_dsldsiDataSetReference = a})
+
+-- | The fully-qualified, unique, opaque ID of the dataset.
+dsldsiId :: Lens' DataSetListDataSetsItem (Maybe Text)
+dsldsiId = lens _dsldsiId (\ s a -> s{_dsldsiId = a})
+
+-- | The labels associated with this dataset. You can use these to organize
+-- and group your datasets.
+dsldsiLabels :: Lens' DataSetListDataSetsItem (Maybe DataSetListDataSetsItemLabels)
+dsldsiLabels
+  = lens _dsldsiLabels (\ s a -> s{_dsldsiLabels = a})
+
+instance FromJSON DataSetListDataSetsItem where
+        parseJSON
+          = withObject "DataSetListDataSetsItem"
+              (\ o ->
+                 DataSetListDataSetsItem' <$>
+                   (o .:? "location") <*> (o .:? "friendlyName") <*>
+                     (o .:? "kind" .!= "bigquery#dataset")
+                     <*> (o .:? "datasetReference")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labels"))
+
+instance ToJSON DataSetListDataSetsItem where
+        toJSON DataSetListDataSetsItem'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _dsldsiLocation,
+                  ("friendlyName" .=) <$> _dsldsiFriendlyName,
+                  Just ("kind" .= _dsldsiKind),
+                  ("datasetReference" .=) <$> _dsldsiDataSetReference,
+                  ("id" .=) <$> _dsldsiId,
+                  ("labels" .=) <$> _dsldsiLabels])
+
+--
+-- /See:/ 'tableDataList' smart constructor.
+data TableDataList = TableDataList'
+    { _tdlEtag      :: !(Maybe Text)
+    , _tdlKind      :: !Text
+    , _tdlRows      :: !(Maybe [TableRow])
+    , _tdlPageToken :: !(Maybe Text)
+    , _tdlTotalRows :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableDataList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdlEtag'
+--
+-- * 'tdlKind'
+--
+-- * 'tdlRows'
+--
+-- * 'tdlPageToken'
+--
+-- * 'tdlTotalRows'
+tableDataList
+    :: TableDataList
+tableDataList =
+    TableDataList'
+    { _tdlEtag = Nothing
+    , _tdlKind = "bigquery#tableDataList"
+    , _tdlRows = Nothing
+    , _tdlPageToken = Nothing
+    , _tdlTotalRows = Nothing
+    }
+
+-- | A hash of this page of results.
+tdlEtag :: Lens' TableDataList (Maybe Text)
+tdlEtag = lens _tdlEtag (\ s a -> s{_tdlEtag = a})
+
+-- | The resource type of the response.
+tdlKind :: Lens' TableDataList Text
+tdlKind = lens _tdlKind (\ s a -> s{_tdlKind = a})
+
+-- | Rows of results.
+tdlRows :: Lens' TableDataList [TableRow]
+tdlRows
+  = lens _tdlRows (\ s a -> s{_tdlRows = a}) . _Default
+      . _Coerce
+
+-- | A token used for paging results. Providing this token instead of the
+-- startIndex parameter can help you retrieve stable results when an
+-- underlying table is changing.
+tdlPageToken :: Lens' TableDataList (Maybe Text)
+tdlPageToken
+  = lens _tdlPageToken (\ s a -> s{_tdlPageToken = a})
+
+-- | The total number of rows in the complete table.
+tdlTotalRows :: Lens' TableDataList (Maybe Int64)
+tdlTotalRows
+  = lens _tdlTotalRows (\ s a -> s{_tdlTotalRows = a})
+      . mapping _Coerce
+
+instance FromJSON TableDataList where
+        parseJSON
+          = withObject "TableDataList"
+              (\ o ->
+                 TableDataList' <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "bigquery#tableDataList")
+                     <*> (o .:? "rows" .!= mempty)
+                     <*> (o .:? "pageToken")
+                     <*> (o .:? "totalRows"))
+
+instance ToJSON TableDataList where
+        toJSON TableDataList'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _tdlEtag, Just ("kind" .= _tdlKind),
+                  ("rows" .=) <$> _tdlRows,
+                  ("pageToken" .=) <$> _tdlPageToken,
+                  ("totalRows" .=) <$> _tdlTotalRows])
+
+--
+-- /See:/ 'jobConfigurationTableCopy' smart constructor.
+data JobConfigurationTableCopy = JobConfigurationTableCopy'
+    { _jctcDestinationTable                   :: !(Maybe TableReference)
+    , _jctcWriteDisPosition                   :: !(Maybe Text)
+    , _jctcSourceTables                       :: !(Maybe [TableReference])
+    , _jctcCreateDisPosition                  :: !(Maybe Text)
+    , _jctcSourceTable                        :: !(Maybe TableReference)
+    , _jctcDestinationEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationTableCopy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jctcDestinationTable'
+--
+-- * 'jctcWriteDisPosition'
+--
+-- * 'jctcSourceTables'
+--
+-- * 'jctcCreateDisPosition'
+--
+-- * 'jctcSourceTable'
+--
+-- * 'jctcDestinationEncryptionConfiguration'
+jobConfigurationTableCopy
+    :: JobConfigurationTableCopy
+jobConfigurationTableCopy =
+    JobConfigurationTableCopy'
+    { _jctcDestinationTable = Nothing
+    , _jctcWriteDisPosition = Nothing
+    , _jctcSourceTables = Nothing
+    , _jctcCreateDisPosition = Nothing
+    , _jctcSourceTable = Nothing
+    , _jctcDestinationEncryptionConfiguration = Nothing
+    }
+
+-- | [Required] The destination table
+jctcDestinationTable :: Lens' JobConfigurationTableCopy (Maybe TableReference)
+jctcDestinationTable
+  = lens _jctcDestinationTable
+      (\ s a -> s{_jctcDestinationTable = a})
+
+-- | [Optional] Specifies the action that occurs if the destination table
+-- already exists. The following values are supported: WRITE_TRUNCATE: If
+-- the table already exists, BigQuery overwrites the table data.
+-- WRITE_APPEND: If the table already exists, BigQuery appends the data to
+-- the table. WRITE_EMPTY: If the table already exists and contains data, a
+-- \'duplicate\' error is returned in the job result. The default value is
+-- WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able
+-- to complete the job successfully. Creation, truncation and append
+-- actions occur as one atomic update upon job completion.
+jctcWriteDisPosition :: Lens' JobConfigurationTableCopy (Maybe Text)
+jctcWriteDisPosition
+  = lens _jctcWriteDisPosition
+      (\ s a -> s{_jctcWriteDisPosition = a})
+
+-- | [Pick one] Source tables to copy.
+jctcSourceTables :: Lens' JobConfigurationTableCopy [TableReference]
+jctcSourceTables
+  = lens _jctcSourceTables
+      (\ s a -> s{_jctcSourceTables = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] Specifies whether the job is allowed to create new tables.
+-- The following values are supported: CREATE_IF_NEEDED: If the table does
+-- not exist, BigQuery creates the table. CREATE_NEVER: The table must
+-- already exist. If it does not, a \'notFound\' error is returned in the
+-- job result. The default value is CREATE_IF_NEEDED. Creation, truncation
+-- and append actions occur as one atomic update upon job completion.
+jctcCreateDisPosition :: Lens' JobConfigurationTableCopy (Maybe Text)
+jctcCreateDisPosition
+  = lens _jctcCreateDisPosition
+      (\ s a -> s{_jctcCreateDisPosition = a})
+
+-- | [Pick one] Source table to copy.
+jctcSourceTable :: Lens' JobConfigurationTableCopy (Maybe TableReference)
+jctcSourceTable
+  = lens _jctcSourceTable
+      (\ s a -> s{_jctcSourceTable = a})
+
+-- | Custom encryption configuration (e.g., Cloud KMS keys).
+jctcDestinationEncryptionConfiguration :: Lens' JobConfigurationTableCopy (Maybe EncryptionConfiguration)
+jctcDestinationEncryptionConfiguration
+  = lens _jctcDestinationEncryptionConfiguration
+      (\ s a ->
+         s{_jctcDestinationEncryptionConfiguration = a})
+
+instance FromJSON JobConfigurationTableCopy where
+        parseJSON
+          = withObject "JobConfigurationTableCopy"
+              (\ o ->
+                 JobConfigurationTableCopy' <$>
+                   (o .:? "destinationTable") <*>
+                     (o .:? "writeDisposition")
+                     <*> (o .:? "sourceTables" .!= mempty)
+                     <*> (o .:? "createDisposition")
+                     <*> (o .:? "sourceTable")
+                     <*> (o .:? "destinationEncryptionConfiguration"))
+
+instance ToJSON JobConfigurationTableCopy where
+        toJSON JobConfigurationTableCopy'{..}
+          = object
+              (catMaybes
+                 [("destinationTable" .=) <$> _jctcDestinationTable,
+                  ("writeDisposition" .=) <$> _jctcWriteDisPosition,
+                  ("sourceTables" .=) <$> _jctcSourceTables,
+                  ("createDisposition" .=) <$> _jctcCreateDisPosition,
+                  ("sourceTable" .=) <$> _jctcSourceTable,
+                  ("destinationEncryptionConfiguration" .=) <$>
+                    _jctcDestinationEncryptionConfiguration])
+
+--
+-- /See:/ 'tableListTablesItem' smart constructor.
+data TableListTablesItem = TableListTablesItem'
+    { _tltiCreationTime     :: !(Maybe (Textual Int64))
+    , _tltiClustering       :: !(Maybe Clustering)
+    , _tltiTableReference   :: !(Maybe TableReference)
+    , _tltiFriendlyName     :: !(Maybe Text)
+    , _tltiKind             :: !Text
+    , _tltiTimePartitioning :: !(Maybe TimePartitioning)
+    , _tltiView             :: !(Maybe TableListTablesItemView)
+    , _tltiId               :: !(Maybe Text)
+    , _tltiLabels           :: !(Maybe TableListTablesItemLabels)
+    , _tltiType             :: !(Maybe Text)
+    , _tltiExpirationTime   :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableListTablesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tltiCreationTime'
+--
+-- * 'tltiClustering'
+--
+-- * 'tltiTableReference'
+--
+-- * 'tltiFriendlyName'
+--
+-- * 'tltiKind'
+--
+-- * 'tltiTimePartitioning'
+--
+-- * 'tltiView'
+--
+-- * 'tltiId'
+--
+-- * 'tltiLabels'
+--
+-- * 'tltiType'
+--
+-- * 'tltiExpirationTime'
+tableListTablesItem
+    :: TableListTablesItem
+tableListTablesItem =
+    TableListTablesItem'
+    { _tltiCreationTime = Nothing
+    , _tltiClustering = Nothing
+    , _tltiTableReference = Nothing
+    , _tltiFriendlyName = Nothing
+    , _tltiKind = "bigquery#table"
+    , _tltiTimePartitioning = Nothing
+    , _tltiView = Nothing
+    , _tltiId = Nothing
+    , _tltiLabels = Nothing
+    , _tltiType = Nothing
+    , _tltiExpirationTime = Nothing
+    }
+
+-- | The time when this table was created, in milliseconds since the epoch.
+tltiCreationTime :: Lens' TableListTablesItem (Maybe Int64)
+tltiCreationTime
+  = lens _tltiCreationTime
+      (\ s a -> s{_tltiCreationTime = a})
+      . mapping _Coerce
+
+-- | [Beta] Clustering specification for this table, if configured.
+tltiClustering :: Lens' TableListTablesItem (Maybe Clustering)
+tltiClustering
+  = lens _tltiClustering
+      (\ s a -> s{_tltiClustering = a})
+
+-- | A reference uniquely identifying the table.
+tltiTableReference :: Lens' TableListTablesItem (Maybe TableReference)
+tltiTableReference
+  = lens _tltiTableReference
+      (\ s a -> s{_tltiTableReference = a})
+
+-- | The user-friendly name for this table.
+tltiFriendlyName :: Lens' TableListTablesItem (Maybe Text)
+tltiFriendlyName
+  = lens _tltiFriendlyName
+      (\ s a -> s{_tltiFriendlyName = a})
+
+-- | The resource type.
+tltiKind :: Lens' TableListTablesItem Text
+tltiKind = lens _tltiKind (\ s a -> s{_tltiKind = a})
+
+-- | The time-based partitioning specification for this table, if configured.
+tltiTimePartitioning :: Lens' TableListTablesItem (Maybe TimePartitioning)
+tltiTimePartitioning
+  = lens _tltiTimePartitioning
+      (\ s a -> s{_tltiTimePartitioning = a})
+
+-- | Additional details for a view.
+tltiView :: Lens' TableListTablesItem (Maybe TableListTablesItemView)
+tltiView = lens _tltiView (\ s a -> s{_tltiView = a})
+
+-- | An opaque ID of the table
+tltiId :: Lens' TableListTablesItem (Maybe Text)
+tltiId = lens _tltiId (\ s a -> s{_tltiId = a})
+
+-- | The labels associated with this table. You can use these to organize and
+-- group your tables.
+tltiLabels :: Lens' TableListTablesItem (Maybe TableListTablesItemLabels)
+tltiLabels
+  = lens _tltiLabels (\ s a -> s{_tltiLabels = a})
+
+-- | The type of table. Possible values are: TABLE, VIEW.
+tltiType :: Lens' TableListTablesItem (Maybe Text)
+tltiType = lens _tltiType (\ s a -> s{_tltiType = a})
+
+-- | [Optional] The time when this table expires, in milliseconds since the
+-- epoch. If not present, the table will persist indefinitely. Expired
+-- tables will be deleted and their storage reclaimed.
+tltiExpirationTime :: Lens' TableListTablesItem (Maybe Int64)
+tltiExpirationTime
+  = lens _tltiExpirationTime
+      (\ s a -> s{_tltiExpirationTime = a})
+      . mapping _Coerce
+
+instance FromJSON TableListTablesItem where
+        parseJSON
+          = withObject "TableListTablesItem"
+              (\ o ->
+                 TableListTablesItem' <$>
+                   (o .:? "creationTime") <*> (o .:? "clustering") <*>
+                     (o .:? "tableReference")
+                     <*> (o .:? "friendlyName")
+                     <*> (o .:? "kind" .!= "bigquery#table")
+                     <*> (o .:? "timePartitioning")
+                     <*> (o .:? "view")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "type")
+                     <*> (o .:? "expirationTime"))
+
+instance ToJSON TableListTablesItem where
+        toJSON TableListTablesItem'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _tltiCreationTime,
+                  ("clustering" .=) <$> _tltiClustering,
+                  ("tableReference" .=) <$> _tltiTableReference,
+                  ("friendlyName" .=) <$> _tltiFriendlyName,
+                  Just ("kind" .= _tltiKind),
+                  ("timePartitioning" .=) <$> _tltiTimePartitioning,
+                  ("view" .=) <$> _tltiView, ("id" .=) <$> _tltiId,
+                  ("labels" .=) <$> _tltiLabels,
+                  ("type" .=) <$> _tltiType,
+                  ("expirationTime" .=) <$> _tltiExpirationTime])
+
+--
+-- /See:/ 'tableSchema' smart constructor.
+newtype TableSchema = TableSchema'
+    { _tsFields :: Maybe [TableFieldSchema]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsFields'
+tableSchema
+    :: TableSchema
+tableSchema =
+    TableSchema'
+    { _tsFields = Nothing
+    }
+
+-- | Describes the fields in a table.
+tsFields :: Lens' TableSchema [TableFieldSchema]
+tsFields
+  = lens _tsFields (\ s a -> s{_tsFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON TableSchema where
+        parseJSON
+          = withObject "TableSchema"
+              (\ o -> TableSchema' <$> (o .:? "fields" .!= mempty))
+
+instance ToJSON TableSchema where
+        toJSON TableSchema'{..}
+          = object (catMaybes [("fields" .=) <$> _tsFields])
+
+--
+-- /See:/ 'projectList' smart constructor.
+data ProjectList = ProjectList'
+    { _plTotalItems    :: !(Maybe (Textual Int32))
+    , _plEtag          :: !(Maybe Text)
+    , _plNextPageToken :: !(Maybe Text)
+    , _plKind          :: !Text
+    , _plProjects      :: !(Maybe [ProjectListProjectsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plTotalItems'
+--
+-- * 'plEtag'
+--
+-- * 'plNextPageToken'
+--
+-- * 'plKind'
+--
+-- * 'plProjects'
+projectList
+    :: ProjectList
+projectList =
+    ProjectList'
+    { _plTotalItems = Nothing
+    , _plEtag = Nothing
+    , _plNextPageToken = Nothing
+    , _plKind = "bigquery#projectList"
+    , _plProjects = Nothing
+    }
+
+-- | The total number of projects in the list.
+plTotalItems :: Lens' ProjectList (Maybe Int32)
+plTotalItems
+  = lens _plTotalItems (\ s a -> s{_plTotalItems = a})
+      . mapping _Coerce
+
+-- | A hash of the page of results
+plEtag :: Lens' ProjectList (Maybe Text)
+plEtag = lens _plEtag (\ s a -> s{_plEtag = a})
+
+-- | A token to request the next page of results.
+plNextPageToken :: Lens' ProjectList (Maybe Text)
+plNextPageToken
+  = lens _plNextPageToken
+      (\ s a -> s{_plNextPageToken = a})
+
+-- | The type of list.
+plKind :: Lens' ProjectList Text
+plKind = lens _plKind (\ s a -> s{_plKind = a})
+
+-- | Projects to which you have at least READ access.
+plProjects :: Lens' ProjectList [ProjectListProjectsItem]
+plProjects
+  = lens _plProjects (\ s a -> s{_plProjects = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ProjectList where
+        parseJSON
+          = withObject "ProjectList"
+              (\ o ->
+                 ProjectList' <$>
+                   (o .:? "totalItems") <*> (o .:? "etag") <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "kind" .!= "bigquery#projectList")
+                     <*> (o .:? "projects" .!= mempty))
+
+instance ToJSON ProjectList where
+        toJSON ProjectList'{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _plTotalItems,
+                  ("etag" .=) <$> _plEtag,
+                  ("nextPageToken" .=) <$> _plNextPageToken,
+                  Just ("kind" .= _plKind),
+                  ("projects" .=) <$> _plProjects])
+
+--
+-- /See:/ 'explainQueryStep' smart constructor.
+data ExplainQueryStep = ExplainQueryStep'
+    { _eqsSubsteps :: !(Maybe [Text])
+    , _eqsKind     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExplainQueryStep' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eqsSubsteps'
+--
+-- * 'eqsKind'
+explainQueryStep
+    :: ExplainQueryStep
+explainQueryStep =
+    ExplainQueryStep'
+    { _eqsSubsteps = Nothing
+    , _eqsKind = Nothing
+    }
+
+-- | Human-readable stage descriptions.
+eqsSubsteps :: Lens' ExplainQueryStep [Text]
+eqsSubsteps
+  = lens _eqsSubsteps (\ s a -> s{_eqsSubsteps = a}) .
+      _Default
+      . _Coerce
+
+-- | Machine-readable operation type.
+eqsKind :: Lens' ExplainQueryStep (Maybe Text)
+eqsKind = lens _eqsKind (\ s a -> s{_eqsKind = a})
+
+instance FromJSON ExplainQueryStep where
+        parseJSON
+          = withObject "ExplainQueryStep"
+              (\ o ->
+                 ExplainQueryStep' <$>
+                   (o .:? "substeps" .!= mempty) <*> (o .:? "kind"))
+
+instance ToJSON ExplainQueryStep where
+        toJSON ExplainQueryStep'{..}
+          = object
+              (catMaybes
+                 [("substeps" .=) <$> _eqsSubsteps,
+                  ("kind" .=) <$> _eqsKind])
+
+--
+-- /See:/ 'queryTimelineSample' smart constructor.
+data QueryTimelineSample = QueryTimelineSample'
+    { _qtsPendingUnits   :: !(Maybe (Textual Int64))
+    , _qtsTotalSlotMs    :: !(Maybe (Textual Int64))
+    , _qtsActiveUnits    :: !(Maybe (Textual Int64))
+    , _qtsElapsedMs      :: !(Maybe (Textual Int64))
+    , _qtsCompletedUnits :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryTimelineSample' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qtsPendingUnits'
+--
+-- * 'qtsTotalSlotMs'
+--
+-- * 'qtsActiveUnits'
+--
+-- * 'qtsElapsedMs'
+--
+-- * 'qtsCompletedUnits'
+queryTimelineSample
+    :: QueryTimelineSample
+queryTimelineSample =
+    QueryTimelineSample'
+    { _qtsPendingUnits = Nothing
+    , _qtsTotalSlotMs = Nothing
+    , _qtsActiveUnits = Nothing
+    , _qtsElapsedMs = Nothing
+    , _qtsCompletedUnits = Nothing
+    }
+
+-- | Total parallel units of work remaining for the active stages.
+qtsPendingUnits :: Lens' QueryTimelineSample (Maybe Int64)
+qtsPendingUnits
+  = lens _qtsPendingUnits
+      (\ s a -> s{_qtsPendingUnits = a})
+      . mapping _Coerce
+
+-- | Cumulative slot-ms consumed by the query.
+qtsTotalSlotMs :: Lens' QueryTimelineSample (Maybe Int64)
+qtsTotalSlotMs
+  = lens _qtsTotalSlotMs
+      (\ s a -> s{_qtsTotalSlotMs = a})
+      . mapping _Coerce
+
+-- | Total number of units currently being processed by workers. This does
+-- not correspond directly to slot usage. This is the largest value
+-- observed since the last sample.
+qtsActiveUnits :: Lens' QueryTimelineSample (Maybe Int64)
+qtsActiveUnits
+  = lens _qtsActiveUnits
+      (\ s a -> s{_qtsActiveUnits = a})
+      . mapping _Coerce
+
+-- | Milliseconds elapsed since the start of query execution.
+qtsElapsedMs :: Lens' QueryTimelineSample (Maybe Int64)
+qtsElapsedMs
+  = lens _qtsElapsedMs (\ s a -> s{_qtsElapsedMs = a})
+      . mapping _Coerce
+
+-- | Total parallel units of work completed by this query.
+qtsCompletedUnits :: Lens' QueryTimelineSample (Maybe Int64)
+qtsCompletedUnits
+  = lens _qtsCompletedUnits
+      (\ s a -> s{_qtsCompletedUnits = a})
+      . mapping _Coerce
+
+instance FromJSON QueryTimelineSample where
+        parseJSON
+          = withObject "QueryTimelineSample"
+              (\ o ->
+                 QueryTimelineSample' <$>
+                   (o .:? "pendingUnits") <*> (o .:? "totalSlotMs") <*>
+                     (o .:? "activeUnits")
+                     <*> (o .:? "elapsedMs")
+                     <*> (o .:? "completedUnits"))
+
+instance ToJSON QueryTimelineSample where
+        toJSON QueryTimelineSample'{..}
+          = object
+              (catMaybes
+                 [("pendingUnits" .=) <$> _qtsPendingUnits,
+                  ("totalSlotMs" .=) <$> _qtsTotalSlotMs,
+                  ("activeUnits" .=) <$> _qtsActiveUnits,
+                  ("elapsedMs" .=) <$> _qtsElapsedMs,
+                  ("completedUnits" .=) <$> _qtsCompletedUnits])
+
+--
+-- /See:/ 'queryParameterTypeStructTypesItem' smart constructor.
+data QueryParameterTypeStructTypesItem = QueryParameterTypeStructTypesItem'
+    { _qptstiName        :: !(Maybe Text)
+    , _qptstiType        :: !(Maybe QueryParameterType)
+    , _qptstiDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryParameterTypeStructTypesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qptstiName'
+--
+-- * 'qptstiType'
+--
+-- * 'qptstiDescription'
+queryParameterTypeStructTypesItem
+    :: QueryParameterTypeStructTypesItem
+queryParameterTypeStructTypesItem =
+    QueryParameterTypeStructTypesItem'
+    { _qptstiName = Nothing
+    , _qptstiType = Nothing
+    , _qptstiDescription = Nothing
+    }
+
+-- | [Optional] The name of this field.
+qptstiName :: Lens' QueryParameterTypeStructTypesItem (Maybe Text)
+qptstiName
+  = lens _qptstiName (\ s a -> s{_qptstiName = a})
+
+-- | [Required] The type of this field.
+qptstiType :: Lens' QueryParameterTypeStructTypesItem (Maybe QueryParameterType)
+qptstiType
+  = lens _qptstiType (\ s a -> s{_qptstiType = a})
+
+-- | [Optional] Human-oriented description of the field.
+qptstiDescription :: Lens' QueryParameterTypeStructTypesItem (Maybe Text)
+qptstiDescription
+  = lens _qptstiDescription
+      (\ s a -> s{_qptstiDescription = a})
+
+instance FromJSON QueryParameterTypeStructTypesItem
+         where
+        parseJSON
+          = withObject "QueryParameterTypeStructTypesItem"
+              (\ o ->
+                 QueryParameterTypeStructTypesItem' <$>
+                   (o .:? "name") <*> (o .:? "type") <*>
+                     (o .:? "description"))
+
+instance ToJSON QueryParameterTypeStructTypesItem
+         where
+        toJSON QueryParameterTypeStructTypesItem'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _qptstiName,
+                  ("type" .=) <$> _qptstiType,
+                  ("description" .=) <$> _qptstiDescription])
+
+--
+-- /See:/ 'bigtableColumnFamily' smart constructor.
+data BigtableColumnFamily = BigtableColumnFamily'
+    { _bcfFamilyId       :: !(Maybe Text)
+    , _bcfColumns        :: !(Maybe [BigtableColumn])
+    , _bcfOnlyReadLatest :: !(Maybe Bool)
+    , _bcfType           :: !(Maybe Text)
+    , _bcfEncoding       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BigtableColumnFamily' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcfFamilyId'
+--
+-- * 'bcfColumns'
+--
+-- * 'bcfOnlyReadLatest'
+--
+-- * 'bcfType'
+--
+-- * 'bcfEncoding'
+bigtableColumnFamily
+    :: BigtableColumnFamily
+bigtableColumnFamily =
+    BigtableColumnFamily'
+    { _bcfFamilyId = Nothing
+    , _bcfColumns = Nothing
+    , _bcfOnlyReadLatest = Nothing
+    , _bcfType = Nothing
+    , _bcfEncoding = Nothing
+    }
+
+-- | Identifier of the column family.
+bcfFamilyId :: Lens' BigtableColumnFamily (Maybe Text)
+bcfFamilyId
+  = lens _bcfFamilyId (\ s a -> s{_bcfFamilyId = a})
+
+-- | [Optional] Lists of columns that should be exposed as individual fields
+-- as opposed to a list of (column name, value) pairs. All columns whose
+-- qualifier matches a qualifier in this list can be accessed as .. Other
+-- columns can be accessed as a list through .Column field.
+bcfColumns :: Lens' BigtableColumnFamily [BigtableColumn]
+bcfColumns
+  = lens _bcfColumns (\ s a -> s{_bcfColumns = a}) .
+      _Default
+      . _Coerce
+
+-- | [Optional] If this is set only the latest version of value are exposed
+-- for all columns in this column family. This can be overridden for a
+-- specific column by listing that column in \'columns\' and specifying a
+-- different setting for that column.
+bcfOnlyReadLatest :: Lens' BigtableColumnFamily (Maybe Bool)
+bcfOnlyReadLatest
+  = lens _bcfOnlyReadLatest
+      (\ s a -> s{_bcfOnlyReadLatest = a})
+
+-- | [Optional] The type to convert the value in cells of this column family.
+-- The values are expected to be encoded using HBase Bytes.toBytes function
+-- when using the BINARY encoding value. Following BigQuery types are
+-- allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Default
+-- type is BYTES. This can be overridden for a specific column by listing
+-- that column in \'columns\' and specifying a type for it.
+bcfType :: Lens' BigtableColumnFamily (Maybe Text)
+bcfType = lens _bcfType (\ s a -> s{_bcfType = a})
+
+-- | [Optional] The encoding of the values when the type is not STRING.
+-- Acceptable encoding values are: TEXT - indicates values are alphanumeric
+-- text strings. BINARY - indicates values are encoded using HBase
+-- Bytes.toBytes family of functions. This can be overridden for a specific
+-- column by listing that column in \'columns\' and specifying an encoding
+-- for it.
+bcfEncoding :: Lens' BigtableColumnFamily (Maybe Text)
+bcfEncoding
+  = lens _bcfEncoding (\ s a -> s{_bcfEncoding = a})
+
+instance FromJSON BigtableColumnFamily where
+        parseJSON
+          = withObject "BigtableColumnFamily"
+              (\ o ->
+                 BigtableColumnFamily' <$>
+                   (o .:? "familyId") <*> (o .:? "columns" .!= mempty)
+                     <*> (o .:? "onlyReadLatest")
+                     <*> (o .:? "type")
+                     <*> (o .:? "encoding"))
+
+instance ToJSON BigtableColumnFamily where
+        toJSON BigtableColumnFamily'{..}
+          = object
+              (catMaybes
+                 [("familyId" .=) <$> _bcfFamilyId,
+                  ("columns" .=) <$> _bcfColumns,
+                  ("onlyReadLatest" .=) <$> _bcfOnlyReadLatest,
+                  ("type" .=) <$> _bcfType,
+                  ("encoding" .=) <$> _bcfEncoding])
+
+--
+-- /See:/ 'jobStatistics' smart constructor.
+data JobStatistics = JobStatistics'
+    { _jsCreationTime        :: !(Maybe (Textual Int64))
+    , _jsStartTime           :: !(Maybe (Textual Int64))
+    , _jsCompletionRatio     :: !(Maybe (Textual Double))
+    , _jsTotalSlotMs         :: !(Maybe (Textual Int64))
+    , _jsLoad                :: !(Maybe JobStatistics3)
+    , _jsTotalBytesProcessed :: !(Maybe (Textual Int64))
+    , _jsQuotaDeferments     :: !(Maybe [Text])
+    , _jsEndTime             :: !(Maybe (Textual Int64))
+    , _jsQuery               :: !(Maybe JobStatistics2)
+    , _jsExtract             :: !(Maybe JobStatistics4)
+    , _jsReservationUsage    :: !(Maybe [JobStatisticsReservationUsageItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatistics' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jsCreationTime'
+--
+-- * 'jsStartTime'
+--
+-- * 'jsCompletionRatio'
+--
+-- * 'jsTotalSlotMs'
+--
+-- * 'jsLoad'
+--
+-- * 'jsTotalBytesProcessed'
+--
+-- * 'jsQuotaDeferments'
+--
+-- * 'jsEndTime'
+--
+-- * 'jsQuery'
+--
+-- * 'jsExtract'
+--
+-- * 'jsReservationUsage'
+jobStatistics
+    :: JobStatistics
+jobStatistics =
+    JobStatistics'
+    { _jsCreationTime = Nothing
+    , _jsStartTime = Nothing
+    , _jsCompletionRatio = Nothing
+    , _jsTotalSlotMs = Nothing
+    , _jsLoad = Nothing
+    , _jsTotalBytesProcessed = Nothing
+    , _jsQuotaDeferments = Nothing
+    , _jsEndTime = Nothing
+    , _jsQuery = Nothing
+    , _jsExtract = Nothing
+    , _jsReservationUsage = Nothing
+    }
+
+-- | [Output-only] Creation time of this job, in milliseconds since the
+-- epoch. This field will be present on all jobs.
+jsCreationTime :: Lens' JobStatistics (Maybe Int64)
+jsCreationTime
+  = lens _jsCreationTime
+      (\ s a -> s{_jsCreationTime = a})
+      . mapping _Coerce
+
+-- | [Output-only] Start time of this job, in milliseconds since the epoch.
+-- This field will be present when the job transitions from the PENDING
+-- state to either RUNNING or DONE.
+jsStartTime :: Lens' JobStatistics (Maybe Int64)
+jsStartTime
+  = lens _jsStartTime (\ s a -> s{_jsStartTime = a}) .
+      mapping _Coerce
+
+-- | [TrustedTester] [Output-only] Job progress (0.0 -> 1.0) for LOAD and
+-- EXTRACT jobs.
+jsCompletionRatio :: Lens' JobStatistics (Maybe Double)
+jsCompletionRatio
+  = lens _jsCompletionRatio
+      (\ s a -> s{_jsCompletionRatio = a})
+      . mapping _Coerce
+
+-- | [Output-only] Slot-milliseconds for the job.
+jsTotalSlotMs :: Lens' JobStatistics (Maybe Int64)
+jsTotalSlotMs
+  = lens _jsTotalSlotMs
+      (\ s a -> s{_jsTotalSlotMs = a})
+      . mapping _Coerce
+
+-- | [Output-only] Statistics for a load job.
+jsLoad :: Lens' JobStatistics (Maybe JobStatistics3)
+jsLoad = lens _jsLoad (\ s a -> s{_jsLoad = a})
+
+-- | [Output-only] [Deprecated] Use the bytes processed in the query
+-- statistics instead.
+jsTotalBytesProcessed :: Lens' JobStatistics (Maybe Int64)
+jsTotalBytesProcessed
+  = lens _jsTotalBytesProcessed
+      (\ s a -> s{_jsTotalBytesProcessed = a})
+      . mapping _Coerce
+
+-- | [Output-only] Quotas which delayed this job\'s start time.
+jsQuotaDeferments :: Lens' JobStatistics [Text]
+jsQuotaDeferments
+  = lens _jsQuotaDeferments
+      (\ s a -> s{_jsQuotaDeferments = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only] End time of this job, in milliseconds since the epoch.
+-- This field will be present whenever a job is in the DONE state.
+jsEndTime :: Lens' JobStatistics (Maybe Int64)
+jsEndTime
+  = lens _jsEndTime (\ s a -> s{_jsEndTime = a}) .
+      mapping _Coerce
+
+-- | [Output-only] Statistics for a query job.
+jsQuery :: Lens' JobStatistics (Maybe JobStatistics2)
+jsQuery = lens _jsQuery (\ s a -> s{_jsQuery = a})
+
+-- | [Output-only] Statistics for an extract job.
+jsExtract :: Lens' JobStatistics (Maybe JobStatistics4)
+jsExtract
+  = lens _jsExtract (\ s a -> s{_jsExtract = a})
+
+-- | [Output-only] Job resource usage breakdown by reservation.
+jsReservationUsage :: Lens' JobStatistics [JobStatisticsReservationUsageItem]
+jsReservationUsage
+  = lens _jsReservationUsage
+      (\ s a -> s{_jsReservationUsage = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON JobStatistics where
+        parseJSON
+          = withObject "JobStatistics"
+              (\ o ->
+                 JobStatistics' <$>
+                   (o .:? "creationTime") <*> (o .:? "startTime") <*>
+                     (o .:? "completionRatio")
+                     <*> (o .:? "totalSlotMs")
+                     <*> (o .:? "load")
+                     <*> (o .:? "totalBytesProcessed")
+                     <*> (o .:? "quotaDeferments" .!= mempty)
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "query")
+                     <*> (o .:? "extract")
+                     <*> (o .:? "reservationUsage" .!= mempty))
+
+instance ToJSON JobStatistics where
+        toJSON JobStatistics'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _jsCreationTime,
+                  ("startTime" .=) <$> _jsStartTime,
+                  ("completionRatio" .=) <$> _jsCompletionRatio,
+                  ("totalSlotMs" .=) <$> _jsTotalSlotMs,
+                  ("load" .=) <$> _jsLoad,
+                  ("totalBytesProcessed" .=) <$>
+                    _jsTotalBytesProcessed,
+                  ("quotaDeferments" .=) <$> _jsQuotaDeferments,
+                  ("endTime" .=) <$> _jsEndTime,
+                  ("query" .=) <$> _jsQuery,
+                  ("extract" .=) <$> _jsExtract,
+                  ("reservationUsage" .=) <$> _jsReservationUsage])
+
+-- | The labels associated with this job. You can use these to organize and
+-- group your jobs. Label keys and values can be no longer than 63
+-- characters, can only contain lowercase letters, numeric characters,
+-- underscores and dashes. International characters are allowed. Label
+-- values are optional. Label keys must start with a letter and each label
+-- in the list must have a different key.
+--
+-- /See:/ 'jobConfigurationLabels' smart constructor.
+newtype JobConfigurationLabels = JobConfigurationLabels'
+    { _jclAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jclAddtional'
+jobConfigurationLabels
+    :: HashMap Text Text -- ^ 'jclAddtional'
+    -> JobConfigurationLabels
+jobConfigurationLabels pJclAddtional_ =
+    JobConfigurationLabels'
+    { _jclAddtional = _Coerce # pJclAddtional_
+    }
+
+jclAddtional :: Lens' JobConfigurationLabels (HashMap Text Text)
+jclAddtional
+  = lens _jclAddtional (\ s a -> s{_jclAddtional = a})
+      . _Coerce
+
+instance FromJSON JobConfigurationLabels where
+        parseJSON
+          = withObject "JobConfigurationLabels"
+              (\ o ->
+                 JobConfigurationLabels' <$> (parseJSONObject o))
+
+instance ToJSON JobConfigurationLabels where
+        toJSON = toJSON . _jclAddtional
+
+--
+-- /See:/ 'dataSet' smart constructor.
+data DataSet = DataSet'
+    { _dsCreationTime                 :: !(Maybe (Textual Int64))
+    , _dsDefaultPartitionExpirationMs :: !(Maybe (Textual Int64))
+    , _dsAccess                       :: !(Maybe [DataSetAccessItem])
+    , _dsEtag                         :: !(Maybe Text)
+    , _dsLocation                     :: !(Maybe Text)
+    , _dsFriendlyName                 :: !(Maybe Text)
+    , _dsKind                         :: !Text
+    , _dsLastModifiedTime             :: !(Maybe (Textual Int64))
+    , _dsDataSetReference             :: !(Maybe DataSetReference)
+    , _dsSelfLink                     :: !(Maybe Text)
+    , _dsId                           :: !(Maybe Text)
+    , _dsLabels                       :: !(Maybe DataSetLabels)
+    , _dsDefaultTableExpirationMs     :: !(Maybe (Textual Int64))
+    , _dsDescription                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsCreationTime'
+--
+-- * 'dsDefaultPartitionExpirationMs'
+--
+-- * 'dsAccess'
+--
+-- * 'dsEtag'
+--
+-- * 'dsLocation'
+--
+-- * 'dsFriendlyName'
+--
+-- * 'dsKind'
+--
+-- * 'dsLastModifiedTime'
+--
+-- * 'dsDataSetReference'
+--
+-- * 'dsSelfLink'
+--
+-- * 'dsId'
+--
+-- * 'dsLabels'
+--
+-- * 'dsDefaultTableExpirationMs'
+--
+-- * 'dsDescription'
+dataSet
+    :: DataSet
+dataSet =
+    DataSet'
+    { _dsCreationTime = Nothing
+    , _dsDefaultPartitionExpirationMs = Nothing
+    , _dsAccess = Nothing
+    , _dsEtag = Nothing
+    , _dsLocation = Nothing
+    , _dsFriendlyName = Nothing
+    , _dsKind = "bigquery#dataset"
+    , _dsLastModifiedTime = Nothing
+    , _dsDataSetReference = Nothing
+    , _dsSelfLink = Nothing
+    , _dsId = Nothing
+    , _dsLabels = Nothing
+    , _dsDefaultTableExpirationMs = Nothing
+    , _dsDescription = Nothing
+    }
+
+-- | [Output-only] The time when this dataset was created, in milliseconds
+-- since the epoch.
+dsCreationTime :: Lens' DataSet (Maybe Int64)
+dsCreationTime
+  = lens _dsCreationTime
+      (\ s a -> s{_dsCreationTime = a})
+      . mapping _Coerce
+
+-- | [Optional] The default partition expiration for all partitioned tables
+-- in the dataset, in milliseconds. Once this property is set, all
+-- newly-created partitioned tables in the dataset will have an
+-- expirationMs property in the timePartitioning settings set to this
+-- value, and changing the value will only affect new tables, not existing
+-- ones. The storage in a partition will have an expiration time of its
+-- partition time plus this value. Setting this property overrides the use
+-- of defaultTableExpirationMs for partitioned tables: only one of
+-- defaultTableExpirationMs and defaultPartitionExpirationMs will be used
+-- for any new partitioned table. If you provide an explicit
+-- timePartitioning.expirationMs when creating or updating a partitioned
+-- table, that value takes precedence over the default partition expiration
+-- time indicated by this property.
+dsDefaultPartitionExpirationMs :: Lens' DataSet (Maybe Int64)
+dsDefaultPartitionExpirationMs
+  = lens _dsDefaultPartitionExpirationMs
+      (\ s a -> s{_dsDefaultPartitionExpirationMs = a})
+      . mapping _Coerce
+
+-- | [Optional] An array of objects that define dataset access for one or
+-- more entities. You can set this property when inserting or updating a
+-- dataset in order to control who is allowed to access the data. If
+-- unspecified at dataset creation time, BigQuery adds default dataset
+-- access for the following entities: access.specialGroup: projectReaders;
+-- access.role: READER; access.specialGroup: projectWriters; access.role:
+-- WRITER; access.specialGroup: projectOwners; access.role: OWNER;
+-- access.userByEmail: [dataset creator email]; access.role: OWNER;
+dsAccess :: Lens' DataSet [DataSetAccessItem]
+dsAccess
+  = lens _dsAccess (\ s a -> s{_dsAccess = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output-only] A hash of the resource.
+dsEtag :: Lens' DataSet (Maybe Text)
+dsEtag = lens _dsEtag (\ s a -> s{_dsEtag = a})
+
+-- | The geographic location where the dataset should reside. The default
+-- value is US. See details at
+-- https:\/\/cloud.google.com\/bigquery\/docs\/locations.
+dsLocation :: Lens' DataSet (Maybe Text)
+dsLocation
+  = lens _dsLocation (\ s a -> s{_dsLocation = a})
+
+-- | [Optional] A descriptive name for the dataset.
+dsFriendlyName :: Lens' DataSet (Maybe Text)
+dsFriendlyName
+  = lens _dsFriendlyName
+      (\ s a -> s{_dsFriendlyName = a})
+
+-- | [Output-only] The resource type.
+dsKind :: Lens' DataSet Text
+dsKind = lens _dsKind (\ s a -> s{_dsKind = a})
+
+-- | [Output-only] The date when this dataset or any of its tables was last
+-- modified, in milliseconds since the epoch.
+dsLastModifiedTime :: Lens' DataSet (Maybe Int64)
+dsLastModifiedTime
+  = lens _dsLastModifiedTime
+      (\ s a -> s{_dsLastModifiedTime = a})
+      . mapping _Coerce
+
+-- | [Required] A reference that identifies the dataset.
+dsDataSetReference :: Lens' DataSet (Maybe DataSetReference)
+dsDataSetReference
+  = lens _dsDataSetReference
+      (\ s a -> s{_dsDataSetReference = a})
+
+-- | [Output-only] A URL that can be used to access the resource again. You
+-- can use this URL in Get or Update requests to the resource.
+dsSelfLink :: Lens' DataSet (Maybe Text)
+dsSelfLink
+  = lens _dsSelfLink (\ s a -> s{_dsSelfLink = a})
+
+-- | [Output-only] The fully-qualified unique name of the dataset in the
+-- format projectId:datasetId. The dataset name without the project name is
+-- given in the datasetId field. When creating a new dataset, leave this
+-- field blank, and instead specify the datasetId field.
+dsId :: Lens' DataSet (Maybe Text)
+dsId = lens _dsId (\ s a -> s{_dsId = a})
+
+-- | The labels associated with this dataset. You can use these to organize
+-- and group your datasets. You can set this property when inserting or
+-- updating a dataset. See Creating and Updating Dataset Labels for more
+-- information.
+dsLabels :: Lens' DataSet (Maybe DataSetLabels)
+dsLabels = lens _dsLabels (\ s a -> s{_dsLabels = a})
+
+-- | [Optional] The default lifetime of all tables in the dataset, in
+-- milliseconds. The minimum value is 3600000 milliseconds (one hour). Once
+-- this property is set, all newly-created tables in the dataset will have
+-- an expirationTime property set to the creation time plus the value in
+-- this property, and changing the value will only affect new tables, not
+-- existing ones. When the expirationTime for a given table is reached,
+-- that table will be deleted automatically. If a table\'s expirationTime
+-- is modified or removed before the table expires, or if you provide an
+-- explicit expirationTime when creating a table, that value takes
+-- precedence over the default expiration time indicated by this property.
+dsDefaultTableExpirationMs :: Lens' DataSet (Maybe Int64)
+dsDefaultTableExpirationMs
+  = lens _dsDefaultTableExpirationMs
+      (\ s a -> s{_dsDefaultTableExpirationMs = a})
+      . mapping _Coerce
+
+-- | [Optional] A user-friendly description of the dataset.
+dsDescription :: Lens' DataSet (Maybe Text)
+dsDescription
+  = lens _dsDescription
+      (\ s a -> s{_dsDescription = a})
+
+instance FromJSON DataSet where
+        parseJSON
+          = withObject "DataSet"
+              (\ o ->
+                 DataSet' <$>
+                   (o .:? "creationTime") <*>
+                     (o .:? "defaultPartitionExpirationMs")
+                     <*> (o .:? "access" .!= mempty)
+                     <*> (o .:? "etag")
+                     <*> (o .:? "location")
+                     <*> (o .:? "friendlyName")
+                     <*> (o .:? "kind" .!= "bigquery#dataset")
+                     <*> (o .:? "lastModifiedTime")
+                     <*> (o .:? "datasetReference")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "defaultTableExpirationMs")
+                     <*> (o .:? "description"))
+
+instance ToJSON DataSet where
+        toJSON DataSet'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _dsCreationTime,
+                  ("defaultPartitionExpirationMs" .=) <$>
+                    _dsDefaultPartitionExpirationMs,
+                  ("access" .=) <$> _dsAccess, ("etag" .=) <$> _dsEtag,
+                  ("location" .=) <$> _dsLocation,
+                  ("friendlyName" .=) <$> _dsFriendlyName,
+                  Just ("kind" .= _dsKind),
+                  ("lastModifiedTime" .=) <$> _dsLastModifiedTime,
+                  ("datasetReference" .=) <$> _dsDataSetReference,
+                  ("selfLink" .=) <$> _dsSelfLink, ("id" .=) <$> _dsId,
+                  ("labels" .=) <$> _dsLabels,
+                  ("defaultTableExpirationMs" .=) <$>
+                    _dsDefaultTableExpirationMs,
+                  ("description" .=) <$> _dsDescription])
+
+-- | [TrustedTester] [Required] Defines the ranges for range partitioning.
+--
+-- /See:/ 'rangePartitioningRange' smart constructor.
+data RangePartitioningRange = RangePartitioningRange'
+    { _rprStart    :: !(Maybe (Textual Int64))
+    , _rprInterval :: !(Maybe (Textual Int64))
+    , _rprEnd      :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RangePartitioningRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rprStart'
+--
+-- * 'rprInterval'
+--
+-- * 'rprEnd'
+rangePartitioningRange
+    :: RangePartitioningRange
+rangePartitioningRange =
+    RangePartitioningRange'
+    { _rprStart = Nothing
+    , _rprInterval = Nothing
+    , _rprEnd = Nothing
+    }
+
+-- | [TrustedTester] [Required] The start of range partitioning, inclusive.
+rprStart :: Lens' RangePartitioningRange (Maybe Int64)
+rprStart
+  = lens _rprStart (\ s a -> s{_rprStart = a}) .
+      mapping _Coerce
+
+-- | [TrustedTester] [Required] The width of each interval.
+rprInterval :: Lens' RangePartitioningRange (Maybe Int64)
+rprInterval
+  = lens _rprInterval (\ s a -> s{_rprInterval = a}) .
+      mapping _Coerce
+
+-- | [TrustedTester] [Required] The end of range partitioning, exclusive.
+rprEnd :: Lens' RangePartitioningRange (Maybe Int64)
+rprEnd
+  = lens _rprEnd (\ s a -> s{_rprEnd = a}) .
+      mapping _Coerce
+
+instance FromJSON RangePartitioningRange where
+        parseJSON
+          = withObject "RangePartitioningRange"
+              (\ o ->
+                 RangePartitioningRange' <$>
+                   (o .:? "start") <*> (o .:? "interval") <*>
+                     (o .:? "end"))
+
+instance ToJSON RangePartitioningRange where
+        toJSON RangePartitioningRange'{..}
+          = object
+              (catMaybes
+                 [("start" .=) <$> _rprStart,
+                  ("interval" .=) <$> _rprInterval,
+                  ("end" .=) <$> _rprEnd])
+
+--
+-- /See:/ 'jobStatisticsReservationUsageItem' smart constructor.
+data JobStatisticsReservationUsageItem = JobStatisticsReservationUsageItem'
+    { _jsruiName   :: !(Maybe Text)
+    , _jsruiSlotMs :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatisticsReservationUsageItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jsruiName'
+--
+-- * 'jsruiSlotMs'
+jobStatisticsReservationUsageItem
+    :: JobStatisticsReservationUsageItem
+jobStatisticsReservationUsageItem =
+    JobStatisticsReservationUsageItem'
+    { _jsruiName = Nothing
+    , _jsruiSlotMs = Nothing
+    }
+
+-- | [Output-only] Reservation name or \"unreserved\" for on-demand resources
+-- usage.
+jsruiName :: Lens' JobStatisticsReservationUsageItem (Maybe Text)
+jsruiName
+  = lens _jsruiName (\ s a -> s{_jsruiName = a})
+
+-- | [Output-only] Slot-milliseconds the job spent in the given reservation.
+jsruiSlotMs :: Lens' JobStatisticsReservationUsageItem (Maybe Int64)
+jsruiSlotMs
+  = lens _jsruiSlotMs (\ s a -> s{_jsruiSlotMs = a}) .
+      mapping _Coerce
+
+instance FromJSON JobStatisticsReservationUsageItem
+         where
+        parseJSON
+          = withObject "JobStatisticsReservationUsageItem"
+              (\ o ->
+                 JobStatisticsReservationUsageItem' <$>
+                   (o .:? "name") <*> (o .:? "slotMs"))
+
+instance ToJSON JobStatisticsReservationUsageItem
+         where
+        toJSON JobStatisticsReservationUsageItem'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _jsruiName,
+                  ("slotMs" .=) <$> _jsruiSlotMs])
+
+--
+-- /See:/ 'bigtableOptions' smart constructor.
+data BigtableOptions = BigtableOptions'
+    { _boReadRowkeyAsString              :: !(Maybe Bool)
+    , _boIgnoreUnspecifiedColumnFamilies :: !(Maybe Bool)
+    , _boColumnFamilies                  :: !(Maybe [BigtableColumnFamily])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BigtableOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'boReadRowkeyAsString'
+--
+-- * 'boIgnoreUnspecifiedColumnFamilies'
+--
+-- * 'boColumnFamilies'
+bigtableOptions
+    :: BigtableOptions
+bigtableOptions =
+    BigtableOptions'
+    { _boReadRowkeyAsString = Nothing
+    , _boIgnoreUnspecifiedColumnFamilies = Nothing
+    , _boColumnFamilies = Nothing
+    }
+
+-- | [Optional] If field is true, then the rowkey column families will be
+-- read and converted to string. Otherwise they are read with BYTES type
+-- values and users need to manually cast them with CAST if necessary. The
+-- default value is false.
+boReadRowkeyAsString :: Lens' BigtableOptions (Maybe Bool)
+boReadRowkeyAsString
+  = lens _boReadRowkeyAsString
+      (\ s a -> s{_boReadRowkeyAsString = a})
+
+-- | [Optional] If field is true, then the column families that are not
+-- specified in columnFamilies list are not exposed in the table schema.
+-- Otherwise, they are read with BYTES type values. The default value is
+-- false.
+boIgnoreUnspecifiedColumnFamilies :: Lens' BigtableOptions (Maybe Bool)
+boIgnoreUnspecifiedColumnFamilies
+  = lens _boIgnoreUnspecifiedColumnFamilies
+      (\ s a -> s{_boIgnoreUnspecifiedColumnFamilies = a})
+
+-- | [Optional] List of column families to expose in the table schema along
+-- with their types. This list restricts the column families that can be
+-- referenced in queries and specifies their value types. You can use this
+-- list to do type conversions - see the \'type\' field for more details.
+-- If you leave this list empty, all column families are present in the
+-- table schema and their values are read as BYTES. During a query only the
+-- column families referenced in that query are read from Bigtable.
+boColumnFamilies :: Lens' BigtableOptions [BigtableColumnFamily]
+boColumnFamilies
+  = lens _boColumnFamilies
+      (\ s a -> s{_boColumnFamilies = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON BigtableOptions where
+        parseJSON
+          = withObject "BigtableOptions"
+              (\ o ->
+                 BigtableOptions' <$>
+                   (o .:? "readRowkeyAsString") <*>
+                     (o .:? "ignoreUnspecifiedColumnFamilies")
+                     <*> (o .:? "columnFamilies" .!= mempty))
+
+instance ToJSON BigtableOptions where
+        toJSON BigtableOptions'{..}
+          = object
+              (catMaybes
+                 [("readRowkeyAsString" .=) <$> _boReadRowkeyAsString,
+                  ("ignoreUnspecifiedColumnFamilies" .=) <$>
+                    _boIgnoreUnspecifiedColumnFamilies,
+                  ("columnFamilies" .=) <$> _boColumnFamilies])
+
+--
+-- /See:/ 'clustering' smart constructor.
+newtype Clustering = Clustering'
+    { _cFields :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Clustering' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cFields'
+clustering
+    :: Clustering
+clustering =
+    Clustering'
+    { _cFields = Nothing
+    }
+
+-- | [Repeated] One or more fields on which data should be clustered. Only
+-- top-level, non-repeated, simple-type fields are supported. When you
+-- cluster a table using multiple columns, the order of columns you specify
+-- is important. The order of the specified columns determines the sort
+-- order of the data.
+cFields :: Lens' Clustering [Text]
+cFields
+  = lens _cFields (\ s a -> s{_cFields = a}) . _Default
+      . _Coerce
+
+instance FromJSON Clustering where
+        parseJSON
+          = withObject "Clustering"
+              (\ o -> Clustering' <$> (o .:? "fields" .!= mempty))
+
+instance ToJSON Clustering where
+        toJSON Clustering'{..}
+          = object (catMaybes [("fields" .=) <$> _cFields])
+
+--
+-- /See:/ 'externalDataConfiguration' smart constructor.
+data ExternalDataConfiguration = ExternalDataConfiguration'
+    { _edcBigtableOptions     :: !(Maybe BigtableOptions)
+    , _edcIgnoreUnknownValues :: !(Maybe Bool)
+    , _edcCompression         :: !(Maybe Text)
+    , _edcSourceFormat        :: !(Maybe Text)
+    , _edcSchema              :: !(Maybe TableSchema)
+    , _edcMaxBadRecords       :: !(Maybe (Textual Int32))
+    , _edcGoogleSheetsOptions :: !(Maybe GoogleSheetsOptions)
+    , _edcAutodetect          :: !(Maybe Bool)
+    , _edcSourceURIs          :: !(Maybe [Text])
+    , _edcCSVOptions          :: !(Maybe CSVOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExternalDataConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edcBigtableOptions'
+--
+-- * 'edcIgnoreUnknownValues'
+--
+-- * 'edcCompression'
+--
+-- * 'edcSourceFormat'
+--
+-- * 'edcSchema'
+--
+-- * 'edcMaxBadRecords'
+--
+-- * 'edcGoogleSheetsOptions'
+--
+-- * 'edcAutodetect'
+--
+-- * 'edcSourceURIs'
+--
+-- * 'edcCSVOptions'
+externalDataConfiguration
+    :: ExternalDataConfiguration
+externalDataConfiguration =
+    ExternalDataConfiguration'
+    { _edcBigtableOptions = Nothing
+    , _edcIgnoreUnknownValues = Nothing
+    , _edcCompression = Nothing
+    , _edcSourceFormat = Nothing
+    , _edcSchema = Nothing
+    , _edcMaxBadRecords = Nothing
+    , _edcGoogleSheetsOptions = Nothing
+    , _edcAutodetect = Nothing
+    , _edcSourceURIs = Nothing
+    , _edcCSVOptions = Nothing
+    }
+
+-- | [Optional] Additional options if sourceFormat is set to BIGTABLE.
+edcBigtableOptions :: Lens' ExternalDataConfiguration (Maybe BigtableOptions)
+edcBigtableOptions
+  = lens _edcBigtableOptions
+      (\ s a -> s{_edcBigtableOptions = a})
+
+-- | [Optional] Indicates if BigQuery should allow extra values that are not
+-- represented in the table schema. If true, the extra values are ignored.
+-- If false, records with extra columns are treated as bad records, and if
+-- there are too many bad records, an invalid error is returned in the job
+-- result. The default value is false. The sourceFormat property determines
+-- what BigQuery treats as an extra value: CSV: Trailing columns JSON:
+-- Named values that don\'t match any column names Google Cloud Bigtable:
+-- This setting is ignored. Google Cloud Datastore backups: This setting is
+-- ignored. Avro: This setting is ignored.
+edcIgnoreUnknownValues :: Lens' ExternalDataConfiguration (Maybe Bool)
+edcIgnoreUnknownValues
+  = lens _edcIgnoreUnknownValues
+      (\ s a -> s{_edcIgnoreUnknownValues = a})
+
+-- | [Optional] The compression type of the data source. Possible values
+-- include GZIP and NONE. The default value is NONE. This setting is
+-- ignored for Google Cloud Bigtable, Google Cloud Datastore backups and
+-- Avro formats.
+edcCompression :: Lens' ExternalDataConfiguration (Maybe Text)
+edcCompression
+  = lens _edcCompression
+      (\ s a -> s{_edcCompression = a})
+
+-- | [Required] The data format. For CSV files, specify \"CSV\". For Google
+-- sheets, specify \"GOOGLE_SHEETS\". For newline-delimited JSON, specify
+-- \"NEWLINE_DELIMITED_JSON\". For Avro files, specify \"AVRO\". For Google
+-- Cloud Datastore backups, specify \"DATASTORE_BACKUP\". [Beta] For Google
+-- Cloud Bigtable, specify \"BIGTABLE\".
+edcSourceFormat :: Lens' ExternalDataConfiguration (Maybe Text)
+edcSourceFormat
+  = lens _edcSourceFormat
+      (\ s a -> s{_edcSourceFormat = a})
+
+-- | [Optional] The schema for the data. Schema is required for CSV and JSON
+-- formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore
+-- backups, and Avro formats.
+edcSchema :: Lens' ExternalDataConfiguration (Maybe TableSchema)
+edcSchema
+  = lens _edcSchema (\ s a -> s{_edcSchema = a})
+
+-- | [Optional] The maximum number of bad records that BigQuery can ignore
+-- when reading data. If the number of bad records exceeds this value, an
+-- invalid error is returned in the job result. This is only valid for CSV,
+-- JSON, and Google Sheets. The default value is 0, which requires that all
+-- records are valid. This setting is ignored for Google Cloud Bigtable,
+-- Google Cloud Datastore backups and Avro formats.
+edcMaxBadRecords :: Lens' ExternalDataConfiguration (Maybe Int32)
+edcMaxBadRecords
+  = lens _edcMaxBadRecords
+      (\ s a -> s{_edcMaxBadRecords = a})
+      . mapping _Coerce
+
+-- | [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+edcGoogleSheetsOptions :: Lens' ExternalDataConfiguration (Maybe GoogleSheetsOptions)
+edcGoogleSheetsOptions
+  = lens _edcGoogleSheetsOptions
+      (\ s a -> s{_edcGoogleSheetsOptions = a})
+
+-- | Try to detect schema and format options automatically. Any option
+-- specified explicitly will be honored.
+edcAutodetect :: Lens' ExternalDataConfiguration (Maybe Bool)
+edcAutodetect
+  = lens _edcAutodetect
+      (\ s a -> s{_edcAutodetect = a})
+
+-- | [Required] The fully-qualified URIs that point to your data in Google
+-- Cloud. For Google Cloud Storage URIs: Each URI can contain one \'*\'
+-- wildcard character and it must come after the \'bucket\' name. Size
+-- limits related to load jobs apply to external data sources. For Google
+-- Cloud Bigtable URIs: Exactly one URI can be specified and it has be a
+-- fully specified and valid HTTPS URL for a Google Cloud Bigtable table.
+-- For Google Cloud Datastore backups, exactly one URI can be specified.
+-- Also, the \'*\' wildcard character is not allowed.
+edcSourceURIs :: Lens' ExternalDataConfiguration [Text]
+edcSourceURIs
+  = lens _edcSourceURIs
+      (\ s a -> s{_edcSourceURIs = a})
+      . _Default
+      . _Coerce
+
+-- | Additional properties to set if sourceFormat is set to CSV.
+edcCSVOptions :: Lens' ExternalDataConfiguration (Maybe CSVOptions)
+edcCSVOptions
+  = lens _edcCSVOptions
+      (\ s a -> s{_edcCSVOptions = a})
+
+instance FromJSON ExternalDataConfiguration where
+        parseJSON
+          = withObject "ExternalDataConfiguration"
+              (\ o ->
+                 ExternalDataConfiguration' <$>
+                   (o .:? "bigtableOptions") <*>
+                     (o .:? "ignoreUnknownValues")
+                     <*> (o .:? "compression")
+                     <*> (o .:? "sourceFormat")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "maxBadRecords")
+                     <*> (o .:? "googleSheetsOptions")
+                     <*> (o .:? "autodetect")
+                     <*> (o .:? "sourceUris" .!= mempty)
+                     <*> (o .:? "csvOptions"))
+
+instance ToJSON ExternalDataConfiguration where
+        toJSON ExternalDataConfiguration'{..}
+          = object
+              (catMaybes
+                 [("bigtableOptions" .=) <$> _edcBigtableOptions,
+                  ("ignoreUnknownValues" .=) <$>
+                    _edcIgnoreUnknownValues,
+                  ("compression" .=) <$> _edcCompression,
+                  ("sourceFormat" .=) <$> _edcSourceFormat,
+                  ("schema" .=) <$> _edcSchema,
+                  ("maxBadRecords" .=) <$> _edcMaxBadRecords,
+                  ("googleSheetsOptions" .=) <$>
+                    _edcGoogleSheetsOptions,
+                  ("autodetect" .=) <$> _edcAutodetect,
+                  ("sourceUris" .=) <$> _edcSourceURIs,
+                  ("csvOptions" .=) <$> _edcCSVOptions])
+
+--
+-- /See:/ 'tableReference' smart constructor.
+data TableReference = TableReference'
+    { _trDataSetId :: !(Maybe Text)
+    , _trProjectId :: !(Maybe Text)
+    , _trTableId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trDataSetId'
+--
+-- * 'trProjectId'
+--
+-- * 'trTableId'
+tableReference
+    :: TableReference
+tableReference =
+    TableReference'
+    { _trDataSetId = Nothing
+    , _trProjectId = Nothing
+    , _trTableId = Nothing
+    }
+
+-- | [Required] The ID of the dataset containing this table.
+trDataSetId :: Lens' TableReference (Maybe Text)
+trDataSetId
+  = lens _trDataSetId (\ s a -> s{_trDataSetId = a})
+
+-- | [Required] The ID of the project containing this table.
+trProjectId :: Lens' TableReference (Maybe Text)
+trProjectId
+  = lens _trProjectId (\ s a -> s{_trProjectId = a})
+
+-- | [Required] The ID of the table. The ID must contain only letters (a-z,
+-- A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024
+-- characters.
+trTableId :: Lens' TableReference (Maybe Text)
+trTableId
+  = lens _trTableId (\ s a -> s{_trTableId = a})
+
+instance FromJSON TableReference where
+        parseJSON
+          = withObject "TableReference"
+              (\ o ->
+                 TableReference' <$>
+                   (o .:? "datasetId") <*> (o .:? "projectId") <*>
+                     (o .:? "tableId"))
+
+instance ToJSON TableReference where
+        toJSON TableReference'{..}
+          = object
+              (catMaybes
+                 [("datasetId" .=) <$> _trDataSetId,
+                  ("projectId" .=) <$> _trProjectId,
+                  ("tableId" .=) <$> _trTableId])
+
+-- | [Output-only, Beta] Model options used for the first training run. These
+-- options are immutable for subsequent training runs. Default values are
+-- used for any options not specified in the input query.
+--
+-- /See:/ 'modelDefinitionModelOptions' smart constructor.
+data ModelDefinitionModelOptions = ModelDefinitionModelOptions'
+    { _mdmoModelType :: !(Maybe Text)
+    , _mdmoLabels    :: !(Maybe [Text])
+    , _mdmoLossType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModelDefinitionModelOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdmoModelType'
+--
+-- * 'mdmoLabels'
+--
+-- * 'mdmoLossType'
+modelDefinitionModelOptions
+    :: ModelDefinitionModelOptions
+modelDefinitionModelOptions =
+    ModelDefinitionModelOptions'
+    { _mdmoModelType = Nothing
+    , _mdmoLabels = Nothing
+    , _mdmoLossType = Nothing
+    }
+
+mdmoModelType :: Lens' ModelDefinitionModelOptions (Maybe Text)
+mdmoModelType
+  = lens _mdmoModelType
+      (\ s a -> s{_mdmoModelType = a})
+
+mdmoLabels :: Lens' ModelDefinitionModelOptions [Text]
+mdmoLabels
+  = lens _mdmoLabels (\ s a -> s{_mdmoLabels = a}) .
+      _Default
+      . _Coerce
+
+mdmoLossType :: Lens' ModelDefinitionModelOptions (Maybe Text)
+mdmoLossType
+  = lens _mdmoLossType (\ s a -> s{_mdmoLossType = a})
+
+instance FromJSON ModelDefinitionModelOptions where
+        parseJSON
+          = withObject "ModelDefinitionModelOptions"
+              (\ o ->
+                 ModelDefinitionModelOptions' <$>
+                   (o .:? "modelType") <*> (o .:? "labels" .!= mempty)
+                     <*> (o .:? "lossType"))
+
+instance ToJSON ModelDefinitionModelOptions where
+        toJSON ModelDefinitionModelOptions'{..}
+          = object
+              (catMaybes
+                 [("modelType" .=) <$> _mdmoModelType,
+                  ("labels" .=) <$> _mdmoLabels,
+                  ("lossType" .=) <$> _mdmoLossType])
+
+--
+-- /See:/ 'rangePartitioning' smart constructor.
+data RangePartitioning = RangePartitioning'
+    { _rpField :: !(Maybe Text)
+    , _rpRange :: !(Maybe RangePartitioningRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RangePartitioning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpField'
+--
+-- * 'rpRange'
+rangePartitioning
+    :: RangePartitioning
+rangePartitioning =
+    RangePartitioning'
+    { _rpField = Nothing
+    , _rpRange = Nothing
+    }
+
+-- | [TrustedTester] [Required] The table is partitioned by this field. The
+-- field must be a top-level NULLABLE\/REQUIRED field. The only supported
+-- type is INTEGER\/INT64.
+rpField :: Lens' RangePartitioning (Maybe Text)
+rpField = lens _rpField (\ s a -> s{_rpField = a})
+
+-- | [TrustedTester] [Required] Defines the ranges for range partitioning.
+rpRange :: Lens' RangePartitioning (Maybe RangePartitioningRange)
+rpRange = lens _rpRange (\ s a -> s{_rpRange = a})
+
+instance FromJSON RangePartitioning where
+        parseJSON
+          = withObject "RangePartitioning"
+              (\ o ->
+                 RangePartitioning' <$>
+                   (o .:? "field") <*> (o .:? "range"))
+
+instance ToJSON RangePartitioning where
+        toJSON RangePartitioning'{..}
+          = object
+              (catMaybes
+                 [("field" .=) <$> _rpField,
+                  ("range" .=) <$> _rpRange])
+
+--
+-- /See:/ 'tableFieldSchema' smart constructor.
+data TableFieldSchema = TableFieldSchema'
+    { _tfsMode        :: !(Maybe Text)
+    , _tfsName        :: !(Maybe Text)
+    , _tfsType        :: !(Maybe Text)
+    , _tfsDescription :: !(Maybe Text)
+    , _tfsFields      :: !(Maybe [TableFieldSchema])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableFieldSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tfsMode'
+--
+-- * 'tfsName'
+--
+-- * 'tfsType'
+--
+-- * 'tfsDescription'
+--
+-- * 'tfsFields'
+tableFieldSchema
+    :: TableFieldSchema
+tableFieldSchema =
+    TableFieldSchema'
+    { _tfsMode = Nothing
+    , _tfsName = Nothing
+    , _tfsType = Nothing
+    , _tfsDescription = Nothing
+    , _tfsFields = Nothing
+    }
+
+-- | [Optional] The field mode. Possible values include NULLABLE, REQUIRED
+-- and REPEATED. The default value is NULLABLE.
+tfsMode :: Lens' TableFieldSchema (Maybe Text)
+tfsMode = lens _tfsMode (\ s a -> s{_tfsMode = a})
+
+-- | [Required] The field name. The name must contain only letters (a-z,
+-- A-Z), numbers (0-9), or underscores (_), and must start with a letter or
+-- underscore. The maximum length is 128 characters.
+tfsName :: Lens' TableFieldSchema (Maybe Text)
+tfsName = lens _tfsName (\ s a -> s{_tfsName = a})
+
+-- | [Required] The field data type. Possible values include STRING, BYTES,
+-- INTEGER, INT64 (same as INTEGER), FLOAT, FLOAT64 (same as FLOAT),
+-- BOOLEAN, BOOL (same as BOOLEAN), TIMESTAMP, DATE, TIME, DATETIME, RECORD
+-- (where RECORD indicates that the field contains a nested schema) or
+-- STRUCT (same as RECORD).
+tfsType :: Lens' TableFieldSchema (Maybe Text)
+tfsType = lens _tfsType (\ s a -> s{_tfsType = a})
+
+-- | [Optional] The field description. The maximum length is 1,024
+-- characters.
+tfsDescription :: Lens' TableFieldSchema (Maybe Text)
+tfsDescription
+  = lens _tfsDescription
+      (\ s a -> s{_tfsDescription = a})
+
+-- | [Optional] Describes the nested schema fields if the type property is
+-- set to RECORD.
+tfsFields :: Lens' TableFieldSchema [TableFieldSchema]
+tfsFields
+  = lens _tfsFields (\ s a -> s{_tfsFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON TableFieldSchema where
+        parseJSON
+          = withObject "TableFieldSchema"
+              (\ o ->
+                 TableFieldSchema' <$>
+                   (o .:? "mode") <*> (o .:? "name") <*> (o .:? "type")
+                     <*> (o .:? "description")
+                     <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON TableFieldSchema where
+        toJSON TableFieldSchema'{..}
+          = object
+              (catMaybes
+                 [("mode" .=) <$> _tfsMode, ("name" .=) <$> _tfsName,
+                  ("type" .=) <$> _tfsType,
+                  ("description" .=) <$> _tfsDescription,
+                  ("fields" .=) <$> _tfsFields])
+
+--
+-- /See:/ 'getQueryResultsResponse' smart constructor.
+data GetQueryResultsResponse = GetQueryResultsResponse'
+    { _gqrrJobReference        :: !(Maybe JobReference)
+    , _gqrrEtag                :: !(Maybe Text)
+    , _gqrrKind                :: !Text
+    , _gqrrSchema              :: !(Maybe TableSchema)
+    , _gqrrTotalBytesProcessed :: !(Maybe (Textual Int64))
+    , _gqrrRows                :: !(Maybe [TableRow])
+    , _gqrrPageToken           :: !(Maybe Text)
+    , _gqrrNumDmlAffectedRows  :: !(Maybe (Textual Int64))
+    , _gqrrTotalRows           :: !(Maybe (Textual Word64))
+    , _gqrrErrors              :: !(Maybe [ErrorProto])
+    , _gqrrJobComplete         :: !(Maybe Bool)
+    , _gqrrCacheHit            :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetQueryResultsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gqrrJobReference'
+--
+-- * 'gqrrEtag'
+--
+-- * 'gqrrKind'
+--
+-- * 'gqrrSchema'
+--
+-- * 'gqrrTotalBytesProcessed'
+--
+-- * 'gqrrRows'
+--
+-- * 'gqrrPageToken'
+--
+-- * 'gqrrNumDmlAffectedRows'
+--
+-- * 'gqrrTotalRows'
+--
+-- * 'gqrrErrors'
+--
+-- * 'gqrrJobComplete'
+--
+-- * 'gqrrCacheHit'
+getQueryResultsResponse
+    :: GetQueryResultsResponse
+getQueryResultsResponse =
+    GetQueryResultsResponse'
+    { _gqrrJobReference = Nothing
+    , _gqrrEtag = Nothing
+    , _gqrrKind = "bigquery#getQueryResultsResponse"
+    , _gqrrSchema = Nothing
+    , _gqrrTotalBytesProcessed = Nothing
+    , _gqrrRows = Nothing
+    , _gqrrPageToken = Nothing
+    , _gqrrNumDmlAffectedRows = Nothing
+    , _gqrrTotalRows = Nothing
+    , _gqrrErrors = Nothing
+    , _gqrrJobComplete = Nothing
+    , _gqrrCacheHit = Nothing
+    }
+
+-- | Reference to the BigQuery Job that was created to run the query. This
+-- field will be present even if the original request timed out, in which
+-- case GetQueryResults can be used to read the results once the query has
+-- completed. Since this API only returns the first page of results,
+-- subsequent pages can be fetched via the same mechanism
+-- (GetQueryResults).
+gqrrJobReference :: Lens' GetQueryResultsResponse (Maybe JobReference)
+gqrrJobReference
+  = lens _gqrrJobReference
+      (\ s a -> s{_gqrrJobReference = a})
+
+-- | A hash of this response.
+gqrrEtag :: Lens' GetQueryResultsResponse (Maybe Text)
+gqrrEtag = lens _gqrrEtag (\ s a -> s{_gqrrEtag = a})
+
+-- | The resource type of the response.
+gqrrKind :: Lens' GetQueryResultsResponse Text
+gqrrKind = lens _gqrrKind (\ s a -> s{_gqrrKind = a})
+
+-- | The schema of the results. Present only when the query completes
+-- successfully.
+gqrrSchema :: Lens' GetQueryResultsResponse (Maybe TableSchema)
+gqrrSchema
+  = lens _gqrrSchema (\ s a -> s{_gqrrSchema = a})
+
+-- | The total number of bytes processed for this query.
+gqrrTotalBytesProcessed :: Lens' GetQueryResultsResponse (Maybe Int64)
+gqrrTotalBytesProcessed
+  = lens _gqrrTotalBytesProcessed
+      (\ s a -> s{_gqrrTotalBytesProcessed = a})
+      . mapping _Coerce
+
+-- | An object with as many results as can be contained within the maximum
+-- permitted reply size. To get any additional rows, you can call
+-- GetQueryResults and specify the jobReference returned above. Present
+-- only when the query completes successfully.
+gqrrRows :: Lens' GetQueryResultsResponse [TableRow]
+gqrrRows
+  = lens _gqrrRows (\ s a -> s{_gqrrRows = a}) .
+      _Default
+      . _Coerce
+
+-- | A token used for paging results.
+gqrrPageToken :: Lens' GetQueryResultsResponse (Maybe Text)
+gqrrPageToken
+  = lens _gqrrPageToken
+      (\ s a -> s{_gqrrPageToken = a})
+
+-- | [Output-only] The number of rows affected by a DML statement. Present
+-- only for DML statements INSERT, UPDATE or DELETE.
+gqrrNumDmlAffectedRows :: Lens' GetQueryResultsResponse (Maybe Int64)
+gqrrNumDmlAffectedRows
+  = lens _gqrrNumDmlAffectedRows
+      (\ s a -> s{_gqrrNumDmlAffectedRows = a})
+      . mapping _Coerce
+
+-- | The total number of rows in the complete query result set, which can be
+-- more than the number of rows in this single page of results. Present
+-- only when the query completes successfully.
+gqrrTotalRows :: Lens' GetQueryResultsResponse (Maybe Word64)
+gqrrTotalRows
+  = lens _gqrrTotalRows
+      (\ s a -> s{_gqrrTotalRows = a})
+      . mapping _Coerce
+
+-- | [Output-only] The first errors or warnings encountered during the
+-- running of the job. The final message includes the number of errors that
+-- caused the process to stop. Errors here do not necessarily mean that the
+-- job has completed or was unsuccessful.
+gqrrErrors :: Lens' GetQueryResultsResponse [ErrorProto]
+gqrrErrors
+  = lens _gqrrErrors (\ s a -> s{_gqrrErrors = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether the query has completed or not. If rows or totalRows are
+-- present, this will always be true. If this is false, totalRows will not
+-- be available.
+gqrrJobComplete :: Lens' GetQueryResultsResponse (Maybe Bool)
+gqrrJobComplete
+  = lens _gqrrJobComplete
+      (\ s a -> s{_gqrrJobComplete = a})
+
+-- | Whether the query result was fetched from the query cache.
+gqrrCacheHit :: Lens' GetQueryResultsResponse (Maybe Bool)
+gqrrCacheHit
+  = lens _gqrrCacheHit (\ s a -> s{_gqrrCacheHit = a})
+
+instance FromJSON GetQueryResultsResponse where
+        parseJSON
+          = withObject "GetQueryResultsResponse"
+              (\ o ->
+                 GetQueryResultsResponse' <$>
+                   (o .:? "jobReference") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "bigquery#getQueryResultsResponse")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "totalBytesProcessed")
+                     <*> (o .:? "rows" .!= mempty)
+                     <*> (o .:? "pageToken")
+                     <*> (o .:? "numDmlAffectedRows")
+                     <*> (o .:? "totalRows")
+                     <*> (o .:? "errors" .!= mempty)
+                     <*> (o .:? "jobComplete")
+                     <*> (o .:? "cacheHit"))
+
+instance ToJSON GetQueryResultsResponse where
+        toJSON GetQueryResultsResponse'{..}
+          = object
+              (catMaybes
+                 [("jobReference" .=) <$> _gqrrJobReference,
+                  ("etag" .=) <$> _gqrrEtag,
+                  Just ("kind" .= _gqrrKind),
+                  ("schema" .=) <$> _gqrrSchema,
+                  ("totalBytesProcessed" .=) <$>
+                    _gqrrTotalBytesProcessed,
+                  ("rows" .=) <$> _gqrrRows,
+                  ("pageToken" .=) <$> _gqrrPageToken,
+                  ("numDmlAffectedRows" .=) <$>
+                    _gqrrNumDmlAffectedRows,
+                  ("totalRows" .=) <$> _gqrrTotalRows,
+                  ("errors" .=) <$> _gqrrErrors,
+                  ("jobComplete" .=) <$> _gqrrJobComplete,
+                  ("cacheHit" .=) <$> _gqrrCacheHit])
+
+--
+-- /See:/ 'dataSetList' smart constructor.
+data DataSetList = DataSetList'
+    { _dslEtag          :: !(Maybe Text)
+    , _dslNextPageToken :: !(Maybe Text)
+    , _dslKind          :: !Text
+    , _dslDataSets      :: !(Maybe [DataSetListDataSetsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dslEtag'
+--
+-- * 'dslNextPageToken'
+--
+-- * 'dslKind'
+--
+-- * 'dslDataSets'
+dataSetList
+    :: DataSetList
+dataSetList =
+    DataSetList'
+    { _dslEtag = Nothing
+    , _dslNextPageToken = Nothing
+    , _dslKind = "bigquery#datasetList"
+    , _dslDataSets = Nothing
+    }
+
+-- | A hash value of the results page. You can use this property to determine
+-- if the page has changed since the last request.
+dslEtag :: Lens' DataSetList (Maybe Text)
+dslEtag = lens _dslEtag (\ s a -> s{_dslEtag = a})
+
+-- | A token that can be used to request the next results page. This property
+-- is omitted on the final results page.
+dslNextPageToken :: Lens' DataSetList (Maybe Text)
+dslNextPageToken
+  = lens _dslNextPageToken
+      (\ s a -> s{_dslNextPageToken = a})
+
+-- | The list type. This property always returns the value
+-- \"bigquery#datasetList\".
+dslKind :: Lens' DataSetList Text
+dslKind = lens _dslKind (\ s a -> s{_dslKind = a})
+
+-- | An array of the dataset resources in the project. Each resource contains
+-- basic information. For full information about a particular dataset
+-- resource, use the Datasets: get method. This property is omitted when
+-- there are no datasets in the project.
+dslDataSets :: Lens' DataSetList [DataSetListDataSetsItem]
+dslDataSets
+  = lens _dslDataSets (\ s a -> s{_dslDataSets = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DataSetList where
+        parseJSON
+          = withObject "DataSetList"
+              (\ o ->
+                 DataSetList' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "bigquery#datasetList")
+                     <*> (o .:? "datasets" .!= mempty))
+
+instance ToJSON DataSetList where
+        toJSON DataSetList'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _dslEtag,
+                  ("nextPageToken" .=) <$> _dslNextPageToken,
+                  Just ("kind" .= _dslKind),
+                  ("datasets" .=) <$> _dslDataSets])
+
+--
+-- /See:/ 'queryRequest' smart constructor.
+data QueryRequest = QueryRequest'
+    { _qrLocation        :: !(Maybe Text)
+    , _qrUseQueryCache   :: !Bool
+    , _qrPreserveNulls   :: !(Maybe Bool)
+    , _qrKind            :: !Text
+    , _qrQueryParameters :: !(Maybe [QueryParameter])
+    , _qrQuery           :: !(Maybe Text)
+    , _qrParameterMode   :: !(Maybe Text)
+    , _qrTimeoutMs       :: !(Maybe (Textual Word32))
+    , _qrUseLegacySQL    :: !Bool
+    , _qrDryRun          :: !(Maybe Bool)
+    , _qrMaxResults      :: !(Maybe (Textual Word32))
+    , _qrDefaultDataSet  :: !(Maybe DataSetReference)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qrLocation'
+--
+-- * 'qrUseQueryCache'
+--
+-- * 'qrPreserveNulls'
+--
+-- * 'qrKind'
+--
+-- * 'qrQueryParameters'
+--
+-- * 'qrQuery'
+--
+-- * 'qrParameterMode'
+--
+-- * 'qrTimeoutMs'
+--
+-- * 'qrUseLegacySQL'
+--
+-- * 'qrDryRun'
+--
+-- * 'qrMaxResults'
+--
+-- * 'qrDefaultDataSet'
+queryRequest
+    :: QueryRequest
+queryRequest =
+    QueryRequest'
+    { _qrLocation = Nothing
+    , _qrUseQueryCache = True
+    , _qrPreserveNulls = Nothing
+    , _qrKind = "bigquery#queryRequest"
+    , _qrQueryParameters = Nothing
+    , _qrQuery = Nothing
+    , _qrParameterMode = Nothing
+    , _qrTimeoutMs = Nothing
+    , _qrUseLegacySQL = True
+    , _qrDryRun = Nothing
+    , _qrMaxResults = Nothing
+    , _qrDefaultDataSet = Nothing
+    }
+
+-- | The geographic location where the job should run. See details at
+-- https:\/\/cloud.google.com\/bigquery\/docs\/locations#specifying_your_location.
+qrLocation :: Lens' QueryRequest (Maybe Text)
+qrLocation
+  = lens _qrLocation (\ s a -> s{_qrLocation = a})
+
+-- | [Optional] Whether to look for the result in the query cache. The query
+-- cache is a best-effort cache that will be flushed whenever tables in the
+-- query are modified. The default value is true.
+qrUseQueryCache :: Lens' QueryRequest Bool
+qrUseQueryCache
+  = lens _qrUseQueryCache
+      (\ s a -> s{_qrUseQueryCache = a})
+
+-- | [Deprecated] This property is deprecated.
+qrPreserveNulls :: Lens' QueryRequest (Maybe Bool)
+qrPreserveNulls
+  = lens _qrPreserveNulls
+      (\ s a -> s{_qrPreserveNulls = a})
+
+-- | The resource type of the request.
+qrKind :: Lens' QueryRequest Text
+qrKind = lens _qrKind (\ s a -> s{_qrKind = a})
+
+-- | Query parameters for Standard SQL queries.
+qrQueryParameters :: Lens' QueryRequest [QueryParameter]
+qrQueryParameters
+  = lens _qrQueryParameters
+      (\ s a -> s{_qrQueryParameters = a})
+      . _Default
+      . _Coerce
+
+-- | [Required] A query string, following the BigQuery query syntax, of the
+-- query to execute. Example: \"SELECT count(f1) FROM
+-- [myProjectId:myDatasetId.myTableId]\".
+qrQuery :: Lens' QueryRequest (Maybe Text)
+qrQuery = lens _qrQuery (\ s a -> s{_qrQuery = a})
+
+-- | Standard SQL only. Set to POSITIONAL to use positional (?) query
+-- parameters or to NAMED to use named (\'myparam) query parameters in this
+-- query.
+qrParameterMode :: Lens' QueryRequest (Maybe Text)
+qrParameterMode
+  = lens _qrParameterMode
+      (\ s a -> s{_qrParameterMode = a})
+
+-- | [Optional] How long to wait for the query to complete, in milliseconds,
+-- before the request times out and returns. Note that this is only a
+-- timeout for the request, not the query. If the query takes longer to run
+-- than the timeout value, the call returns without any results and with
+-- the \'jobComplete\' flag set to false. You can call GetQueryResults() to
+-- wait for the query to complete and read the results. The default value
+-- is 10000 milliseconds (10 seconds).
+qrTimeoutMs :: Lens' QueryRequest (Maybe Word32)
+qrTimeoutMs
+  = lens _qrTimeoutMs (\ s a -> s{_qrTimeoutMs = a}) .
+      mapping _Coerce
+
+-- | Specifies whether to use BigQuery\'s legacy SQL dialect for this query.
+-- The default value is true. If set to false, the query will use
+-- BigQuery\'s standard SQL:
+-- https:\/\/cloud.google.com\/bigquery\/sql-reference\/ When useLegacySql
+-- is set to false, the value of flattenResults is ignored; query will be
+-- run as if flattenResults is false.
+qrUseLegacySQL :: Lens' QueryRequest Bool
+qrUseLegacySQL
+  = lens _qrUseLegacySQL
+      (\ s a -> s{_qrUseLegacySQL = a})
+
+-- | [Optional] If set to true, BigQuery doesn\'t run the job. Instead, if
+-- the query is valid, BigQuery returns statistics about the job such as
+-- how many bytes would be processed. If the query is invalid, an error
+-- returns. The default value is false.
+qrDryRun :: Lens' QueryRequest (Maybe Bool)
+qrDryRun = lens _qrDryRun (\ s a -> s{_qrDryRun = a})
+
+-- | [Optional] The maximum number of rows of data to return per page of
+-- results. Setting this flag to a small value such as 1000 and then paging
+-- through results might improve reliability when the query result set is
+-- large. In addition to this limit, responses are also limited to 10 MB.
+-- By default, there is no maximum row count, and only the byte limit
+-- applies.
+qrMaxResults :: Lens' QueryRequest (Maybe Word32)
+qrMaxResults
+  = lens _qrMaxResults (\ s a -> s{_qrMaxResults = a})
+      . mapping _Coerce
+
+-- | [Optional] Specifies the default datasetId and projectId to assume for
+-- any unqualified table names in the query. If not set, all table names in
+-- the query string must be qualified in the format \'datasetId.tableId\'.
+qrDefaultDataSet :: Lens' QueryRequest (Maybe DataSetReference)
+qrDefaultDataSet
+  = lens _qrDefaultDataSet
+      (\ s a -> s{_qrDefaultDataSet = a})
+
+instance FromJSON QueryRequest where
+        parseJSON
+          = withObject "QueryRequest"
+              (\ o ->
+                 QueryRequest' <$>
+                   (o .:? "location") <*>
+                     (o .:? "useQueryCache" .!= True)
+                     <*> (o .:? "preserveNulls")
+                     <*> (o .:? "kind" .!= "bigquery#queryRequest")
+                     <*> (o .:? "queryParameters" .!= mempty)
+                     <*> (o .:? "query")
+                     <*> (o .:? "parameterMode")
+                     <*> (o .:? "timeoutMs")
+                     <*> (o .:? "useLegacySql" .!= True)
+                     <*> (o .:? "dryRun")
+                     <*> (o .:? "maxResults")
+                     <*> (o .:? "defaultDataset"))
+
+instance ToJSON QueryRequest where
+        toJSON QueryRequest'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _qrLocation,
+                  Just ("useQueryCache" .= _qrUseQueryCache),
+                  ("preserveNulls" .=) <$> _qrPreserveNulls,
+                  Just ("kind" .= _qrKind),
+                  ("queryParameters" .=) <$> _qrQueryParameters,
+                  ("query" .=) <$> _qrQuery,
+                  ("parameterMode" .=) <$> _qrParameterMode,
+                  ("timeoutMs" .=) <$> _qrTimeoutMs,
+                  Just ("useLegacySql" .= _qrUseLegacySQL),
+                  ("dryRun" .=) <$> _qrDryRun,
+                  ("maxResults" .=) <$> _qrMaxResults,
+                  ("defaultDataset" .=) <$> _qrDefaultDataSet])
+
+--
+-- /See:/ 'queryParameter' smart constructor.
+data QueryParameter = QueryParameter'
+    { _qpParameterValue :: !(Maybe QueryParameterValue)
+    , _qpParameterType  :: !(Maybe QueryParameterType)
+    , _qpName           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryParameter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qpParameterValue'
+--
+-- * 'qpParameterType'
+--
+-- * 'qpName'
+queryParameter
+    :: QueryParameter
+queryParameter =
+    QueryParameter'
+    { _qpParameterValue = Nothing
+    , _qpParameterType = Nothing
+    , _qpName = Nothing
+    }
+
+-- | [Required] The value of this parameter.
+qpParameterValue :: Lens' QueryParameter (Maybe QueryParameterValue)
+qpParameterValue
+  = lens _qpParameterValue
+      (\ s a -> s{_qpParameterValue = a})
+
+-- | [Required] The type of this parameter.
+qpParameterType :: Lens' QueryParameter (Maybe QueryParameterType)
+qpParameterType
+  = lens _qpParameterType
+      (\ s a -> s{_qpParameterType = a})
+
+-- | [Optional] If unset, this is a positional parameter. Otherwise, should
+-- be unique within a query.
+qpName :: Lens' QueryParameter (Maybe Text)
+qpName = lens _qpName (\ s a -> s{_qpName = a})
+
+instance FromJSON QueryParameter where
+        parseJSON
+          = withObject "QueryParameter"
+              (\ o ->
+                 QueryParameter' <$>
+                   (o .:? "parameterValue") <*> (o .:? "parameterType")
+                     <*> (o .:? "name"))
+
+instance ToJSON QueryParameter where
+        toJSON QueryParameter'{..}
+          = object
+              (catMaybes
+                 [("parameterValue" .=) <$> _qpParameterValue,
+                  ("parameterType" .=) <$> _qpParameterType,
+                  ("name" .=) <$> _qpName])
+
+--
+-- /See:/ 'iterationResult' smart constructor.
+data IterationResult = IterationResult'
+    { _irDurationMs   :: !(Maybe (Textual Int64))
+    , _irLearnRate    :: !(Maybe (Textual Double))
+    , _irEvalLoss     :: !(Maybe (Textual Double))
+    , _irTrainingLoss :: !(Maybe (Textual Double))
+    , _irIndex        :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IterationResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'irDurationMs'
+--
+-- * 'irLearnRate'
+--
+-- * 'irEvalLoss'
+--
+-- * 'irTrainingLoss'
+--
+-- * 'irIndex'
+iterationResult
+    :: IterationResult
+iterationResult =
+    IterationResult'
+    { _irDurationMs = Nothing
+    , _irLearnRate = Nothing
+    , _irEvalLoss = Nothing
+    , _irTrainingLoss = Nothing
+    , _irIndex = Nothing
+    }
+
+-- | [Output-only, Beta] Time taken to run the training iteration in
+-- milliseconds.
+irDurationMs :: Lens' IterationResult (Maybe Int64)
+irDurationMs
+  = lens _irDurationMs (\ s a -> s{_irDurationMs = a})
+      . mapping _Coerce
+
+-- | [Output-only, Beta] Learning rate used for this iteration, it varies for
+-- different training iterations if learn_rate_strategy option is not
+-- constant.
+irLearnRate :: Lens' IterationResult (Maybe Double)
+irLearnRate
+  = lens _irLearnRate (\ s a -> s{_irLearnRate = a}) .
+      mapping _Coerce
+
+-- | [Output-only, Beta] Eval loss computed on the eval data at the end of
+-- the iteration. The eval loss is used for early stopping to avoid
+-- overfitting. No eval loss if eval_split_method option is specified as
+-- no_split or auto_split with input data size less than 500 rows.
+irEvalLoss :: Lens' IterationResult (Maybe Double)
+irEvalLoss
+  = lens _irEvalLoss (\ s a -> s{_irEvalLoss = a}) .
+      mapping _Coerce
+
+-- | [Output-only, Beta] Training loss computed on the training data at the
+-- end of the iteration. The training loss function is defined by model
+-- type.
+irTrainingLoss :: Lens' IterationResult (Maybe Double)
+irTrainingLoss
+  = lens _irTrainingLoss
+      (\ s a -> s{_irTrainingLoss = a})
+      . mapping _Coerce
+
+-- | [Output-only, Beta] Index of the ML training iteration, starting from
+-- zero for each training run.
+irIndex :: Lens' IterationResult (Maybe Int32)
+irIndex
+  = lens _irIndex (\ s a -> s{_irIndex = a}) .
+      mapping _Coerce
+
+instance FromJSON IterationResult where
+        parseJSON
+          = withObject "IterationResult"
+              (\ o ->
+                 IterationResult' <$>
+                   (o .:? "durationMs") <*> (o .:? "learnRate") <*>
+                     (o .:? "evalLoss")
+                     <*> (o .:? "trainingLoss")
+                     <*> (o .:? "index"))
+
+instance ToJSON IterationResult where
+        toJSON IterationResult'{..}
+          = object
+              (catMaybes
+                 [("durationMs" .=) <$> _irDurationMs,
+                  ("learnRate" .=) <$> _irLearnRate,
+                  ("evalLoss" .=) <$> _irEvalLoss,
+                  ("trainingLoss" .=) <$> _irTrainingLoss,
+                  ("index" .=) <$> _irIndex])
+
+--
+-- /See:/ 'jobStatistics4' smart constructor.
+newtype JobStatistics4 = JobStatistics4'
+    { _jsDestinationURIFileCounts :: Maybe [Textual Int64]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatistics4' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jsDestinationURIFileCounts'
+jobStatistics4
+    :: JobStatistics4
+jobStatistics4 =
+    JobStatistics4'
+    { _jsDestinationURIFileCounts = Nothing
+    }
+
+-- | [Output-only] Number of files per destination URI or URI pattern
+-- specified in the extract configuration. These values will be in the same
+-- order as the URIs specified in the \'destinationUris\' field.
+jsDestinationURIFileCounts :: Lens' JobStatistics4 [Int64]
+jsDestinationURIFileCounts
+  = lens _jsDestinationURIFileCounts
+      (\ s a -> s{_jsDestinationURIFileCounts = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON JobStatistics4 where
+        parseJSON
+          = withObject "JobStatistics4"
+              (\ o ->
+                 JobStatistics4' <$>
+                   (o .:? "destinationUriFileCounts" .!= mempty))
+
+instance ToJSON JobStatistics4 where
+        toJSON JobStatistics4'{..}
+          = object
+              (catMaybes
+                 [("destinationUriFileCounts" .=) <$>
+                    _jsDestinationURIFileCounts])
+
+--
+-- /See:/ 'projectReference' smart constructor.
+newtype ProjectReference = ProjectReference'
+    { _prProjectId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prProjectId'
+projectReference
+    :: ProjectReference
+projectReference =
+    ProjectReference'
+    { _prProjectId = Nothing
+    }
+
+-- | [Required] ID of the project. Can be either the numeric ID or the
+-- assigned ID of the project.
+prProjectId :: Lens' ProjectReference (Maybe Text)
+prProjectId
+  = lens _prProjectId (\ s a -> s{_prProjectId = a})
+
+instance FromJSON ProjectReference where
+        parseJSON
+          = withObject "ProjectReference"
+              (\ o -> ProjectReference' <$> (o .:? "projectId"))
+
+instance ToJSON ProjectReference where
+        toJSON ProjectReference'{..}
+          = object
+              (catMaybes [("projectId" .=) <$> _prProjectId])
+
+--
+-- /See:/ 'explainQueryStage' smart constructor.
+data ExplainQueryStage = ExplainQueryStage'
+    { _eqsReadMsAvg                 :: !(Maybe (Textual Int64))
+    , _eqsStatus                    :: !(Maybe Text)
+    , _eqsShuffleOutputBytesSpilled :: !(Maybe (Textual Int64))
+    , _eqsReadMsMax                 :: !(Maybe (Textual Int64))
+    , _eqsCompletedParallelInputs   :: !(Maybe (Textual Int64))
+    , _eqsWaitRatioMax              :: !(Maybe (Textual Double))
+    , _eqsParallelInputs            :: !(Maybe (Textual Int64))
+    , _eqsShuffleOutputBytes        :: !(Maybe (Textual Int64))
+    , _eqsRecordsWritten            :: !(Maybe (Textual Int64))
+    , _eqsSteps                     :: !(Maybe [ExplainQueryStep])
+    , _eqsInputStages               :: !(Maybe [Textual Int64])
+    , _eqsWriteRatioAvg             :: !(Maybe (Textual Double))
+    , _eqsRecordsRead               :: !(Maybe (Textual Int64))
+    , _eqsComputeRatioAvg           :: !(Maybe (Textual Double))
+    , _eqsName                      :: !(Maybe Text)
+    , _eqsComputeMsMax              :: !(Maybe (Textual Int64))
+    , _eqsReadRatioMax              :: !(Maybe (Textual Double))
+    , _eqsWriteMsMax                :: !(Maybe (Textual Int64))
+    , _eqsWaitRatioAvg              :: !(Maybe (Textual Double))
+    , _eqsWaitMsAvg                 :: !(Maybe (Textual Int64))
+    , _eqsId                        :: !(Maybe (Textual Int64))
+    , _eqsComputeRatioMax           :: !(Maybe (Textual Double))
+    , _eqsWriteRatioMax             :: !(Maybe (Textual Double))
+    , _eqsComputeMsAvg              :: !(Maybe (Textual Int64))
+    , _eqsReadRatioAvg              :: !(Maybe (Textual Double))
+    , _eqsWriteMsAvg                :: !(Maybe (Textual Int64))
+    , _eqsStartMs                   :: !(Maybe (Textual Int64))
+    , _eqsEndMs                     :: !(Maybe (Textual Int64))
+    , _eqsWaitMsMax                 :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExplainQueryStage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eqsReadMsAvg'
+--
+-- * 'eqsStatus'
+--
+-- * 'eqsShuffleOutputBytesSpilled'
+--
+-- * 'eqsReadMsMax'
+--
+-- * 'eqsCompletedParallelInputs'
+--
+-- * 'eqsWaitRatioMax'
+--
+-- * 'eqsParallelInputs'
+--
+-- * 'eqsShuffleOutputBytes'
+--
+-- * 'eqsRecordsWritten'
+--
+-- * 'eqsSteps'
+--
+-- * 'eqsInputStages'
+--
+-- * 'eqsWriteRatioAvg'
+--
+-- * 'eqsRecordsRead'
+--
+-- * 'eqsComputeRatioAvg'
+--
+-- * 'eqsName'
+--
+-- * 'eqsComputeMsMax'
+--
+-- * 'eqsReadRatioMax'
+--
+-- * 'eqsWriteMsMax'
+--
+-- * 'eqsWaitRatioAvg'
+--
+-- * 'eqsWaitMsAvg'
+--
+-- * 'eqsId'
+--
+-- * 'eqsComputeRatioMax'
+--
+-- * 'eqsWriteRatioMax'
+--
+-- * 'eqsComputeMsAvg'
+--
+-- * 'eqsReadRatioAvg'
+--
+-- * 'eqsWriteMsAvg'
+--
+-- * 'eqsStartMs'
+--
+-- * 'eqsEndMs'
+--
+-- * 'eqsWaitMsMax'
+explainQueryStage
+    :: ExplainQueryStage
+explainQueryStage =
+    ExplainQueryStage'
+    { _eqsReadMsAvg = Nothing
+    , _eqsStatus = Nothing
+    , _eqsShuffleOutputBytesSpilled = Nothing
+    , _eqsReadMsMax = Nothing
+    , _eqsCompletedParallelInputs = Nothing
+    , _eqsWaitRatioMax = Nothing
+    , _eqsParallelInputs = Nothing
+    , _eqsShuffleOutputBytes = Nothing
+    , _eqsRecordsWritten = Nothing
+    , _eqsSteps = Nothing
+    , _eqsInputStages = Nothing
+    , _eqsWriteRatioAvg = Nothing
+    , _eqsRecordsRead = Nothing
+    , _eqsComputeRatioAvg = Nothing
+    , _eqsName = Nothing
+    , _eqsComputeMsMax = Nothing
+    , _eqsReadRatioMax = Nothing
+    , _eqsWriteMsMax = Nothing
+    , _eqsWaitRatioAvg = Nothing
+    , _eqsWaitMsAvg = Nothing
+    , _eqsId = Nothing
+    , _eqsComputeRatioMax = Nothing
+    , _eqsWriteRatioMax = Nothing
+    , _eqsComputeMsAvg = Nothing
+    , _eqsReadRatioAvg = Nothing
+    , _eqsWriteMsAvg = Nothing
+    , _eqsStartMs = Nothing
+    , _eqsEndMs = Nothing
+    , _eqsWaitMsMax = Nothing
+    }
+
+-- | Milliseconds the average shard spent reading input.
+eqsReadMsAvg :: Lens' ExplainQueryStage (Maybe Int64)
+eqsReadMsAvg
+  = lens _eqsReadMsAvg (\ s a -> s{_eqsReadMsAvg = a})
+      . mapping _Coerce
+
+-- | Current status for the stage.
+eqsStatus :: Lens' ExplainQueryStage (Maybe Text)
+eqsStatus
+  = lens _eqsStatus (\ s a -> s{_eqsStatus = a})
+
+-- | Total number of bytes written to shuffle and spilled to disk.
+eqsShuffleOutputBytesSpilled :: Lens' ExplainQueryStage (Maybe Int64)
+eqsShuffleOutputBytesSpilled
+  = lens _eqsShuffleOutputBytesSpilled
+      (\ s a -> s{_eqsShuffleOutputBytesSpilled = a})
+      . mapping _Coerce
+
+-- | Milliseconds the slowest shard spent reading input.
+eqsReadMsMax :: Lens' ExplainQueryStage (Maybe Int64)
+eqsReadMsMax
+  = lens _eqsReadMsMax (\ s a -> s{_eqsReadMsMax = a})
+      . mapping _Coerce
+
+-- | Number of parallel input segments completed.
+eqsCompletedParallelInputs :: Lens' ExplainQueryStage (Maybe Int64)
+eqsCompletedParallelInputs
+  = lens _eqsCompletedParallelInputs
+      (\ s a -> s{_eqsCompletedParallelInputs = a})
+      . mapping _Coerce
+
+-- | Relative amount of time the slowest shard spent waiting to be scheduled.
+eqsWaitRatioMax :: Lens' ExplainQueryStage (Maybe Double)
+eqsWaitRatioMax
+  = lens _eqsWaitRatioMax
+      (\ s a -> s{_eqsWaitRatioMax = a})
+      . mapping _Coerce
+
+-- | Number of parallel input segments to be processed.
+eqsParallelInputs :: Lens' ExplainQueryStage (Maybe Int64)
+eqsParallelInputs
+  = lens _eqsParallelInputs
+      (\ s a -> s{_eqsParallelInputs = a})
+      . mapping _Coerce
+
+-- | Total number of bytes written to shuffle.
+eqsShuffleOutputBytes :: Lens' ExplainQueryStage (Maybe Int64)
+eqsShuffleOutputBytes
+  = lens _eqsShuffleOutputBytes
+      (\ s a -> s{_eqsShuffleOutputBytes = a})
+      . mapping _Coerce
+
+-- | Number of records written by the stage.
+eqsRecordsWritten :: Lens' ExplainQueryStage (Maybe Int64)
+eqsRecordsWritten
+  = lens _eqsRecordsWritten
+      (\ s a -> s{_eqsRecordsWritten = a})
+      . mapping _Coerce
+
+-- | List of operations within the stage in dependency order (approximately
+-- chronological).
+eqsSteps :: Lens' ExplainQueryStage [ExplainQueryStep]
+eqsSteps
+  = lens _eqsSteps (\ s a -> s{_eqsSteps = a}) .
+      _Default
+      . _Coerce
+
+-- | IDs for stages that are inputs to this stage.
+eqsInputStages :: Lens' ExplainQueryStage [Int64]
+eqsInputStages
+  = lens _eqsInputStages
+      (\ s a -> s{_eqsInputStages = a})
+      . _Default
+      . _Coerce
+
+-- | Relative amount of time the average shard spent on writing output.
+eqsWriteRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
+eqsWriteRatioAvg
+  = lens _eqsWriteRatioAvg
+      (\ s a -> s{_eqsWriteRatioAvg = a})
+      . mapping _Coerce
+
+-- | Number of records read into the stage.
+eqsRecordsRead :: Lens' ExplainQueryStage (Maybe Int64)
+eqsRecordsRead
+  = lens _eqsRecordsRead
+      (\ s a -> s{_eqsRecordsRead = a})
+      . mapping _Coerce
+
+-- | Relative amount of time the average shard spent on CPU-bound tasks.
+eqsComputeRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
+eqsComputeRatioAvg
+  = lens _eqsComputeRatioAvg
+      (\ s a -> s{_eqsComputeRatioAvg = a})
+      . mapping _Coerce
+
+-- | Human-readable name for stage.
+eqsName :: Lens' ExplainQueryStage (Maybe Text)
+eqsName = lens _eqsName (\ s a -> s{_eqsName = a})
+
+-- | Milliseconds the slowest shard spent on CPU-bound tasks.
+eqsComputeMsMax :: Lens' ExplainQueryStage (Maybe Int64)
+eqsComputeMsMax
+  = lens _eqsComputeMsMax
+      (\ s a -> s{_eqsComputeMsMax = a})
+      . mapping _Coerce
+
+-- | Relative amount of time the slowest shard spent reading input.
+eqsReadRatioMax :: Lens' ExplainQueryStage (Maybe Double)
+eqsReadRatioMax
+  = lens _eqsReadRatioMax
+      (\ s a -> s{_eqsReadRatioMax = a})
+      . mapping _Coerce
+
+-- | Milliseconds the slowest shard spent on writing output.
+eqsWriteMsMax :: Lens' ExplainQueryStage (Maybe Int64)
+eqsWriteMsMax
+  = lens _eqsWriteMsMax
+      (\ s a -> s{_eqsWriteMsMax = a})
+      . mapping _Coerce
+
+-- | Relative amount of time the average shard spent waiting to be scheduled.
+eqsWaitRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
+eqsWaitRatioAvg
+  = lens _eqsWaitRatioAvg
+      (\ s a -> s{_eqsWaitRatioAvg = a})
+      . mapping _Coerce
+
+-- | Milliseconds the average shard spent waiting to be scheduled.
+eqsWaitMsAvg :: Lens' ExplainQueryStage (Maybe Int64)
+eqsWaitMsAvg
+  = lens _eqsWaitMsAvg (\ s a -> s{_eqsWaitMsAvg = a})
+      . mapping _Coerce
+
+-- | Unique ID for stage within plan.
+eqsId :: Lens' ExplainQueryStage (Maybe Int64)
+eqsId
+  = lens _eqsId (\ s a -> s{_eqsId = a}) .
+      mapping _Coerce
+
+-- | Relative amount of time the slowest shard spent on CPU-bound tasks.
+eqsComputeRatioMax :: Lens' ExplainQueryStage (Maybe Double)
+eqsComputeRatioMax
+  = lens _eqsComputeRatioMax
+      (\ s a -> s{_eqsComputeRatioMax = a})
+      . mapping _Coerce
+
+-- | Relative amount of time the slowest shard spent on writing output.
+eqsWriteRatioMax :: Lens' ExplainQueryStage (Maybe Double)
+eqsWriteRatioMax
+  = lens _eqsWriteRatioMax
+      (\ s a -> s{_eqsWriteRatioMax = a})
+      . mapping _Coerce
+
+-- | Milliseconds the average shard spent on CPU-bound tasks.
+eqsComputeMsAvg :: Lens' ExplainQueryStage (Maybe Int64)
+eqsComputeMsAvg
+  = lens _eqsComputeMsAvg
+      (\ s a -> s{_eqsComputeMsAvg = a})
+      . mapping _Coerce
+
+-- | Relative amount of time the average shard spent reading input.
+eqsReadRatioAvg :: Lens' ExplainQueryStage (Maybe Double)
+eqsReadRatioAvg
+  = lens _eqsReadRatioAvg
+      (\ s a -> s{_eqsReadRatioAvg = a})
+      . mapping _Coerce
+
+-- | Milliseconds the average shard spent on writing output.
+eqsWriteMsAvg :: Lens' ExplainQueryStage (Maybe Int64)
+eqsWriteMsAvg
+  = lens _eqsWriteMsAvg
+      (\ s a -> s{_eqsWriteMsAvg = a})
+      . mapping _Coerce
+
+-- | Stage start time represented as milliseconds since epoch.
+eqsStartMs :: Lens' ExplainQueryStage (Maybe Int64)
+eqsStartMs
+  = lens _eqsStartMs (\ s a -> s{_eqsStartMs = a}) .
+      mapping _Coerce
+
+-- | Stage end time represented as milliseconds since epoch.
+eqsEndMs :: Lens' ExplainQueryStage (Maybe Int64)
+eqsEndMs
+  = lens _eqsEndMs (\ s a -> s{_eqsEndMs = a}) .
+      mapping _Coerce
+
+-- | Milliseconds the slowest shard spent waiting to be scheduled.
+eqsWaitMsMax :: Lens' ExplainQueryStage (Maybe Int64)
+eqsWaitMsMax
+  = lens _eqsWaitMsMax (\ s a -> s{_eqsWaitMsMax = a})
+      . mapping _Coerce
+
+instance FromJSON ExplainQueryStage where
+        parseJSON
+          = withObject "ExplainQueryStage"
+              (\ o ->
+                 ExplainQueryStage' <$>
+                   (o .:? "readMsAvg") <*> (o .:? "status") <*>
+                     (o .:? "shuffleOutputBytesSpilled")
+                     <*> (o .:? "readMsMax")
+                     <*> (o .:? "completedParallelInputs")
+                     <*> (o .:? "waitRatioMax")
+                     <*> (o .:? "parallelInputs")
+                     <*> (o .:? "shuffleOutputBytes")
+                     <*> (o .:? "recordsWritten")
+                     <*> (o .:? "steps" .!= mempty)
+                     <*> (o .:? "inputStages" .!= mempty)
+                     <*> (o .:? "writeRatioAvg")
+                     <*> (o .:? "recordsRead")
+                     <*> (o .:? "computeRatioAvg")
+                     <*> (o .:? "name")
+                     <*> (o .:? "computeMsMax")
+                     <*> (o .:? "readRatioMax")
+                     <*> (o .:? "writeMsMax")
+                     <*> (o .:? "waitRatioAvg")
+                     <*> (o .:? "waitMsAvg")
+                     <*> (o .:? "id")
+                     <*> (o .:? "computeRatioMax")
+                     <*> (o .:? "writeRatioMax")
+                     <*> (o .:? "computeMsAvg")
+                     <*> (o .:? "readRatioAvg")
+                     <*> (o .:? "writeMsAvg")
+                     <*> (o .:? "startMs")
+                     <*> (o .:? "endMs")
+                     <*> (o .:? "waitMsMax"))
+
+instance ToJSON ExplainQueryStage where
+        toJSON ExplainQueryStage'{..}
+          = object
+              (catMaybes
+                 [("readMsAvg" .=) <$> _eqsReadMsAvg,
+                  ("status" .=) <$> _eqsStatus,
+                  ("shuffleOutputBytesSpilled" .=) <$>
+                    _eqsShuffleOutputBytesSpilled,
+                  ("readMsMax" .=) <$> _eqsReadMsMax,
+                  ("completedParallelInputs" .=) <$>
+                    _eqsCompletedParallelInputs,
+                  ("waitRatioMax" .=) <$> _eqsWaitRatioMax,
+                  ("parallelInputs" .=) <$> _eqsParallelInputs,
+                  ("shuffleOutputBytes" .=) <$> _eqsShuffleOutputBytes,
+                  ("recordsWritten" .=) <$> _eqsRecordsWritten,
+                  ("steps" .=) <$> _eqsSteps,
+                  ("inputStages" .=) <$> _eqsInputStages,
+                  ("writeRatioAvg" .=) <$> _eqsWriteRatioAvg,
+                  ("recordsRead" .=) <$> _eqsRecordsRead,
+                  ("computeRatioAvg" .=) <$> _eqsComputeRatioAvg,
+                  ("name" .=) <$> _eqsName,
+                  ("computeMsMax" .=) <$> _eqsComputeMsMax,
+                  ("readRatioMax" .=) <$> _eqsReadRatioMax,
+                  ("writeMsMax" .=) <$> _eqsWriteMsMax,
+                  ("waitRatioAvg" .=) <$> _eqsWaitRatioAvg,
+                  ("waitMsAvg" .=) <$> _eqsWaitMsAvg,
+                  ("id" .=) <$> _eqsId,
+                  ("computeRatioMax" .=) <$> _eqsComputeRatioMax,
+                  ("writeRatioMax" .=) <$> _eqsWriteRatioMax,
+                  ("computeMsAvg" .=) <$> _eqsComputeMsAvg,
+                  ("readRatioAvg" .=) <$> _eqsReadRatioAvg,
+                  ("writeMsAvg" .=) <$> _eqsWriteMsAvg,
+                  ("startMs" .=) <$> _eqsStartMs,
+                  ("endMs" .=) <$> _eqsEndMs,
+                  ("waitMsMax" .=) <$> _eqsWaitMsMax])
+
+-- | [Output-only, Beta] Training options used by this training run. These
+-- options are mutable for subsequent training runs. Default values are
+-- explicitly stored for options not specified in the input query of the
+-- first training run. For subsequent training runs, any option not
+-- explicitly specified in the input query will be copied from the previous
+-- training run.
+--
+-- /See:/ 'trainingRunTrainingOptions' smart constructor.
+data TrainingRunTrainingOptions = TrainingRunTrainingOptions'
+    { _trtoLineSearchInitLearnRate :: !(Maybe (Textual Double))
+    , _trtoMinRelProgress          :: !(Maybe (Textual Double))
+    , _trtoL1Reg                   :: !(Maybe (Textual Double))
+    , _trtoLearnRate               :: !(Maybe (Textual Double))
+    , _trtoLearnRateStrategy       :: !(Maybe Text)
+    , _trtoMaxIteration            :: !(Maybe (Textual Int64))
+    , _trtoEarlyStop               :: !(Maybe Bool)
+    , _trtoL2Reg                   :: !(Maybe (Textual Double))
+    , _trtoWarmStart               :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainingRunTrainingOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trtoLineSearchInitLearnRate'
+--
+-- * 'trtoMinRelProgress'
+--
+-- * 'trtoL1Reg'
+--
+-- * 'trtoLearnRate'
+--
+-- * 'trtoLearnRateStrategy'
+--
+-- * 'trtoMaxIteration'
+--
+-- * 'trtoEarlyStop'
+--
+-- * 'trtoL2Reg'
+--
+-- * 'trtoWarmStart'
+trainingRunTrainingOptions
+    :: TrainingRunTrainingOptions
+trainingRunTrainingOptions =
+    TrainingRunTrainingOptions'
+    { _trtoLineSearchInitLearnRate = Nothing
+    , _trtoMinRelProgress = Nothing
+    , _trtoL1Reg = Nothing
+    , _trtoLearnRate = Nothing
+    , _trtoLearnRateStrategy = Nothing
+    , _trtoMaxIteration = Nothing
+    , _trtoEarlyStop = Nothing
+    , _trtoL2Reg = Nothing
+    , _trtoWarmStart = Nothing
+    }
+
+trtoLineSearchInitLearnRate :: Lens' TrainingRunTrainingOptions (Maybe Double)
+trtoLineSearchInitLearnRate
+  = lens _trtoLineSearchInitLearnRate
+      (\ s a -> s{_trtoLineSearchInitLearnRate = a})
+      . mapping _Coerce
+
+trtoMinRelProgress :: Lens' TrainingRunTrainingOptions (Maybe Double)
+trtoMinRelProgress
+  = lens _trtoMinRelProgress
+      (\ s a -> s{_trtoMinRelProgress = a})
+      . mapping _Coerce
+
+trtoL1Reg :: Lens' TrainingRunTrainingOptions (Maybe Double)
+trtoL1Reg
+  = lens _trtoL1Reg (\ s a -> s{_trtoL1Reg = a}) .
+      mapping _Coerce
+
+trtoLearnRate :: Lens' TrainingRunTrainingOptions (Maybe Double)
+trtoLearnRate
+  = lens _trtoLearnRate
+      (\ s a -> s{_trtoLearnRate = a})
+      . mapping _Coerce
+
+trtoLearnRateStrategy :: Lens' TrainingRunTrainingOptions (Maybe Text)
+trtoLearnRateStrategy
+  = lens _trtoLearnRateStrategy
+      (\ s a -> s{_trtoLearnRateStrategy = a})
+
+trtoMaxIteration :: Lens' TrainingRunTrainingOptions (Maybe Int64)
+trtoMaxIteration
+  = lens _trtoMaxIteration
+      (\ s a -> s{_trtoMaxIteration = a})
+      . mapping _Coerce
+
+trtoEarlyStop :: Lens' TrainingRunTrainingOptions (Maybe Bool)
+trtoEarlyStop
+  = lens _trtoEarlyStop
+      (\ s a -> s{_trtoEarlyStop = a})
+
+trtoL2Reg :: Lens' TrainingRunTrainingOptions (Maybe Double)
+trtoL2Reg
+  = lens _trtoL2Reg (\ s a -> s{_trtoL2Reg = a}) .
+      mapping _Coerce
+
+trtoWarmStart :: Lens' TrainingRunTrainingOptions (Maybe Bool)
+trtoWarmStart
+  = lens _trtoWarmStart
+      (\ s a -> s{_trtoWarmStart = a})
+
+instance FromJSON TrainingRunTrainingOptions where
+        parseJSON
+          = withObject "TrainingRunTrainingOptions"
+              (\ o ->
+                 TrainingRunTrainingOptions' <$>
+                   (o .:? "lineSearchInitLearnRate") <*>
+                     (o .:? "minRelProgress")
+                     <*> (o .:? "l1Reg")
+                     <*> (o .:? "learnRate")
+                     <*> (o .:? "learnRateStrategy")
+                     <*> (o .:? "maxIteration")
+                     <*> (o .:? "earlyStop")
+                     <*> (o .:? "l2Reg")
+                     <*> (o .:? "warmStart"))
+
+instance ToJSON TrainingRunTrainingOptions where
+        toJSON TrainingRunTrainingOptions'{..}
+          = object
+              (catMaybes
+                 [("lineSearchInitLearnRate" .=) <$>
+                    _trtoLineSearchInitLearnRate,
+                  ("minRelProgress" .=) <$> _trtoMinRelProgress,
+                  ("l1Reg" .=) <$> _trtoL1Reg,
+                  ("learnRate" .=) <$> _trtoLearnRate,
+                  ("learnRateStrategy" .=) <$> _trtoLearnRateStrategy,
+                  ("maxIteration" .=) <$> _trtoMaxIteration,
+                  ("earlyStop" .=) <$> _trtoEarlyStop,
+                  ("l2Reg" .=) <$> _trtoL2Reg,
+                  ("warmStart" .=) <$> _trtoWarmStart])
+
+--
+-- /See:/ 'bigQueryModelTraining' smart constructor.
+data BigQueryModelTraining = BigQueryModelTraining'
+    { _bqmtExpectedTotalIterations :: !(Maybe (Textual Int64))
+    , _bqmtCurrentIteration        :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BigQueryModelTraining' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bqmtExpectedTotalIterations'
+--
+-- * 'bqmtCurrentIteration'
+bigQueryModelTraining
+    :: BigQueryModelTraining
+bigQueryModelTraining =
+    BigQueryModelTraining'
+    { _bqmtExpectedTotalIterations = Nothing
+    , _bqmtCurrentIteration = Nothing
+    }
+
+-- | [Output-only, Beta] Expected number of iterations for the create model
+-- query job specified as num_iterations in the input query. The actual
+-- total number of iterations may be less than this number due to early
+-- stop.
+bqmtExpectedTotalIterations :: Lens' BigQueryModelTraining (Maybe Int64)
+bqmtExpectedTotalIterations
+  = lens _bqmtExpectedTotalIterations
+      (\ s a -> s{_bqmtExpectedTotalIterations = a})
+      . mapping _Coerce
+
+-- | [Output-only, Beta] Index of current ML training iteration. Updated
+-- during create model query job to show job progress.
+bqmtCurrentIteration :: Lens' BigQueryModelTraining (Maybe Int32)
+bqmtCurrentIteration
+  = lens _bqmtCurrentIteration
+      (\ s a -> s{_bqmtCurrentIteration = a})
+      . mapping _Coerce
+
+instance FromJSON BigQueryModelTraining where
+        parseJSON
+          = withObject "BigQueryModelTraining"
+              (\ o ->
+                 BigQueryModelTraining' <$>
+                   (o .:? "expectedTotalIterations") <*>
+                     (o .:? "currentIteration"))
+
+instance ToJSON BigQueryModelTraining where
+        toJSON BigQueryModelTraining'{..}
+          = object
+              (catMaybes
+                 [("expectedTotalIterations" .=) <$>
+                    _bqmtExpectedTotalIterations,
+                  ("currentIteration" .=) <$> _bqmtCurrentIteration])
+
+--
+-- /See:/ 'jobConfigurationLoad' smart constructor.
+data JobConfigurationLoad = JobConfigurationLoad'
+    { _jclSkipLeadingRows                    :: !(Maybe (Textual Int32))
+    , _jclProjectionFields                   :: !(Maybe [Text])
+    , _jclDestinationTable                   :: !(Maybe TableReference)
+    , _jclWriteDisPosition                   :: !(Maybe Text)
+    , _jclAllowJaggedRows                    :: !(Maybe Bool)
+    , _jclClustering                         :: !(Maybe Clustering)
+    , _jclRangePartitioning                  :: !(Maybe RangePartitioning)
+    , _jclSchemaInline                       :: !(Maybe Text)
+    , _jclIgnoreUnknownValues                :: !(Maybe Bool)
+    , _jclSchemaUpdateOptions                :: !(Maybe [Text])
+    , _jclCreateDisPosition                  :: !(Maybe Text)
+    , _jclSchemaInlineFormat                 :: !(Maybe Text)
+    , _jclAllowQuotedNewlines                :: !(Maybe Bool)
+    , _jclSourceFormat                       :: !(Maybe Text)
+    , _jclUseAvroLogicalTypes                :: !(Maybe Bool)
+    , _jclSchema                             :: !(Maybe TableSchema)
+    , _jclTimePartitioning                   :: !(Maybe TimePartitioning)
+    , _jclQuote                              :: !(Maybe Text)
+    , _jclMaxBadRecords                      :: !(Maybe (Textual Int32))
+    , _jclAutodetect                         :: !(Maybe Bool)
+    , _jclSourceURIs                         :: !(Maybe [Text])
+    , _jclEncoding                           :: !(Maybe Text)
+    , _jclDestinationTableProperties         :: !(Maybe DestinationTableProperties)
+    , _jclDestinationEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
+    , _jclFieldDelimiter                     :: !(Maybe Text)
+    , _jclNullMarker                         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationLoad' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jclSkipLeadingRows'
+--
+-- * 'jclProjectionFields'
+--
+-- * 'jclDestinationTable'
+--
+-- * 'jclWriteDisPosition'
+--
+-- * 'jclAllowJaggedRows'
+--
+-- * 'jclClustering'
+--
+-- * 'jclRangePartitioning'
+--
+-- * 'jclSchemaInline'
+--
+-- * 'jclIgnoreUnknownValues'
+--
+-- * 'jclSchemaUpdateOptions'
+--
+-- * 'jclCreateDisPosition'
+--
+-- * 'jclSchemaInlineFormat'
+--
+-- * 'jclAllowQuotedNewlines'
+--
+-- * 'jclSourceFormat'
+--
+-- * 'jclUseAvroLogicalTypes'
+--
+-- * 'jclSchema'
+--
+-- * 'jclTimePartitioning'
+--
+-- * 'jclQuote'
+--
+-- * 'jclMaxBadRecords'
+--
+-- * 'jclAutodetect'
+--
+-- * 'jclSourceURIs'
+--
+-- * 'jclEncoding'
+--
+-- * 'jclDestinationTableProperties'
+--
+-- * 'jclDestinationEncryptionConfiguration'
+--
+-- * 'jclFieldDelimiter'
+--
+-- * 'jclNullMarker'
+jobConfigurationLoad
+    :: JobConfigurationLoad
+jobConfigurationLoad =
+    JobConfigurationLoad'
+    { _jclSkipLeadingRows = Nothing
+    , _jclProjectionFields = Nothing
+    , _jclDestinationTable = Nothing
+    , _jclWriteDisPosition = Nothing
+    , _jclAllowJaggedRows = Nothing
+    , _jclClustering = Nothing
+    , _jclRangePartitioning = Nothing
+    , _jclSchemaInline = Nothing
+    , _jclIgnoreUnknownValues = Nothing
+    , _jclSchemaUpdateOptions = Nothing
+    , _jclCreateDisPosition = Nothing
+    , _jclSchemaInlineFormat = Nothing
+    , _jclAllowQuotedNewlines = Nothing
+    , _jclSourceFormat = Nothing
+    , _jclUseAvroLogicalTypes = Nothing
+    , _jclSchema = Nothing
+    , _jclTimePartitioning = Nothing
+    , _jclQuote = Nothing
+    , _jclMaxBadRecords = Nothing
+    , _jclAutodetect = Nothing
+    , _jclSourceURIs = Nothing
+    , _jclEncoding = Nothing
+    , _jclDestinationTableProperties = Nothing
+    , _jclDestinationEncryptionConfiguration = Nothing
+    , _jclFieldDelimiter = Nothing
+    , _jclNullMarker = Nothing
+    }
+
+-- | [Optional] The number of rows at the top of a CSV file that BigQuery
+-- will skip when loading the data. The default value is 0. This property
+-- is useful if you have header rows in the file that should be skipped.
+jclSkipLeadingRows :: Lens' JobConfigurationLoad (Maybe Int32)
+jclSkipLeadingRows
+  = lens _jclSkipLeadingRows
+      (\ s a -> s{_jclSkipLeadingRows = a})
+      . mapping _Coerce
+
+-- | If sourceFormat is set to \"DATASTORE_BACKUP\", indicates which entity
+-- properties to load into BigQuery from a Cloud Datastore backup. Property
+-- names are case sensitive and must be top-level properties. If no
+-- properties are specified, BigQuery loads all properties. If any named
+-- property isn\'t found in the Cloud Datastore backup, an invalid error is
+-- returned in the job result.
+jclProjectionFields :: Lens' JobConfigurationLoad [Text]
+jclProjectionFields
+  = lens _jclProjectionFields
+      (\ s a -> s{_jclProjectionFields = a})
+      . _Default
+      . _Coerce
+
+-- | [Required] The destination table to load the data into.
+jclDestinationTable :: Lens' JobConfigurationLoad (Maybe TableReference)
+jclDestinationTable
+  = lens _jclDestinationTable
+      (\ s a -> s{_jclDestinationTable = a})
+
+-- | [Optional] Specifies the action that occurs if the destination table
+-- already exists. The following values are supported: WRITE_TRUNCATE: If
+-- the table already exists, BigQuery overwrites the table data.
+-- WRITE_APPEND: If the table already exists, BigQuery appends the data to
+-- the table. WRITE_EMPTY: If the table already exists and contains data, a
+-- \'duplicate\' error is returned in the job result. The default value is
+-- WRITE_APPEND. Each action is atomic and only occurs if BigQuery is able
+-- to complete the job successfully. Creation, truncation and append
+-- actions occur as one atomic update upon job completion.
+jclWriteDisPosition :: Lens' JobConfigurationLoad (Maybe Text)
+jclWriteDisPosition
+  = lens _jclWriteDisPosition
+      (\ s a -> s{_jclWriteDisPosition = a})
+
+-- | [Optional] Accept rows that are missing trailing optional columns. The
+-- missing values are treated as nulls. If false, records with missing
+-- trailing columns are treated as bad records, and if there are too many
+-- bad records, an invalid error is returned in the job result. The default
+-- value is false. Only applicable to CSV, ignored for other formats.
+jclAllowJaggedRows :: Lens' JobConfigurationLoad (Maybe Bool)
+jclAllowJaggedRows
+  = lens _jclAllowJaggedRows
+      (\ s a -> s{_jclAllowJaggedRows = a})
+
+-- | [Beta] Clustering specification for the destination table. Must be
+-- specified with time-based partitioning, data in the table will be first
+-- partitioned and subsequently clustered.
+jclClustering :: Lens' JobConfigurationLoad (Maybe Clustering)
+jclClustering
+  = lens _jclClustering
+      (\ s a -> s{_jclClustering = a})
+
+-- | [TrustedTester] Range partitioning specification for this table. Only
+-- one of timePartitioning and rangePartitioning should be specified.
+jclRangePartitioning :: Lens' JobConfigurationLoad (Maybe RangePartitioning)
+jclRangePartitioning
+  = lens _jclRangePartitioning
+      (\ s a -> s{_jclRangePartitioning = a})
+
+-- | [Deprecated] The inline schema. For CSV schemas, specify as
+-- \"Field1:Type1[,Field2:Type2]*\". For example, \"foo:STRING,
+-- bar:INTEGER, baz:FLOAT\".
+jclSchemaInline :: Lens' JobConfigurationLoad (Maybe Text)
+jclSchemaInline
+  = lens _jclSchemaInline
+      (\ s a -> s{_jclSchemaInline = a})
+
+-- | [Optional] Indicates if BigQuery should allow extra values that are not
+-- represented in the table schema. If true, the extra values are ignored.
+-- If false, records with extra columns are treated as bad records, and if
+-- there are too many bad records, an invalid error is returned in the job
+-- result. The default value is false. The sourceFormat property determines
+-- what BigQuery treats as an extra value: CSV: Trailing columns JSON:
+-- Named values that don\'t match any column names
+jclIgnoreUnknownValues :: Lens' JobConfigurationLoad (Maybe Bool)
+jclIgnoreUnknownValues
+  = lens _jclIgnoreUnknownValues
+      (\ s a -> s{_jclIgnoreUnknownValues = a})
+
+-- | Allows the schema of the destination table to be updated as a side
+-- effect of the load job if a schema is autodetected or supplied in the
+-- job configuration. Schema update options are supported in two cases:
+-- when writeDisposition is WRITE_APPEND; when writeDisposition is
+-- WRITE_TRUNCATE and the destination table is a partition of a table,
+-- specified by partition decorators. For normal tables, WRITE_TRUNCATE
+-- will always overwrite the schema. One or more of the following values
+-- are specified: ALLOW_FIELD_ADDITION: allow adding a nullable field to
+-- the schema. ALLOW_FIELD_RELAXATION: allow relaxing a required field in
+-- the original schema to nullable.
+jclSchemaUpdateOptions :: Lens' JobConfigurationLoad [Text]
+jclSchemaUpdateOptions
+  = lens _jclSchemaUpdateOptions
+      (\ s a -> s{_jclSchemaUpdateOptions = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] Specifies whether the job is allowed to create new tables.
+-- The following values are supported: CREATE_IF_NEEDED: If the table does
+-- not exist, BigQuery creates the table. CREATE_NEVER: The table must
+-- already exist. If it does not, a \'notFound\' error is returned in the
+-- job result. The default value is CREATE_IF_NEEDED. Creation, truncation
+-- and append actions occur as one atomic update upon job completion.
+jclCreateDisPosition :: Lens' JobConfigurationLoad (Maybe Text)
+jclCreateDisPosition
+  = lens _jclCreateDisPosition
+      (\ s a -> s{_jclCreateDisPosition = a})
+
+-- | [Deprecated] The format of the schemaInline property.
+jclSchemaInlineFormat :: Lens' JobConfigurationLoad (Maybe Text)
+jclSchemaInlineFormat
+  = lens _jclSchemaInlineFormat
+      (\ s a -> s{_jclSchemaInlineFormat = a})
+
+-- | Indicates if BigQuery should allow quoted data sections that contain
+-- newline characters in a CSV file. The default value is false.
+jclAllowQuotedNewlines :: Lens' JobConfigurationLoad (Maybe Bool)
+jclAllowQuotedNewlines
+  = lens _jclAllowQuotedNewlines
+      (\ s a -> s{_jclAllowQuotedNewlines = a})
+
+-- | [Optional] The format of the data files. For CSV files, specify \"CSV\".
+-- For datastore backups, specify \"DATASTORE_BACKUP\". For
+-- newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\". For Avro,
+-- specify \"AVRO\". For parquet, specify \"PARQUET\". For orc, specify
+-- \"ORC\". The default value is CSV.
+jclSourceFormat :: Lens' JobConfigurationLoad (Maybe Text)
+jclSourceFormat
+  = lens _jclSourceFormat
+      (\ s a -> s{_jclSourceFormat = a})
+
+-- | [Optional] If sourceFormat is set to \"AVRO\", indicates whether to
+-- enable interpreting logical types into their corresponding types (ie.
+-- TIMESTAMP), instead of only using their raw types (ie. INTEGER).
+jclUseAvroLogicalTypes :: Lens' JobConfigurationLoad (Maybe Bool)
+jclUseAvroLogicalTypes
+  = lens _jclUseAvroLogicalTypes
+      (\ s a -> s{_jclUseAvroLogicalTypes = a})
+
+-- | [Optional] The schema for the destination table. The schema can be
+-- omitted if the destination table already exists, or if you\'re loading
+-- data from Google Cloud Datastore.
+jclSchema :: Lens' JobConfigurationLoad (Maybe TableSchema)
+jclSchema
+  = lens _jclSchema (\ s a -> s{_jclSchema = a})
+
+-- | Time-based partitioning specification for the destination table. Only
+-- one of timePartitioning and rangePartitioning should be specified.
+jclTimePartitioning :: Lens' JobConfigurationLoad (Maybe TimePartitioning)
+jclTimePartitioning
+  = lens _jclTimePartitioning
+      (\ s a -> s{_jclTimePartitioning = a})
+
+-- | [Optional] The value that is used to quote data sections in a CSV file.
+-- BigQuery converts the string to ISO-8859-1 encoding, and then uses the
+-- first byte of the encoded string to split the data in its raw, binary
+-- state. The default value is a double-quote (\'\"\'). If your data does
+-- not contain quoted sections, set the property value to an empty string.
+-- If your data contains quoted newline characters, you must also set the
+-- allowQuotedNewlines property to true.
+jclQuote :: Lens' JobConfigurationLoad (Maybe Text)
+jclQuote = lens _jclQuote (\ s a -> s{_jclQuote = a})
+
+-- | [Optional] The maximum number of bad records that BigQuery can ignore
+-- when running the job. If the number of bad records exceeds this value,
+-- an invalid error is returned in the job result. This is only valid for
+-- CSV and JSON. The default value is 0, which requires that all records
+-- are valid.
+jclMaxBadRecords :: Lens' JobConfigurationLoad (Maybe Int32)
+jclMaxBadRecords
+  = lens _jclMaxBadRecords
+      (\ s a -> s{_jclMaxBadRecords = a})
+      . mapping _Coerce
+
+-- | [Optional] Indicates if we should automatically infer the options and
+-- schema for CSV and JSON sources.
+jclAutodetect :: Lens' JobConfigurationLoad (Maybe Bool)
+jclAutodetect
+  = lens _jclAutodetect
+      (\ s a -> s{_jclAutodetect = a})
+
+-- | [Required] The fully-qualified URIs that point to your data in Google
+-- Cloud. For Google Cloud Storage URIs: Each URI can contain one \'*\'
+-- wildcard character and it must come after the \'bucket\' name. Size
+-- limits related to load jobs apply to external data sources. For Google
+-- Cloud Bigtable URIs: Exactly one URI can be specified and it has be a
+-- fully specified and valid HTTPS URL for a Google Cloud Bigtable table.
+-- For Google Cloud Datastore backups: Exactly one URI can be specified.
+-- Also, the \'*\' wildcard character is not allowed.
+jclSourceURIs :: Lens' JobConfigurationLoad [Text]
+jclSourceURIs
+  = lens _jclSourceURIs
+      (\ s a -> s{_jclSourceURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] The character encoding of the data. The supported values are
+-- UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the
+-- data after the raw, binary data has been split using the values of the
+-- quote and fieldDelimiter properties.
+jclEncoding :: Lens' JobConfigurationLoad (Maybe Text)
+jclEncoding
+  = lens _jclEncoding (\ s a -> s{_jclEncoding = a})
+
+-- | [Beta] [Optional] Properties with which to create the destination table
+-- if it is new.
+jclDestinationTableProperties :: Lens' JobConfigurationLoad (Maybe DestinationTableProperties)
+jclDestinationTableProperties
+  = lens _jclDestinationTableProperties
+      (\ s a -> s{_jclDestinationTableProperties = a})
+
+-- | Custom encryption configuration (e.g., Cloud KMS keys).
+jclDestinationEncryptionConfiguration :: Lens' JobConfigurationLoad (Maybe EncryptionConfiguration)
+jclDestinationEncryptionConfiguration
+  = lens _jclDestinationEncryptionConfiguration
+      (\ s a ->
+         s{_jclDestinationEncryptionConfiguration = a})
+
+-- | [Optional] The separator for fields in a CSV file. The separator can be
+-- any ISO-8859-1 single-byte character. To use a character in the range
+-- 128-255, you must encode the character as UTF8. BigQuery converts the
+-- string to ISO-8859-1 encoding, and then uses the first byte of the
+-- encoded string to split the data in its raw, binary state. BigQuery also
+-- supports the escape sequence \"\\t\" to specify a tab separator. The
+-- default value is a comma (\',\').
+jclFieldDelimiter :: Lens' JobConfigurationLoad (Maybe Text)
+jclFieldDelimiter
+  = lens _jclFieldDelimiter
+      (\ s a -> s{_jclFieldDelimiter = a})
+
+-- | [Optional] Specifies a string that represents a null value in a CSV
+-- file. For example, if you specify \"\\N\", BigQuery interprets \"\\N\"
+-- as a null value when loading a CSV file. The default value is the empty
+-- string. If you set this property to a custom value, BigQuery throws an
+-- error if an empty string is present for all data types except for STRING
+-- and BYTE. For STRING and BYTE columns, BigQuery interprets the empty
+-- string as an empty value.
+jclNullMarker :: Lens' JobConfigurationLoad (Maybe Text)
+jclNullMarker
+  = lens _jclNullMarker
+      (\ s a -> s{_jclNullMarker = a})
+
+instance FromJSON JobConfigurationLoad where
+        parseJSON
+          = withObject "JobConfigurationLoad"
+              (\ o ->
+                 JobConfigurationLoad' <$>
+                   (o .:? "skipLeadingRows") <*>
+                     (o .:? "projectionFields" .!= mempty)
+                     <*> (o .:? "destinationTable")
+                     <*> (o .:? "writeDisposition")
+                     <*> (o .:? "allowJaggedRows")
+                     <*> (o .:? "clustering")
+                     <*> (o .:? "rangePartitioning")
+                     <*> (o .:? "schemaInline")
+                     <*> (o .:? "ignoreUnknownValues")
+                     <*> (o .:? "schemaUpdateOptions" .!= mempty)
+                     <*> (o .:? "createDisposition")
+                     <*> (o .:? "schemaInlineFormat")
+                     <*> (o .:? "allowQuotedNewlines")
+                     <*> (o .:? "sourceFormat")
+                     <*> (o .:? "useAvroLogicalTypes")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "timePartitioning")
+                     <*> (o .:? "quote")
+                     <*> (o .:? "maxBadRecords")
+                     <*> (o .:? "autodetect")
+                     <*> (o .:? "sourceUris" .!= mempty)
+                     <*> (o .:? "encoding")
+                     <*> (o .:? "destinationTableProperties")
+                     <*> (o .:? "destinationEncryptionConfiguration")
+                     <*> (o .:? "fieldDelimiter")
+                     <*> (o .:? "nullMarker"))
+
+instance ToJSON JobConfigurationLoad where
+        toJSON JobConfigurationLoad'{..}
+          = object
+              (catMaybes
+                 [("skipLeadingRows" .=) <$> _jclSkipLeadingRows,
+                  ("projectionFields" .=) <$> _jclProjectionFields,
+                  ("destinationTable" .=) <$> _jclDestinationTable,
+                  ("writeDisposition" .=) <$> _jclWriteDisPosition,
+                  ("allowJaggedRows" .=) <$> _jclAllowJaggedRows,
+                  ("clustering" .=) <$> _jclClustering,
+                  ("rangePartitioning" .=) <$> _jclRangePartitioning,
+                  ("schemaInline" .=) <$> _jclSchemaInline,
+                  ("ignoreUnknownValues" .=) <$>
+                    _jclIgnoreUnknownValues,
+                  ("schemaUpdateOptions" .=) <$>
+                    _jclSchemaUpdateOptions,
+                  ("createDisposition" .=) <$> _jclCreateDisPosition,
+                  ("schemaInlineFormat" .=) <$> _jclSchemaInlineFormat,
+                  ("allowQuotedNewlines" .=) <$>
+                    _jclAllowQuotedNewlines,
+                  ("sourceFormat" .=) <$> _jclSourceFormat,
+                  ("useAvroLogicalTypes" .=) <$>
+                    _jclUseAvroLogicalTypes,
+                  ("schema" .=) <$> _jclSchema,
+                  ("timePartitioning" .=) <$> _jclTimePartitioning,
+                  ("quote" .=) <$> _jclQuote,
+                  ("maxBadRecords" .=) <$> _jclMaxBadRecords,
+                  ("autodetect" .=) <$> _jclAutodetect,
+                  ("sourceUris" .=) <$> _jclSourceURIs,
+                  ("encoding" .=) <$> _jclEncoding,
+                  ("destinationTableProperties" .=) <$>
+                    _jclDestinationTableProperties,
+                  ("destinationEncryptionConfiguration" .=) <$>
+                    _jclDestinationEncryptionConfiguration,
+                  ("fieldDelimiter" .=) <$> _jclFieldDelimiter,
+                  ("nullMarker" .=) <$> _jclNullMarker])
+
+--
+-- /See:/ 'dataSetReference' smart constructor.
+data DataSetReference = DataSetReference'
+    { _dsrDataSetId :: !(Maybe Text)
+    , _dsrProjectId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrDataSetId'
+--
+-- * 'dsrProjectId'
+dataSetReference
+    :: DataSetReference
+dataSetReference =
+    DataSetReference'
+    { _dsrDataSetId = Nothing
+    , _dsrProjectId = Nothing
+    }
+
+-- | [Required] A unique ID for this dataset, without the project name. The
+-- ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores
+-- (_). The maximum length is 1,024 characters.
+dsrDataSetId :: Lens' DataSetReference (Maybe Text)
+dsrDataSetId
+  = lens _dsrDataSetId (\ s a -> s{_dsrDataSetId = a})
+
+-- | [Optional] The ID of the project containing this dataset.
+dsrProjectId :: Lens' DataSetReference (Maybe Text)
+dsrProjectId
+  = lens _dsrProjectId (\ s a -> s{_dsrProjectId = a})
+
+instance FromJSON DataSetReference where
+        parseJSON
+          = withObject "DataSetReference"
+              (\ o ->
+                 DataSetReference' <$>
+                   (o .:? "datasetId") <*> (o .:? "projectId"))
+
+instance ToJSON DataSetReference where
+        toJSON DataSetReference'{..}
+          = object
+              (catMaybes
+                 [("datasetId" .=) <$> _dsrDataSetId,
+                  ("projectId" .=) <$> _dsrProjectId])
+
+--
+-- /See:/ 'materializedViewDefinition' smart constructor.
+data MaterializedViewDefinition = MaterializedViewDefinition'
+    { _mvdQuery           :: !(Maybe Text)
+    , _mvdLastRefreshTime :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MaterializedViewDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mvdQuery'
+--
+-- * 'mvdLastRefreshTime'
+materializedViewDefinition
+    :: MaterializedViewDefinition
+materializedViewDefinition =
+    MaterializedViewDefinition'
+    { _mvdQuery = Nothing
+    , _mvdLastRefreshTime = Nothing
+    }
+
+-- | [Required] A query whose result is persisted.
+mvdQuery :: Lens' MaterializedViewDefinition (Maybe Text)
+mvdQuery = lens _mvdQuery (\ s a -> s{_mvdQuery = a})
+
+-- | [Output-only] [TrustedTester] The time when this materialized view was
+-- last modified, in milliseconds since the epoch.
+mvdLastRefreshTime :: Lens' MaterializedViewDefinition (Maybe Int64)
+mvdLastRefreshTime
+  = lens _mvdLastRefreshTime
+      (\ s a -> s{_mvdLastRefreshTime = a})
+      . mapping _Coerce
+
+instance FromJSON MaterializedViewDefinition where
+        parseJSON
+          = withObject "MaterializedViewDefinition"
+              (\ o ->
+                 MaterializedViewDefinition' <$>
+                   (o .:? "query") <*> (o .:? "lastRefreshTime"))
+
+instance ToJSON MaterializedViewDefinition where
+        toJSON MaterializedViewDefinition'{..}
+          = object
+              (catMaybes
+                 [("query" .=) <$> _mvdQuery,
+                  ("lastRefreshTime" .=) <$> _mvdLastRefreshTime])
+
+--
+-- /See:/ 'tableDataInsertAllRequest' smart constructor.
+data TableDataInsertAllRequest = TableDataInsertAllRequest'
+    { _tdiarKind                :: !Text
+    , _tdiarIgnoreUnknownValues :: !(Maybe Bool)
+    , _tdiarRows                :: !(Maybe [TableDataInsertAllRequestRowsItem])
+    , _tdiarTemplateSuffix      :: !(Maybe Text)
+    , _tdiarSkipInvalidRows     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableDataInsertAllRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdiarKind'
+--
+-- * 'tdiarIgnoreUnknownValues'
+--
+-- * 'tdiarRows'
+--
+-- * 'tdiarTemplateSuffix'
+--
+-- * 'tdiarSkipInvalidRows'
+tableDataInsertAllRequest
+    :: TableDataInsertAllRequest
+tableDataInsertAllRequest =
+    TableDataInsertAllRequest'
+    { _tdiarKind = "bigquery#tableDataInsertAllRequest"
+    , _tdiarIgnoreUnknownValues = Nothing
+    , _tdiarRows = Nothing
+    , _tdiarTemplateSuffix = Nothing
+    , _tdiarSkipInvalidRows = Nothing
+    }
+
+-- | The resource type of the response.
+tdiarKind :: Lens' TableDataInsertAllRequest Text
+tdiarKind
+  = lens _tdiarKind (\ s a -> s{_tdiarKind = a})
+
+-- | [Optional] Accept rows that contain values that do not match the schema.
+-- The unknown values are ignored. Default is false, which treats unknown
+-- values as errors.
+tdiarIgnoreUnknownValues :: Lens' TableDataInsertAllRequest (Maybe Bool)
+tdiarIgnoreUnknownValues
+  = lens _tdiarIgnoreUnknownValues
+      (\ s a -> s{_tdiarIgnoreUnknownValues = a})
+
+-- | The rows to insert.
+tdiarRows :: Lens' TableDataInsertAllRequest [TableDataInsertAllRequestRowsItem]
+tdiarRows
+  = lens _tdiarRows (\ s a -> s{_tdiarRows = a}) .
+      _Default
+      . _Coerce
+
+-- | If specified, treats the destination table as a base template, and
+-- inserts the rows into an instance table named
+-- \"{destination}{templateSuffix}\". BigQuery will manage creation of the
+-- instance table, using the schema of the base template table. See
+-- https:\/\/cloud.google.com\/bigquery\/streaming-data-into-bigquery#template-tables
+-- for considerations when working with templates tables.
+tdiarTemplateSuffix :: Lens' TableDataInsertAllRequest (Maybe Text)
+tdiarTemplateSuffix
+  = lens _tdiarTemplateSuffix
+      (\ s a -> s{_tdiarTemplateSuffix = a})
+
+-- | [Optional] Insert all valid rows of a request, even if invalid rows
+-- exist. The default value is false, which causes the entire request to
+-- fail if any invalid rows exist.
+tdiarSkipInvalidRows :: Lens' TableDataInsertAllRequest (Maybe Bool)
+tdiarSkipInvalidRows
+  = lens _tdiarSkipInvalidRows
+      (\ s a -> s{_tdiarSkipInvalidRows = a})
+
+instance FromJSON TableDataInsertAllRequest where
+        parseJSON
+          = withObject "TableDataInsertAllRequest"
+              (\ o ->
+                 TableDataInsertAllRequest' <$>
+                   (o .:? "kind" .!=
+                      "bigquery#tableDataInsertAllRequest")
+                     <*> (o .:? "ignoreUnknownValues")
+                     <*> (o .:? "rows" .!= mempty)
+                     <*> (o .:? "templateSuffix")
+                     <*> (o .:? "skipInvalidRows"))
+
+instance ToJSON TableDataInsertAllRequest where
+        toJSON TableDataInsertAllRequest'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _tdiarKind),
+                  ("ignoreUnknownValues" .=) <$>
+                    _tdiarIgnoreUnknownValues,
+                  ("rows" .=) <$> _tdiarRows,
+                  ("templateSuffix" .=) <$> _tdiarTemplateSuffix,
+                  ("skipInvalidRows" .=) <$> _tdiarSkipInvalidRows])
+
+--
+-- /See:/ 'getServiceAccountResponse' smart constructor.
+data GetServiceAccountResponse = GetServiceAccountResponse'
+    { _gsarEmail :: !(Maybe Text)
+    , _gsarKind  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetServiceAccountResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsarEmail'
+--
+-- * 'gsarKind'
+getServiceAccountResponse
+    :: GetServiceAccountResponse
+getServiceAccountResponse =
+    GetServiceAccountResponse'
+    { _gsarEmail = Nothing
+    , _gsarKind = "bigquery#getServiceAccountResponse"
+    }
+
+-- | The service account email address.
+gsarEmail :: Lens' GetServiceAccountResponse (Maybe Text)
+gsarEmail
+  = lens _gsarEmail (\ s a -> s{_gsarEmail = a})
+
+-- | The resource type of the response.
+gsarKind :: Lens' GetServiceAccountResponse Text
+gsarKind = lens _gsarKind (\ s a -> s{_gsarKind = a})
+
+instance FromJSON GetServiceAccountResponse where
+        parseJSON
+          = withObject "GetServiceAccountResponse"
+              (\ o ->
+                 GetServiceAccountResponse' <$>
+                   (o .:? "email") <*>
+                     (o .:? "kind" .!=
+                        "bigquery#getServiceAccountResponse"))
+
+instance ToJSON GetServiceAccountResponse where
+        toJSON GetServiceAccountResponse'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _gsarEmail,
+                  Just ("kind" .= _gsarKind)])
+
+--
+-- /See:/ 'projectListProjectsItem' smart constructor.
+data ProjectListProjectsItem = ProjectListProjectsItem'
+    { _plpiFriendlyName     :: !(Maybe Text)
+    , _plpiKind             :: !Text
+    , _plpiProjectReference :: !(Maybe ProjectReference)
+    , _plpiId               :: !(Maybe Text)
+    , _plpiNumericId        :: !(Maybe (Textual Word64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectListProjectsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plpiFriendlyName'
+--
+-- * 'plpiKind'
+--
+-- * 'plpiProjectReference'
+--
+-- * 'plpiId'
+--
+-- * 'plpiNumericId'
+projectListProjectsItem
+    :: ProjectListProjectsItem
+projectListProjectsItem =
+    ProjectListProjectsItem'
+    { _plpiFriendlyName = Nothing
+    , _plpiKind = "bigquery#project"
+    , _plpiProjectReference = Nothing
+    , _plpiId = Nothing
+    , _plpiNumericId = Nothing
+    }
+
+-- | A descriptive name for this project.
+plpiFriendlyName :: Lens' ProjectListProjectsItem (Maybe Text)
+plpiFriendlyName
+  = lens _plpiFriendlyName
+      (\ s a -> s{_plpiFriendlyName = a})
+
+-- | The resource type.
+plpiKind :: Lens' ProjectListProjectsItem Text
+plpiKind = lens _plpiKind (\ s a -> s{_plpiKind = a})
+
+-- | A unique reference to this project.
+plpiProjectReference :: Lens' ProjectListProjectsItem (Maybe ProjectReference)
+plpiProjectReference
+  = lens _plpiProjectReference
+      (\ s a -> s{_plpiProjectReference = a})
+
+-- | An opaque ID of this project.
+plpiId :: Lens' ProjectListProjectsItem (Maybe Text)
+plpiId = lens _plpiId (\ s a -> s{_plpiId = a})
+
+-- | The numeric ID of this project.
+plpiNumericId :: Lens' ProjectListProjectsItem (Maybe Word64)
+plpiNumericId
+  = lens _plpiNumericId
+      (\ s a -> s{_plpiNumericId = a})
+      . mapping _Coerce
+
+instance FromJSON ProjectListProjectsItem where
+        parseJSON
+          = withObject "ProjectListProjectsItem"
+              (\ o ->
+                 ProjectListProjectsItem' <$>
+                   (o .:? "friendlyName") <*>
+                     (o .:? "kind" .!= "bigquery#project")
+                     <*> (o .:? "projectReference")
+                     <*> (o .:? "id")
+                     <*> (o .:? "numericId"))
+
+instance ToJSON ProjectListProjectsItem where
+        toJSON ProjectListProjectsItem'{..}
+          = object
+              (catMaybes
+                 [("friendlyName" .=) <$> _plpiFriendlyName,
+                  Just ("kind" .= _plpiKind),
+                  ("projectReference" .=) <$> _plpiProjectReference,
+                  ("id" .=) <$> _plpiId,
+                  ("numericId" .=) <$> _plpiNumericId])
+
+--
+-- /See:/ 'bigtableColumn' smart constructor.
+data BigtableColumn = BigtableColumn'
+    { _bcQualifierEncoded :: !(Maybe Bytes)
+    , _bcFieldName        :: !(Maybe Text)
+    , _bcQualifierString  :: !(Maybe Text)
+    , _bcOnlyReadLatest   :: !(Maybe Bool)
+    , _bcType             :: !(Maybe Text)
+    , _bcEncoding         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BigtableColumn' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcQualifierEncoded'
+--
+-- * 'bcFieldName'
+--
+-- * 'bcQualifierString'
+--
+-- * 'bcOnlyReadLatest'
+--
+-- * 'bcType'
+--
+-- * 'bcEncoding'
+bigtableColumn
+    :: BigtableColumn
+bigtableColumn =
+    BigtableColumn'
+    { _bcQualifierEncoded = Nothing
+    , _bcFieldName = Nothing
+    , _bcQualifierString = Nothing
+    , _bcOnlyReadLatest = Nothing
+    , _bcType = Nothing
+    , _bcEncoding = Nothing
+    }
+
+-- | [Required] Qualifier of the column. Columns in the parent column family
+-- that has this exact qualifier are exposed as . field. If the qualifier
+-- is valid UTF-8 string, it can be specified in the qualifier_string
+-- field. Otherwise, a base-64 encoded value must be set to
+-- qualifier_encoded. The column field name is the same as the column
+-- qualifier. However, if the qualifier is not a valid BigQuery field
+-- identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier
+-- must be provided as field_name.
+bcQualifierEncoded :: Lens' BigtableColumn (Maybe ByteString)
+bcQualifierEncoded
+  = lens _bcQualifierEncoded
+      (\ s a -> s{_bcQualifierEncoded = a})
+      . mapping _Bytes
+
+-- | [Optional] If the qualifier is not a valid BigQuery field identifier
+-- i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be
+-- provided as the column field name and is used as field name in queries.
+bcFieldName :: Lens' BigtableColumn (Maybe Text)
+bcFieldName
+  = lens _bcFieldName (\ s a -> s{_bcFieldName = a})
+
+bcQualifierString :: Lens' BigtableColumn (Maybe Text)
+bcQualifierString
+  = lens _bcQualifierString
+      (\ s a -> s{_bcQualifierString = a})
+
+-- | [Optional] If this is set, only the latest version of value in this
+-- column are exposed. \'onlyReadLatest\' can also be set at the column
+-- family level. However, the setting at this level takes precedence if
+-- \'onlyReadLatest\' is set at both levels.
+bcOnlyReadLatest :: Lens' BigtableColumn (Maybe Bool)
+bcOnlyReadLatest
+  = lens _bcOnlyReadLatest
+      (\ s a -> s{_bcOnlyReadLatest = a})
+
+-- | [Optional] The type to convert the value in cells of this column. The
+-- values are expected to be encoded using HBase Bytes.toBytes function
+-- when using the BINARY encoding value. Following BigQuery types are
+-- allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Default
+-- type is BYTES. \'type\' can also be set at the column family level.
+-- However, the setting at this level takes precedence if \'type\' is set
+-- at both levels.
+bcType :: Lens' BigtableColumn (Maybe Text)
+bcType = lens _bcType (\ s a -> s{_bcType = a})
+
+-- | [Optional] The encoding of the values when the type is not STRING.
+-- Acceptable encoding values are: TEXT - indicates values are alphanumeric
+-- text strings. BINARY - indicates values are encoded using HBase
+-- Bytes.toBytes family of functions. \'encoding\' can also be set at the
+-- column family level. However, the setting at this level takes precedence
+-- if \'encoding\' is set at both levels.
+bcEncoding :: Lens' BigtableColumn (Maybe Text)
+bcEncoding
+  = lens _bcEncoding (\ s a -> s{_bcEncoding = a})
+
+instance FromJSON BigtableColumn where
+        parseJSON
+          = withObject "BigtableColumn"
+              (\ o ->
+                 BigtableColumn' <$>
+                   (o .:? "qualifierEncoded") <*> (o .:? "fieldName")
+                     <*> (o .:? "qualifierString")
+                     <*> (o .:? "onlyReadLatest")
+                     <*> (o .:? "type")
+                     <*> (o .:? "encoding"))
+
+instance ToJSON BigtableColumn where
+        toJSON BigtableColumn'{..}
+          = object
+              (catMaybes
+                 [("qualifierEncoded" .=) <$> _bcQualifierEncoded,
+                  ("fieldName" .=) <$> _bcFieldName,
+                  ("qualifierString" .=) <$> _bcQualifierString,
+                  ("onlyReadLatest" .=) <$> _bcOnlyReadLatest,
+                  ("type" .=) <$> _bcType,
+                  ("encoding" .=) <$> _bcEncoding])
+
+--
+-- /See:/ 'streamingbuffer' smart constructor.
+data Streamingbuffer = Streamingbuffer'
+    { _sEstimatedBytes  :: !(Maybe (Textual Word64))
+    , _sOldestEntryTime :: !(Maybe (Textual Word64))
+    , _sEstimatedRows   :: !(Maybe (Textual Word64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Streamingbuffer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sEstimatedBytes'
+--
+-- * 'sOldestEntryTime'
+--
+-- * 'sEstimatedRows'
+streamingbuffer
+    :: Streamingbuffer
+streamingbuffer =
+    Streamingbuffer'
+    { _sEstimatedBytes = Nothing
+    , _sOldestEntryTime = Nothing
+    , _sEstimatedRows = Nothing
+    }
+
+-- | [Output-only] A lower-bound estimate of the number of bytes currently in
+-- the streaming buffer.
+sEstimatedBytes :: Lens' Streamingbuffer (Maybe Word64)
+sEstimatedBytes
+  = lens _sEstimatedBytes
+      (\ s a -> s{_sEstimatedBytes = a})
+      . mapping _Coerce
+
+-- | [Output-only] Contains the timestamp of the oldest entry in the
+-- streaming buffer, in milliseconds since the epoch, if the streaming
+-- buffer is available.
+sOldestEntryTime :: Lens' Streamingbuffer (Maybe Word64)
+sOldestEntryTime
+  = lens _sOldestEntryTime
+      (\ s a -> s{_sOldestEntryTime = a})
+      . mapping _Coerce
+
+-- | [Output-only] A lower-bound estimate of the number of rows currently in
+-- the streaming buffer.
+sEstimatedRows :: Lens' Streamingbuffer (Maybe Word64)
+sEstimatedRows
+  = lens _sEstimatedRows
+      (\ s a -> s{_sEstimatedRows = a})
+      . mapping _Coerce
+
+instance FromJSON Streamingbuffer where
+        parseJSON
+          = withObject "Streamingbuffer"
+              (\ o ->
+                 Streamingbuffer' <$>
+                   (o .:? "estimatedBytes") <*>
+                     (o .:? "oldestEntryTime")
+                     <*> (o .:? "estimatedRows"))
+
+instance ToJSON Streamingbuffer where
+        toJSON Streamingbuffer'{..}
+          = object
+              (catMaybes
+                 [("estimatedBytes" .=) <$> _sEstimatedBytes,
+                  ("oldestEntryTime" .=) <$> _sOldestEntryTime,
+                  ("estimatedRows" .=) <$> _sEstimatedRows])
+
+--
+-- /See:/ 'tableRow' smart constructor.
+newtype TableRow = TableRow'
+    { _trF :: Maybe [TableCell]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableRow' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trF'
+tableRow
+    :: TableRow
+tableRow =
+    TableRow'
+    { _trF = Nothing
+    }
+
+-- | Represents a single row in the result set, consisting of one or more
+-- fields.
+trF :: Lens' TableRow [TableCell]
+trF
+  = lens _trF (\ s a -> s{_trF = a}) . _Default .
+      _Coerce
+
+instance FromJSON TableRow where
+        parseJSON
+          = withObject "TableRow"
+              (\ o -> TableRow' <$> (o .:? "f" .!= mempty))
+
+instance ToJSON TableRow where
+        toJSON TableRow'{..}
+          = object (catMaybes [("f" .=) <$> _trF])
+
+--
+-- /See:/ 'jobListJobsItem' smart constructor.
+data JobListJobsItem = JobListJobsItem'
+    { _jljiJobReference  :: !(Maybe JobReference)
+    , _jljiStatus        :: !(Maybe JobStatus)
+    , _jljiState         :: !(Maybe Text)
+    , _jljiUserEmail     :: !(Maybe Text)
+    , _jljiKind          :: !Text
+    , _jljiErrorResult   :: !(Maybe ErrorProto)
+    , _jljiId            :: !(Maybe Text)
+    , _jljiStatistics    :: !(Maybe JobStatistics)
+    , _jljiConfiguration :: !(Maybe JobConfiguration)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobListJobsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jljiJobReference'
+--
+-- * 'jljiStatus'
+--
+-- * 'jljiState'
+--
+-- * 'jljiUserEmail'
+--
+-- * 'jljiKind'
+--
+-- * 'jljiErrorResult'
+--
+-- * 'jljiId'
+--
+-- * 'jljiStatistics'
+--
+-- * 'jljiConfiguration'
+jobListJobsItem
+    :: JobListJobsItem
+jobListJobsItem =
+    JobListJobsItem'
+    { _jljiJobReference = Nothing
+    , _jljiStatus = Nothing
+    , _jljiState = Nothing
+    , _jljiUserEmail = Nothing
+    , _jljiKind = "bigquery#job"
+    , _jljiErrorResult = Nothing
+    , _jljiId = Nothing
+    , _jljiStatistics = Nothing
+    , _jljiConfiguration = Nothing
+    }
+
+-- | Job reference uniquely identifying the job.
+jljiJobReference :: Lens' JobListJobsItem (Maybe JobReference)
+jljiJobReference
+  = lens _jljiJobReference
+      (\ s a -> s{_jljiJobReference = a})
+
+-- | [Full-projection-only] Describes the state of the job.
+jljiStatus :: Lens' JobListJobsItem (Maybe JobStatus)
+jljiStatus
+  = lens _jljiStatus (\ s a -> s{_jljiStatus = a})
+
+-- | Running state of the job. When the state is DONE, errorResult can be
+-- checked to determine whether the job succeeded or failed.
+jljiState :: Lens' JobListJobsItem (Maybe Text)
+jljiState
+  = lens _jljiState (\ s a -> s{_jljiState = a})
+
+-- | [Full-projection-only] Email address of the user who ran the job.
+jljiUserEmail :: Lens' JobListJobsItem (Maybe Text)
+jljiUserEmail
+  = lens _jljiUserEmail
+      (\ s a -> s{_jljiUserEmail = a})
+
+-- | The resource type.
+jljiKind :: Lens' JobListJobsItem Text
+jljiKind = lens _jljiKind (\ s a -> s{_jljiKind = a})
+
+-- | A result object that will be present only if the job has failed.
+jljiErrorResult :: Lens' JobListJobsItem (Maybe ErrorProto)
+jljiErrorResult
+  = lens _jljiErrorResult
+      (\ s a -> s{_jljiErrorResult = a})
+
+-- | Unique opaque ID of the job.
+jljiId :: Lens' JobListJobsItem (Maybe Text)
+jljiId = lens _jljiId (\ s a -> s{_jljiId = a})
+
+-- | [Output-only] Information about the job, including starting time and
+-- ending time of the job.
+jljiStatistics :: Lens' JobListJobsItem (Maybe JobStatistics)
+jljiStatistics
+  = lens _jljiStatistics
+      (\ s a -> s{_jljiStatistics = a})
+
+-- | [Full-projection-only] Specifies the job configuration.
+jljiConfiguration :: Lens' JobListJobsItem (Maybe JobConfiguration)
+jljiConfiguration
+  = lens _jljiConfiguration
+      (\ s a -> s{_jljiConfiguration = a})
+
+instance FromJSON JobListJobsItem where
+        parseJSON
+          = withObject "JobListJobsItem"
+              (\ o ->
+                 JobListJobsItem' <$>
+                   (o .:? "jobReference") <*> (o .:? "status") <*>
+                     (o .:? "state")
+                     <*> (o .:? "user_email")
+                     <*> (o .:? "kind" .!= "bigquery#job")
+                     <*> (o .:? "errorResult")
+                     <*> (o .:? "id")
+                     <*> (o .:? "statistics")
+                     <*> (o .:? "configuration"))
+
+instance ToJSON JobListJobsItem where
+        toJSON JobListJobsItem'{..}
+          = object
+              (catMaybes
+                 [("jobReference" .=) <$> _jljiJobReference,
+                  ("status" .=) <$> _jljiStatus,
+                  ("state" .=) <$> _jljiState,
+                  ("user_email" .=) <$> _jljiUserEmail,
+                  Just ("kind" .= _jljiKind),
+                  ("errorResult" .=) <$> _jljiErrorResult,
+                  ("id" .=) <$> _jljiId,
+                  ("statistics" .=) <$> _jljiStatistics,
+                  ("configuration" .=) <$> _jljiConfiguration])
+
+--
+-- /See:/ 'timePartitioning' smart constructor.
+data TimePartitioning = TimePartitioning'
+    { _tpField                  :: !(Maybe Text)
+    , _tpExpirationMs           :: !(Maybe (Textual Int64))
+    , _tpRequirePartitionFilter :: !(Maybe Bool)
+    , _tpType                   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimePartitioning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpField'
+--
+-- * 'tpExpirationMs'
+--
+-- * 'tpRequirePartitionFilter'
+--
+-- * 'tpType'
+timePartitioning
+    :: TimePartitioning
+timePartitioning =
+    TimePartitioning'
+    { _tpField = Nothing
+    , _tpExpirationMs = Nothing
+    , _tpRequirePartitionFilter = Nothing
+    , _tpType = Nothing
+    }
+
+-- | [Beta] [Optional] If not set, the table is partitioned by pseudo column,
+-- referenced via either \'_PARTITIONTIME\' as TIMESTAMP type, or
+-- \'_PARTITIONDATE\' as DATE type. If field is specified, the table is
+-- instead partitioned by this field. The field must be a top-level
+-- TIMESTAMP or DATE field. Its mode must be NULLABLE or REQUIRED.
+tpField :: Lens' TimePartitioning (Maybe Text)
+tpField = lens _tpField (\ s a -> s{_tpField = a})
+
+-- | [Optional] Number of milliseconds for which to keep the storage for
+-- partitions in the table. The storage in a partition will have an
+-- expiration time of its partition time plus this value.
+tpExpirationMs :: Lens' TimePartitioning (Maybe Int64)
+tpExpirationMs
+  = lens _tpExpirationMs
+      (\ s a -> s{_tpExpirationMs = a})
+      . mapping _Coerce
+
+tpRequirePartitionFilter :: Lens' TimePartitioning (Maybe Bool)
+tpRequirePartitionFilter
+  = lens _tpRequirePartitionFilter
+      (\ s a -> s{_tpRequirePartitionFilter = a})
+
+-- | [Required] The only type supported is DAY, which will generate one
+-- partition per day.
+tpType :: Lens' TimePartitioning (Maybe Text)
+tpType = lens _tpType (\ s a -> s{_tpType = a})
+
+instance FromJSON TimePartitioning where
+        parseJSON
+          = withObject "TimePartitioning"
+              (\ o ->
+                 TimePartitioning' <$>
+                   (o .:? "field") <*> (o .:? "expirationMs") <*>
+                     (o .:? "requirePartitionFilter")
+                     <*> (o .:? "type"))
+
+instance ToJSON TimePartitioning where
+        toJSON TimePartitioning'{..}
+          = object
+              (catMaybes
+                 [("field" .=) <$> _tpField,
+                  ("expirationMs" .=) <$> _tpExpirationMs,
+                  ("requirePartitionFilter" .=) <$>
+                    _tpRequirePartitionFilter,
+                  ("type" .=) <$> _tpType])
+
+-- | [Optional] The struct field values, in order of the struct type\'s
+-- declaration.
+--
+-- /See:/ 'queryParameterValueStructValues' smart constructor.
+newtype QueryParameterValueStructValues = QueryParameterValueStructValues'
+    { _qpvsvAddtional :: HashMap Text QueryParameterValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryParameterValueStructValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qpvsvAddtional'
+queryParameterValueStructValues
+    :: HashMap Text QueryParameterValue -- ^ 'qpvsvAddtional'
+    -> QueryParameterValueStructValues
+queryParameterValueStructValues pQpvsvAddtional_ =
+    QueryParameterValueStructValues'
+    { _qpvsvAddtional = _Coerce # pQpvsvAddtional_
+    }
+
+qpvsvAddtional :: Lens' QueryParameterValueStructValues (HashMap Text QueryParameterValue)
+qpvsvAddtional
+  = lens _qpvsvAddtional
+      (\ s a -> s{_qpvsvAddtional = a})
+      . _Coerce
+
+instance FromJSON QueryParameterValueStructValues
+         where
+        parseJSON
+          = withObject "QueryParameterValueStructValues"
+              (\ o ->
+                 QueryParameterValueStructValues' <$>
+                   (parseJSONObject o))
+
+instance ToJSON QueryParameterValueStructValues where
+        toJSON = toJSON . _qpvsvAddtional
+
+-- | The labels associated with this dataset. You can use these to organize
+-- and group your datasets. You can set this property when inserting or
+-- updating a dataset. See Creating and Updating Dataset Labels for more
+-- information.
+--
+-- /See:/ 'dataSetLabels' smart constructor.
+newtype DataSetLabels = DataSetLabels'
+    { _dslAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dslAddtional'
+dataSetLabels
+    :: HashMap Text Text -- ^ 'dslAddtional'
+    -> DataSetLabels
+dataSetLabels pDslAddtional_ =
+    DataSetLabels'
+    { _dslAddtional = _Coerce # pDslAddtional_
+    }
+
+dslAddtional :: Lens' DataSetLabels (HashMap Text Text)
+dslAddtional
+  = lens _dslAddtional (\ s a -> s{_dslAddtional = a})
+      . _Coerce
+
+instance FromJSON DataSetLabels where
+        parseJSON
+          = withObject "DataSetLabels"
+              (\ o -> DataSetLabels' <$> (parseJSONObject o))
+
+instance ToJSON DataSetLabels where
+        toJSON = toJSON . _dslAddtional
+
+--
+-- /See:/ 'jobConfiguration' smart constructor.
+data JobConfiguration = JobConfiguration'
+    { _jcJobType      :: !(Maybe Text)
+    , _jcCopy         :: !(Maybe JobConfigurationTableCopy)
+    , _jcLoad         :: !(Maybe JobConfigurationLoad)
+    , _jcQuery        :: !(Maybe JobConfigurationQuery)
+    , _jcJobTimeoutMs :: !(Maybe (Textual Int64))
+    , _jcExtract      :: !(Maybe JobConfigurationExtract)
+    , _jcLabels       :: !(Maybe JobConfigurationLabels)
+    , _jcDryRun       :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jcJobType'
+--
+-- * 'jcCopy'
+--
+-- * 'jcLoad'
+--
+-- * 'jcQuery'
+--
+-- * 'jcJobTimeoutMs'
+--
+-- * 'jcExtract'
+--
+-- * 'jcLabels'
+--
+-- * 'jcDryRun'
+jobConfiguration
+    :: JobConfiguration
+jobConfiguration =
+    JobConfiguration'
+    { _jcJobType = Nothing
+    , _jcCopy = Nothing
+    , _jcLoad = Nothing
+    , _jcQuery = Nothing
+    , _jcJobTimeoutMs = Nothing
+    , _jcExtract = Nothing
+    , _jcLabels = Nothing
+    , _jcDryRun = Nothing
+    }
+
+-- | [Output-only] The type of the job. Can be QUERY, LOAD, EXTRACT, COPY or
+-- UNKNOWN.
+jcJobType :: Lens' JobConfiguration (Maybe Text)
+jcJobType
+  = lens _jcJobType (\ s a -> s{_jcJobType = a})
+
+-- | [Pick one] Copies a table.
+jcCopy :: Lens' JobConfiguration (Maybe JobConfigurationTableCopy)
+jcCopy = lens _jcCopy (\ s a -> s{_jcCopy = a})
+
+-- | [Pick one] Configures a load job.
+jcLoad :: Lens' JobConfiguration (Maybe JobConfigurationLoad)
+jcLoad = lens _jcLoad (\ s a -> s{_jcLoad = a})
+
+-- | [Pick one] Configures a query job.
+jcQuery :: Lens' JobConfiguration (Maybe JobConfigurationQuery)
+jcQuery = lens _jcQuery (\ s a -> s{_jcQuery = a})
+
+-- | [Optional] Job timeout in milliseconds. If this time limit is exceeded,
+-- BigQuery may attempt to terminate the job.
+jcJobTimeoutMs :: Lens' JobConfiguration (Maybe Int64)
+jcJobTimeoutMs
+  = lens _jcJobTimeoutMs
+      (\ s a -> s{_jcJobTimeoutMs = a})
+      . mapping _Coerce
+
+-- | [Pick one] Configures an extract job.
+jcExtract :: Lens' JobConfiguration (Maybe JobConfigurationExtract)
+jcExtract
+  = lens _jcExtract (\ s a -> s{_jcExtract = a})
+
+-- | The labels associated with this job. You can use these to organize and
+-- group your jobs. Label keys and values can be no longer than 63
+-- characters, can only contain lowercase letters, numeric characters,
+-- underscores and dashes. International characters are allowed. Label
+-- values are optional. Label keys must start with a letter and each label
+-- in the list must have a different key.
+jcLabels :: Lens' JobConfiguration (Maybe JobConfigurationLabels)
+jcLabels = lens _jcLabels (\ s a -> s{_jcLabels = a})
+
+-- | [Optional] If set, don\'t actually run this job. A valid query will
+-- return a mostly empty response with some processing statistics, while an
+-- invalid query will return the same error it would if it wasn\'t a dry
+-- run. Behavior of non-query jobs is undefined.
+jcDryRun :: Lens' JobConfiguration (Maybe Bool)
+jcDryRun = lens _jcDryRun (\ s a -> s{_jcDryRun = a})
+
+instance FromJSON JobConfiguration where
+        parseJSON
+          = withObject "JobConfiguration"
+              (\ o ->
+                 JobConfiguration' <$>
+                   (o .:? "jobType") <*> (o .:? "copy") <*>
+                     (o .:? "load")
+                     <*> (o .:? "query")
+                     <*> (o .:? "jobTimeoutMs")
+                     <*> (o .:? "extract")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "dryRun"))
+
+instance ToJSON JobConfiguration where
+        toJSON JobConfiguration'{..}
+          = object
+              (catMaybes
+                 [("jobType" .=) <$> _jcJobType,
+                  ("copy" .=) <$> _jcCopy, ("load" .=) <$> _jcLoad,
+                  ("query" .=) <$> _jcQuery,
+                  ("jobTimeoutMs" .=) <$> _jcJobTimeoutMs,
+                  ("extract" .=) <$> _jcExtract,
+                  ("labels" .=) <$> _jcLabels,
+                  ("dryRun" .=) <$> _jcDryRun])
+
+--
+-- /See:/ 'job' smart constructor.
+data Job = Job'
+    { _jJobReference  :: !(Maybe JobReference)
+    , _jStatus        :: !(Maybe JobStatus)
+    , _jEtag          :: !(Maybe Text)
+    , _jUserEmail     :: !(Maybe Text)
+    , _jKind          :: !Text
+    , _jSelfLink      :: !(Maybe Text)
+    , _jId            :: !(Maybe Text)
+    , _jStatistics    :: !(Maybe JobStatistics)
+    , _jConfiguration :: !(Maybe JobConfiguration)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Job' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jJobReference'
+--
+-- * 'jStatus'
+--
+-- * 'jEtag'
+--
+-- * 'jUserEmail'
+--
+-- * 'jKind'
+--
+-- * 'jSelfLink'
+--
+-- * 'jId'
+--
+-- * 'jStatistics'
+--
+-- * 'jConfiguration'
+job
+    :: Job
+job =
+    Job'
+    { _jJobReference = Nothing
+    , _jStatus = Nothing
+    , _jEtag = Nothing
+    , _jUserEmail = Nothing
+    , _jKind = "bigquery#job"
+    , _jSelfLink = Nothing
+    , _jId = Nothing
+    , _jStatistics = Nothing
+    , _jConfiguration = Nothing
+    }
+
+-- | [Optional] Reference describing the unique-per-user name of the job.
+jJobReference :: Lens' Job (Maybe JobReference)
+jJobReference
+  = lens _jJobReference
+      (\ s a -> s{_jJobReference = a})
+
+-- | [Output-only] The status of this job. Examine this value when polling an
+-- asynchronous job to see if the job is complete.
+jStatus :: Lens' Job (Maybe JobStatus)
+jStatus = lens _jStatus (\ s a -> s{_jStatus = a})
+
+-- | [Output-only] A hash of this resource.
+jEtag :: Lens' Job (Maybe Text)
+jEtag = lens _jEtag (\ s a -> s{_jEtag = a})
+
+-- | [Output-only] Email address of the user who ran the job.
+jUserEmail :: Lens' Job (Maybe Text)
+jUserEmail
+  = lens _jUserEmail (\ s a -> s{_jUserEmail = a})
+
+-- | [Output-only] The type of the resource.
+jKind :: Lens' Job Text
+jKind = lens _jKind (\ s a -> s{_jKind = a})
+
+-- | [Output-only] A URL that can be used to access this resource again.
+jSelfLink :: Lens' Job (Maybe Text)
+jSelfLink
+  = lens _jSelfLink (\ s a -> s{_jSelfLink = a})
+
+-- | [Output-only] Opaque ID field of the job
+jId :: Lens' Job (Maybe Text)
+jId = lens _jId (\ s a -> s{_jId = a})
+
+-- | [Output-only] Information about the job, including starting time and
+-- ending time of the job.
+jStatistics :: Lens' Job (Maybe JobStatistics)
+jStatistics
+  = lens _jStatistics (\ s a -> s{_jStatistics = a})
+
+-- | [Required] Describes the job configuration.
+jConfiguration :: Lens' Job (Maybe JobConfiguration)
+jConfiguration
+  = lens _jConfiguration
+      (\ s a -> s{_jConfiguration = a})
+
+instance FromJSON Job where
+        parseJSON
+          = withObject "Job"
+              (\ o ->
+                 Job' <$>
+                   (o .:? "jobReference") <*> (o .:? "status") <*>
+                     (o .:? "etag")
+                     <*> (o .:? "user_email")
+                     <*> (o .:? "kind" .!= "bigquery#job")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "statistics")
+                     <*> (o .:? "configuration"))
+
+instance ToJSON Job where
+        toJSON Job'{..}
+          = object
+              (catMaybes
+                 [("jobReference" .=) <$> _jJobReference,
+                  ("status" .=) <$> _jStatus, ("etag" .=) <$> _jEtag,
+                  ("user_email" .=) <$> _jUserEmail,
+                  Just ("kind" .= _jKind),
+                  ("selfLink" .=) <$> _jSelfLink, ("id" .=) <$> _jId,
+                  ("statistics" .=) <$> _jStatistics,
+                  ("configuration" .=) <$> _jConfiguration])
+
+--
+-- /See:/ 'encryptionConfiguration' smart constructor.
+newtype EncryptionConfiguration = EncryptionConfiguration'
+    { _ecKmsKeyName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EncryptionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecKmsKeyName'
+encryptionConfiguration
+    :: EncryptionConfiguration
+encryptionConfiguration =
+    EncryptionConfiguration'
+    { _ecKmsKeyName = Nothing
+    }
+
+-- | [Optional] Describes the Cloud KMS encryption key that will be used to
+-- protect destination BigQuery table. The BigQuery Service Account
+-- associated with your project requires access to this encryption key.
+ecKmsKeyName :: Lens' EncryptionConfiguration (Maybe Text)
+ecKmsKeyName
+  = lens _ecKmsKeyName (\ s a -> s{_ecKmsKeyName = a})
+
+instance FromJSON EncryptionConfiguration where
+        parseJSON
+          = withObject "EncryptionConfiguration"
+              (\ o ->
+                 EncryptionConfiguration' <$> (o .:? "kmsKeyName"))
+
+instance ToJSON EncryptionConfiguration where
+        toJSON EncryptionConfiguration'{..}
+          = object
+              (catMaybes [("kmsKeyName" .=) <$> _ecKmsKeyName])
+
+--
+-- /See:/ 'tableDataInsertAllResponseInsertErrorsItem' smart constructor.
+data TableDataInsertAllResponseInsertErrorsItem = TableDataInsertAllResponseInsertErrorsItem'
+    { _tdiarieiErrors :: !(Maybe [ErrorProto])
+    , _tdiarieiIndex  :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableDataInsertAllResponseInsertErrorsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdiarieiErrors'
+--
+-- * 'tdiarieiIndex'
+tableDataInsertAllResponseInsertErrorsItem
+    :: TableDataInsertAllResponseInsertErrorsItem
+tableDataInsertAllResponseInsertErrorsItem =
+    TableDataInsertAllResponseInsertErrorsItem'
+    { _tdiarieiErrors = Nothing
+    , _tdiarieiIndex = Nothing
+    }
+
+-- | Error information for the row indicated by the index property.
+tdiarieiErrors :: Lens' TableDataInsertAllResponseInsertErrorsItem [ErrorProto]
+tdiarieiErrors
+  = lens _tdiarieiErrors
+      (\ s a -> s{_tdiarieiErrors = a})
+      . _Default
+      . _Coerce
+
+-- | The index of the row that error applies to.
+tdiarieiIndex :: Lens' TableDataInsertAllResponseInsertErrorsItem (Maybe Word32)
+tdiarieiIndex
+  = lens _tdiarieiIndex
+      (\ s a -> s{_tdiarieiIndex = a})
+      . mapping _Coerce
+
+instance FromJSON
+         TableDataInsertAllResponseInsertErrorsItem where
+        parseJSON
+          = withObject
+              "TableDataInsertAllResponseInsertErrorsItem"
+              (\ o ->
+                 TableDataInsertAllResponseInsertErrorsItem' <$>
+                   (o .:? "errors" .!= mempty) <*> (o .:? "index"))
+
+instance ToJSON
+         TableDataInsertAllResponseInsertErrorsItem where
+        toJSON
+          TableDataInsertAllResponseInsertErrorsItem'{..}
+          = object
+              (catMaybes
+                 [("errors" .=) <$> _tdiarieiErrors,
+                  ("index" .=) <$> _tdiarieiIndex])
+
+--
+-- /See:/ 'jobConfigurationExtract' smart constructor.
+data JobConfigurationExtract = JobConfigurationExtract'
+    { _jceDestinationFormat :: !(Maybe Text)
+    , _jceSourceTable       :: !(Maybe TableReference)
+    , _jcePrintHeader       :: !Bool
+    , _jceCompression       :: !(Maybe Text)
+    , _jceDestinationURIs   :: !(Maybe [Text])
+    , _jceDestinationURI    :: !(Maybe Text)
+    , _jceFieldDelimiter    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationExtract' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jceDestinationFormat'
+--
+-- * 'jceSourceTable'
+--
+-- * 'jcePrintHeader'
+--
+-- * 'jceCompression'
+--
+-- * 'jceDestinationURIs'
+--
+-- * 'jceDestinationURI'
+--
+-- * 'jceFieldDelimiter'
+jobConfigurationExtract
+    :: JobConfigurationExtract
+jobConfigurationExtract =
+    JobConfigurationExtract'
+    { _jceDestinationFormat = Nothing
+    , _jceSourceTable = Nothing
+    , _jcePrintHeader = True
+    , _jceCompression = Nothing
+    , _jceDestinationURIs = Nothing
+    , _jceDestinationURI = Nothing
+    , _jceFieldDelimiter = Nothing
+    }
+
+-- | [Optional] The exported file format. Possible values include CSV,
+-- NEWLINE_DELIMITED_JSON and AVRO. The default value is CSV. Tables with
+-- nested or repeated fields cannot be exported as CSV.
+jceDestinationFormat :: Lens' JobConfigurationExtract (Maybe Text)
+jceDestinationFormat
+  = lens _jceDestinationFormat
+      (\ s a -> s{_jceDestinationFormat = a})
+
+-- | [Required] A reference to the table being exported.
+jceSourceTable :: Lens' JobConfigurationExtract (Maybe TableReference)
+jceSourceTable
+  = lens _jceSourceTable
+      (\ s a -> s{_jceSourceTable = a})
+
+-- | [Optional] Whether to print out a header row in the results. Default is
+-- true.
+jcePrintHeader :: Lens' JobConfigurationExtract Bool
+jcePrintHeader
+  = lens _jcePrintHeader
+      (\ s a -> s{_jcePrintHeader = a})
+
+-- | [Optional] The compression type to use for exported files. Possible
+-- values include GZIP, DEFLATE, SNAPPY, and NONE. The default value is
+-- NONE. DEFLATE and SNAPPY are only supported for Avro.
+jceCompression :: Lens' JobConfigurationExtract (Maybe Text)
+jceCompression
+  = lens _jceCompression
+      (\ s a -> s{_jceCompression = a})
+
+-- | [Pick one] A list of fully-qualified Google Cloud Storage URIs where the
+-- extracted table should be written.
+jceDestinationURIs :: Lens' JobConfigurationExtract [Text]
+jceDestinationURIs
+  = lens _jceDestinationURIs
+      (\ s a -> s{_jceDestinationURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Pick one] DEPRECATED: Use destinationUris instead, passing only one URI
+-- as necessary. The fully-qualified Google Cloud Storage URI where the
+-- extracted table should be written.
+jceDestinationURI :: Lens' JobConfigurationExtract (Maybe Text)
+jceDestinationURI
+  = lens _jceDestinationURI
+      (\ s a -> s{_jceDestinationURI = a})
+
+-- | [Optional] Delimiter to use between fields in the exported data. Default
+-- is \',\'
+jceFieldDelimiter :: Lens' JobConfigurationExtract (Maybe Text)
+jceFieldDelimiter
+  = lens _jceFieldDelimiter
+      (\ s a -> s{_jceFieldDelimiter = a})
+
+instance FromJSON JobConfigurationExtract where
+        parseJSON
+          = withObject "JobConfigurationExtract"
+              (\ o ->
+                 JobConfigurationExtract' <$>
+                   (o .:? "destinationFormat") <*> (o .:? "sourceTable")
+                     <*> (o .:? "printHeader" .!= True)
+                     <*> (o .:? "compression")
+                     <*> (o .:? "destinationUris" .!= mempty)
+                     <*> (o .:? "destinationUri")
+                     <*> (o .:? "fieldDelimiter"))
+
+instance ToJSON JobConfigurationExtract where
+        toJSON JobConfigurationExtract'{..}
+          = object
+              (catMaybes
+                 [("destinationFormat" .=) <$> _jceDestinationFormat,
+                  ("sourceTable" .=) <$> _jceSourceTable,
+                  Just ("printHeader" .= _jcePrintHeader),
+                  ("compression" .=) <$> _jceCompression,
+                  ("destinationUris" .=) <$> _jceDestinationURIs,
+                  ("destinationUri" .=) <$> _jceDestinationURI,
+                  ("fieldDelimiter" .=) <$> _jceFieldDelimiter])
+
+--
+-- /See:/ 'modelDefinition' smart constructor.
+data ModelDefinition = ModelDefinition'
+    { _mdModelOptions :: !(Maybe ModelDefinitionModelOptions)
+    , _mdTrainingRuns :: !(Maybe [TrainingRun])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModelDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdModelOptions'
+--
+-- * 'mdTrainingRuns'
+modelDefinition
+    :: ModelDefinition
+modelDefinition =
+    ModelDefinition'
+    { _mdModelOptions = Nothing
+    , _mdTrainingRuns = Nothing
+    }
+
+-- | [Output-only, Beta] Model options used for the first training run. These
+-- options are immutable for subsequent training runs. Default values are
+-- used for any options not specified in the input query.
+mdModelOptions :: Lens' ModelDefinition (Maybe ModelDefinitionModelOptions)
+mdModelOptions
+  = lens _mdModelOptions
+      (\ s a -> s{_mdModelOptions = a})
+
+-- | [Output-only, Beta] Information about ml training runs, each training
+-- run comprises of multiple iterations and there may be multiple training
+-- runs for the model if warm start is used or if a user decides to
+-- continue a previously cancelled query.
+mdTrainingRuns :: Lens' ModelDefinition [TrainingRun]
+mdTrainingRuns
+  = lens _mdTrainingRuns
+      (\ s a -> s{_mdTrainingRuns = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ModelDefinition where
+        parseJSON
+          = withObject "ModelDefinition"
+              (\ o ->
+                 ModelDefinition' <$>
+                   (o .:? "modelOptions") <*>
+                     (o .:? "trainingRuns" .!= mempty))
+
+instance ToJSON ModelDefinition where
+        toJSON ModelDefinition'{..}
+          = object
+              (catMaybes
+                 [("modelOptions" .=) <$> _mdModelOptions,
+                  ("trainingRuns" .=) <$> _mdTrainingRuns])
+
+--
+-- /See:/ 'jobCancelResponse' smart constructor.
+data JobCancelResponse = JobCancelResponse'
+    { _jcrKind :: !Text
+    , _jcrJob  :: !(Maybe Job)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobCancelResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jcrKind'
+--
+-- * 'jcrJob'
+jobCancelResponse
+    :: JobCancelResponse
+jobCancelResponse =
+    JobCancelResponse'
+    { _jcrKind = "bigquery#jobCancelResponse"
+    , _jcrJob = Nothing
+    }
+
+-- | The resource type of the response.
+jcrKind :: Lens' JobCancelResponse Text
+jcrKind = lens _jcrKind (\ s a -> s{_jcrKind = a})
+
+-- | The final state of the job.
+jcrJob :: Lens' JobCancelResponse (Maybe Job)
+jcrJob = lens _jcrJob (\ s a -> s{_jcrJob = a})
+
+instance FromJSON JobCancelResponse where
+        parseJSON
+          = withObject "JobCancelResponse"
+              (\ o ->
+                 JobCancelResponse' <$>
+                   (o .:? "kind" .!= "bigquery#jobCancelResponse") <*>
+                     (o .:? "job"))
+
+instance ToJSON JobCancelResponse where
+        toJSON JobCancelResponse'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _jcrKind), ("job" .=) <$> _jcrJob])
+
+-- | Represents a single JSON object.
+--
+-- /See:/ 'jsonObject' smart constructor.
+newtype JSONObject = JSONObject'
+    { _joAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JSONObject' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'joAddtional'
+jsonObject
+    :: HashMap Text JSONValue -- ^ 'joAddtional'
+    -> JSONObject
+jsonObject pJoAddtional_ =
+    JSONObject'
+    { _joAddtional = _Coerce # pJoAddtional_
+    }
+
+joAddtional :: Lens' JSONObject (HashMap Text JSONValue)
+joAddtional
+  = lens _joAddtional (\ s a -> s{_joAddtional = a}) .
+      _Coerce
+
+instance FromJSON JSONObject where
+        parseJSON
+          = withObject "JSONObject"
+              (\ o -> JSONObject' <$> (parseJSONObject o))
+
+instance ToJSON JSONObject where
+        toJSON = toJSON . _joAddtional
+
+--
+-- /See:/ 'jobConfigurationQuery' smart constructor.
+data JobConfigurationQuery = JobConfigurationQuery'
+    { _jcqDestinationTable                   :: !(Maybe TableReference)
+    , _jcqWriteDisPosition                   :: !(Maybe Text)
+    , _jcqPriority                           :: !(Maybe Text)
+    , _jcqClustering                         :: !(Maybe Clustering)
+    , _jcqRangePartitioning                  :: !(Maybe RangePartitioning)
+    , _jcqUseQueryCache                      :: !Bool
+    , _jcqPreserveNulls                      :: !(Maybe Bool)
+    , _jcqTableDefinitions                   :: !(Maybe JobConfigurationQueryTableDefinitions)
+    , _jcqQueryParameters                    :: !(Maybe [QueryParameter])
+    , _jcqSchemaUpdateOptions                :: !(Maybe [Text])
+    , _jcqMaximumBytesBilled                 :: !(Maybe (Textual Int64))
+    , _jcqCreateDisPosition                  :: !(Maybe Text)
+    , _jcqUserDefinedFunctionResources       :: !(Maybe [UserDefinedFunctionResource])
+    , _jcqAllowLargeResults                  :: !Bool
+    , _jcqMaximumBillingTier                 :: !(Textual Int32)
+    , _jcqTimePartitioning                   :: !(Maybe TimePartitioning)
+    , _jcqQuery                              :: !(Maybe Text)
+    , _jcqFlattenResults                     :: !Bool
+    , _jcqParameterMode                      :: !(Maybe Text)
+    , _jcqUseLegacySQL                       :: !Bool
+    , _jcqDestinationEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
+    , _jcqDefaultDataSet                     :: !(Maybe DataSetReference)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jcqDestinationTable'
+--
+-- * 'jcqWriteDisPosition'
+--
+-- * 'jcqPriority'
+--
+-- * 'jcqClustering'
+--
+-- * 'jcqRangePartitioning'
+--
+-- * 'jcqUseQueryCache'
+--
+-- * 'jcqPreserveNulls'
+--
+-- * 'jcqTableDefinitions'
+--
+-- * 'jcqQueryParameters'
+--
+-- * 'jcqSchemaUpdateOptions'
+--
+-- * 'jcqMaximumBytesBilled'
+--
+-- * 'jcqCreateDisPosition'
+--
+-- * 'jcqUserDefinedFunctionResources'
+--
+-- * 'jcqAllowLargeResults'
+--
+-- * 'jcqMaximumBillingTier'
+--
+-- * 'jcqTimePartitioning'
+--
+-- * 'jcqQuery'
+--
+-- * 'jcqFlattenResults'
+--
+-- * 'jcqParameterMode'
+--
+-- * 'jcqUseLegacySQL'
+--
+-- * 'jcqDestinationEncryptionConfiguration'
+--
+-- * 'jcqDefaultDataSet'
+jobConfigurationQuery
+    :: JobConfigurationQuery
+jobConfigurationQuery =
+    JobConfigurationQuery'
+    { _jcqDestinationTable = Nothing
+    , _jcqWriteDisPosition = Nothing
+    , _jcqPriority = Nothing
+    , _jcqClustering = Nothing
+    , _jcqRangePartitioning = Nothing
+    , _jcqUseQueryCache = True
+    , _jcqPreserveNulls = Nothing
+    , _jcqTableDefinitions = Nothing
+    , _jcqQueryParameters = Nothing
+    , _jcqSchemaUpdateOptions = Nothing
+    , _jcqMaximumBytesBilled = Nothing
+    , _jcqCreateDisPosition = Nothing
+    , _jcqUserDefinedFunctionResources = Nothing
+    , _jcqAllowLargeResults = False
+    , _jcqMaximumBillingTier = 1
+    , _jcqTimePartitioning = Nothing
+    , _jcqQuery = Nothing
+    , _jcqFlattenResults = True
+    , _jcqParameterMode = Nothing
+    , _jcqUseLegacySQL = True
+    , _jcqDestinationEncryptionConfiguration = Nothing
+    , _jcqDefaultDataSet = Nothing
+    }
+
+-- | [Optional] Describes the table where the query results should be stored.
+-- If not present, a new table will be created to store the results. This
+-- property must be set for large results that exceed the maximum response
+-- size.
+jcqDestinationTable :: Lens' JobConfigurationQuery (Maybe TableReference)
+jcqDestinationTable
+  = lens _jcqDestinationTable
+      (\ s a -> s{_jcqDestinationTable = a})
+
+-- | [Optional] Specifies the action that occurs if the destination table
+-- already exists. The following values are supported: WRITE_TRUNCATE: If
+-- the table already exists, BigQuery overwrites the table data and uses
+-- the schema from the query result. WRITE_APPEND: If the table already
+-- exists, BigQuery appends the data to the table. WRITE_EMPTY: If the
+-- table already exists and contains data, a \'duplicate\' error is
+-- returned in the job result. The default value is WRITE_EMPTY. Each
+-- action is atomic and only occurs if BigQuery is able to complete the job
+-- successfully. Creation, truncation and append actions occur as one
+-- atomic update upon job completion.
+jcqWriteDisPosition :: Lens' JobConfigurationQuery (Maybe Text)
+jcqWriteDisPosition
+  = lens _jcqWriteDisPosition
+      (\ s a -> s{_jcqWriteDisPosition = a})
+
+-- | [Optional] Specifies a priority for the query. Possible values include
+-- INTERACTIVE and BATCH. The default value is INTERACTIVE.
+jcqPriority :: Lens' JobConfigurationQuery (Maybe Text)
+jcqPriority
+  = lens _jcqPriority (\ s a -> s{_jcqPriority = a})
+
+-- | [Beta] Clustering specification for the destination table. Must be
+-- specified with time-based partitioning, data in the table will be first
+-- partitioned and subsequently clustered.
+jcqClustering :: Lens' JobConfigurationQuery (Maybe Clustering)
+jcqClustering
+  = lens _jcqClustering
+      (\ s a -> s{_jcqClustering = a})
+
+-- | [TrustedTester] Range partitioning specification for this table. Only
+-- one of timePartitioning and rangePartitioning should be specified.
+jcqRangePartitioning :: Lens' JobConfigurationQuery (Maybe RangePartitioning)
+jcqRangePartitioning
+  = lens _jcqRangePartitioning
+      (\ s a -> s{_jcqRangePartitioning = a})
+
+-- | [Optional] Whether to look for the result in the query cache. The query
+-- cache is a best-effort cache that will be flushed whenever tables in the
+-- query are modified. Moreover, the query cache is only available when a
+-- query does not have a destination table specified. The default value is
+-- true.
+jcqUseQueryCache :: Lens' JobConfigurationQuery Bool
+jcqUseQueryCache
+  = lens _jcqUseQueryCache
+      (\ s a -> s{_jcqUseQueryCache = a})
+
+-- | [Deprecated] This property is deprecated.
+jcqPreserveNulls :: Lens' JobConfigurationQuery (Maybe Bool)
+jcqPreserveNulls
+  = lens _jcqPreserveNulls
+      (\ s a -> s{_jcqPreserveNulls = a})
+
+-- | [Optional] If querying an external data source outside of BigQuery,
+-- describes the data format, location and other properties of the data
+-- source. By defining these properties, the data source can then be
+-- queried as if it were a standard BigQuery table.
+jcqTableDefinitions :: Lens' JobConfigurationQuery (Maybe JobConfigurationQueryTableDefinitions)
+jcqTableDefinitions
+  = lens _jcqTableDefinitions
+      (\ s a -> s{_jcqTableDefinitions = a})
+
+-- | Query parameters for standard SQL queries.
+jcqQueryParameters :: Lens' JobConfigurationQuery [QueryParameter]
+jcqQueryParameters
+  = lens _jcqQueryParameters
+      (\ s a -> s{_jcqQueryParameters = a})
+      . _Default
+      . _Coerce
+
+-- | Allows the schema of the destination table to be updated as a side
+-- effect of the query job. Schema update options are supported in two
+-- cases: when writeDisposition is WRITE_APPEND; when writeDisposition is
+-- WRITE_TRUNCATE and the destination table is a partition of a table,
+-- specified by partition decorators. For normal tables, WRITE_TRUNCATE
+-- will always overwrite the schema. One or more of the following values
+-- are specified: ALLOW_FIELD_ADDITION: allow adding a nullable field to
+-- the schema. ALLOW_FIELD_RELAXATION: allow relaxing a required field in
+-- the original schema to nullable.
+jcqSchemaUpdateOptions :: Lens' JobConfigurationQuery [Text]
+jcqSchemaUpdateOptions
+  = lens _jcqSchemaUpdateOptions
+      (\ s a -> s{_jcqSchemaUpdateOptions = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] Limits the bytes billed for this job. Queries that will have
+-- bytes billed beyond this limit will fail (without incurring a charge).
+-- If unspecified, this will be set to your project default.
+jcqMaximumBytesBilled :: Lens' JobConfigurationQuery (Maybe Int64)
+jcqMaximumBytesBilled
+  = lens _jcqMaximumBytesBilled
+      (\ s a -> s{_jcqMaximumBytesBilled = a})
+      . mapping _Coerce
+
+-- | [Optional] Specifies whether the job is allowed to create new tables.
+-- The following values are supported: CREATE_IF_NEEDED: If the table does
+-- not exist, BigQuery creates the table. CREATE_NEVER: The table must
+-- already exist. If it does not, a \'notFound\' error is returned in the
+-- job result. The default value is CREATE_IF_NEEDED. Creation, truncation
+-- and append actions occur as one atomic update upon job completion.
+jcqCreateDisPosition :: Lens' JobConfigurationQuery (Maybe Text)
+jcqCreateDisPosition
+  = lens _jcqCreateDisPosition
+      (\ s a -> s{_jcqCreateDisPosition = a})
+
+-- | Describes user-defined function resources used in the query.
+jcqUserDefinedFunctionResources :: Lens' JobConfigurationQuery [UserDefinedFunctionResource]
+jcqUserDefinedFunctionResources
+  = lens _jcqUserDefinedFunctionResources
+      (\ s a -> s{_jcqUserDefinedFunctionResources = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] If true and query uses legacy SQL dialect, allows the query
+-- to produce arbitrarily large result tables at a slight cost in
+-- performance. Requires destinationTable to be set. For standard SQL
+-- queries, this flag is ignored and large results are always allowed.
+-- However, you must still set destinationTable when result size exceeds
+-- the allowed maximum response size.
+jcqAllowLargeResults :: Lens' JobConfigurationQuery Bool
+jcqAllowLargeResults
+  = lens _jcqAllowLargeResults
+      (\ s a -> s{_jcqAllowLargeResults = a})
+
+-- | [Optional] Limits the billing tier for this job. Queries that have
+-- resource usage beyond this tier will fail (without incurring a charge).
+-- If unspecified, this will be set to your project default.
+jcqMaximumBillingTier :: Lens' JobConfigurationQuery Int32
+jcqMaximumBillingTier
+  = lens _jcqMaximumBillingTier
+      (\ s a -> s{_jcqMaximumBillingTier = a})
+      . _Coerce
+
+-- | Time-based partitioning specification for the destination table. Only
+-- one of timePartitioning and rangePartitioning should be specified.
+jcqTimePartitioning :: Lens' JobConfigurationQuery (Maybe TimePartitioning)
+jcqTimePartitioning
+  = lens _jcqTimePartitioning
+      (\ s a -> s{_jcqTimePartitioning = a})
+
+-- | [Required] SQL query text to execute. The useLegacySql field can be used
+-- to indicate whether the query uses legacy SQL or standard SQL.
+jcqQuery :: Lens' JobConfigurationQuery (Maybe Text)
+jcqQuery = lens _jcqQuery (\ s a -> s{_jcqQuery = a})
+
+-- | [Optional] If true and query uses legacy SQL dialect, flattens all
+-- nested and repeated fields in the query results. allowLargeResults must
+-- be true if this is set to false. For standard SQL queries, this flag is
+-- ignored and results are never flattened.
+jcqFlattenResults :: Lens' JobConfigurationQuery Bool
+jcqFlattenResults
+  = lens _jcqFlattenResults
+      (\ s a -> s{_jcqFlattenResults = a})
+
+-- | Standard SQL only. Set to POSITIONAL to use positional (?) query
+-- parameters or to NAMED to use named (\'myparam) query parameters in this
+-- query.
+jcqParameterMode :: Lens' JobConfigurationQuery (Maybe Text)
+jcqParameterMode
+  = lens _jcqParameterMode
+      (\ s a -> s{_jcqParameterMode = a})
+
+-- | Specifies whether to use BigQuery\'s legacy SQL dialect for this query.
+-- The default value is true. If set to false, the query will use
+-- BigQuery\'s standard SQL:
+-- https:\/\/cloud.google.com\/bigquery\/sql-reference\/ When useLegacySql
+-- is set to false, the value of flattenResults is ignored; query will be
+-- run as if flattenResults is false.
+jcqUseLegacySQL :: Lens' JobConfigurationQuery Bool
+jcqUseLegacySQL
+  = lens _jcqUseLegacySQL
+      (\ s a -> s{_jcqUseLegacySQL = a})
+
+-- | Custom encryption configuration (e.g., Cloud KMS keys).
+jcqDestinationEncryptionConfiguration :: Lens' JobConfigurationQuery (Maybe EncryptionConfiguration)
+jcqDestinationEncryptionConfiguration
+  = lens _jcqDestinationEncryptionConfiguration
+      (\ s a ->
+         s{_jcqDestinationEncryptionConfiguration = a})
+
+-- | [Optional] Specifies the default dataset to use for unqualified table
+-- names in the query. Note that this does not alter behavior of
+-- unqualified dataset names.
+jcqDefaultDataSet :: Lens' JobConfigurationQuery (Maybe DataSetReference)
+jcqDefaultDataSet
+  = lens _jcqDefaultDataSet
+      (\ s a -> s{_jcqDefaultDataSet = a})
+
+instance FromJSON JobConfigurationQuery where
+        parseJSON
+          = withObject "JobConfigurationQuery"
+              (\ o ->
+                 JobConfigurationQuery' <$>
+                   (o .:? "destinationTable") <*>
+                     (o .:? "writeDisposition")
+                     <*> (o .:? "priority")
+                     <*> (o .:? "clustering")
+                     <*> (o .:? "rangePartitioning")
+                     <*> (o .:? "useQueryCache" .!= True)
+                     <*> (o .:? "preserveNulls")
+                     <*> (o .:? "tableDefinitions")
+                     <*> (o .:? "queryParameters" .!= mempty)
+                     <*> (o .:? "schemaUpdateOptions" .!= mempty)
+                     <*> (o .:? "maximumBytesBilled")
+                     <*> (o .:? "createDisposition")
+                     <*> (o .:? "userDefinedFunctionResources" .!= mempty)
+                     <*> (o .:? "allowLargeResults" .!= False)
+                     <*> (o .:? "maximumBillingTier" .!= 1)
+                     <*> (o .:? "timePartitioning")
+                     <*> (o .:? "query")
+                     <*> (o .:? "flattenResults" .!= True)
+                     <*> (o .:? "parameterMode")
+                     <*> (o .:? "useLegacySql" .!= True)
+                     <*> (o .:? "destinationEncryptionConfiguration")
+                     <*> (o .:? "defaultDataset"))
+
+instance ToJSON JobConfigurationQuery where
+        toJSON JobConfigurationQuery'{..}
+          = object
+              (catMaybes
+                 [("destinationTable" .=) <$> _jcqDestinationTable,
+                  ("writeDisposition" .=) <$> _jcqWriteDisPosition,
+                  ("priority" .=) <$> _jcqPriority,
+                  ("clustering" .=) <$> _jcqClustering,
+                  ("rangePartitioning" .=) <$> _jcqRangePartitioning,
+                  Just ("useQueryCache" .= _jcqUseQueryCache),
+                  ("preserveNulls" .=) <$> _jcqPreserveNulls,
+                  ("tableDefinitions" .=) <$> _jcqTableDefinitions,
+                  ("queryParameters" .=) <$> _jcqQueryParameters,
+                  ("schemaUpdateOptions" .=) <$>
+                    _jcqSchemaUpdateOptions,
+                  ("maximumBytesBilled" .=) <$> _jcqMaximumBytesBilled,
+                  ("createDisposition" .=) <$> _jcqCreateDisPosition,
+                  ("userDefinedFunctionResources" .=) <$>
+                    _jcqUserDefinedFunctionResources,
+                  Just ("allowLargeResults" .= _jcqAllowLargeResults),
+                  Just
+                    ("maximumBillingTier" .= _jcqMaximumBillingTier),
+                  ("timePartitioning" .=) <$> _jcqTimePartitioning,
+                  ("query" .=) <$> _jcqQuery,
+                  Just ("flattenResults" .= _jcqFlattenResults),
+                  ("parameterMode" .=) <$> _jcqParameterMode,
+                  Just ("useLegacySql" .= _jcqUseLegacySQL),
+                  ("destinationEncryptionConfiguration" .=) <$>
+                    _jcqDestinationEncryptionConfiguration,
+                  ("defaultDataset" .=) <$> _jcqDefaultDataSet])
+
+--
+-- /See:/ 'googleSheetsOptions' smart constructor.
+data GoogleSheetsOptions = GoogleSheetsOptions'
+    { _gsoSkipLeadingRows :: !(Maybe (Textual Int64))
+    , _gsoRange           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleSheetsOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsoSkipLeadingRows'
+--
+-- * 'gsoRange'
+googleSheetsOptions
+    :: GoogleSheetsOptions
+googleSheetsOptions =
+    GoogleSheetsOptions'
+    { _gsoSkipLeadingRows = Nothing
+    , _gsoRange = Nothing
+    }
+
+-- | [Optional] The number of rows at the top of a sheet that BigQuery will
+-- skip when reading the data. The default value is 0. This property is
+-- useful if you have header rows that should be skipped. When autodetect
+-- is on, behavior is the following: * skipLeadingRows unspecified -
+-- Autodetect tries to detect headers in the first row. If they are not
+-- detected, the row is read as data. Otherwise data is read starting from
+-- the second row. * skipLeadingRows is 0 - Instructs autodetect that there
+-- are no headers and data should be read starting from the first row. *
+-- skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect
+-- headers in row N. If headers are not detected, row N is just skipped.
+-- Otherwise row N is used to extract column names for the detected schema.
+gsoSkipLeadingRows :: Lens' GoogleSheetsOptions (Maybe Int64)
+gsoSkipLeadingRows
+  = lens _gsoSkipLeadingRows
+      (\ s a -> s{_gsoSkipLeadingRows = a})
+      . mapping _Coerce
+
+-- | [Beta] [Optional] Range of a sheet to query from. Only used when
+-- non-empty. Typical format:
+-- sheet_name!top_left_cell_id:bottom_right_cell_id For example:
+-- sheet1!A1:B20
+gsoRange :: Lens' GoogleSheetsOptions (Maybe Text)
+gsoRange = lens _gsoRange (\ s a -> s{_gsoRange = a})
+
+instance FromJSON GoogleSheetsOptions where
+        parseJSON
+          = withObject "GoogleSheetsOptions"
+              (\ o ->
+                 GoogleSheetsOptions' <$>
+                   (o .:? "skipLeadingRows") <*> (o .:? "range"))
+
+instance ToJSON GoogleSheetsOptions where
+        toJSON GoogleSheetsOptions'{..}
+          = object
+              (catMaybes
+                 [("skipLeadingRows" .=) <$> _gsoSkipLeadingRows,
+                  ("range" .=) <$> _gsoRange])
+
+--
+-- /See:/ 'tableDataInsertAllRequestRowsItem' smart constructor.
+data TableDataInsertAllRequestRowsItem = TableDataInsertAllRequestRowsItem'
+    { _tdiarriJSON     :: !(Maybe JSONObject)
+    , _tdiarriInsertId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableDataInsertAllRequestRowsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdiarriJSON'
+--
+-- * 'tdiarriInsertId'
+tableDataInsertAllRequestRowsItem
+    :: TableDataInsertAllRequestRowsItem
+tableDataInsertAllRequestRowsItem =
+    TableDataInsertAllRequestRowsItem'
+    { _tdiarriJSON = Nothing
+    , _tdiarriInsertId = Nothing
+    }
+
+-- | [Required] A JSON object that contains a row of data. The object\'s
+-- properties and values must match the destination table\'s schema.
+tdiarriJSON :: Lens' TableDataInsertAllRequestRowsItem (Maybe JSONObject)
+tdiarriJSON
+  = lens _tdiarriJSON (\ s a -> s{_tdiarriJSON = a})
+
+-- | [Optional] A unique ID for each row. BigQuery uses this property to
+-- detect duplicate insertion requests on a best-effort basis.
+tdiarriInsertId :: Lens' TableDataInsertAllRequestRowsItem (Maybe Text)
+tdiarriInsertId
+  = lens _tdiarriInsertId
+      (\ s a -> s{_tdiarriInsertId = a})
+
+instance FromJSON TableDataInsertAllRequestRowsItem
+         where
+        parseJSON
+          = withObject "TableDataInsertAllRequestRowsItem"
+              (\ o ->
+                 TableDataInsertAllRequestRowsItem' <$>
+                   (o .:? "json") <*> (o .:? "insertId"))
+
+instance ToJSON TableDataInsertAllRequestRowsItem
+         where
+        toJSON TableDataInsertAllRequestRowsItem'{..}
+          = object
+              (catMaybes
+                 [("json" .=) <$> _tdiarriJSON,
+                  ("insertId" .=) <$> _tdiarriInsertId])
+
+--
+-- /See:/ 'jobList' smart constructor.
+data JobList = JobList'
+    { _jlEtag          :: !(Maybe Text)
+    , _jlNextPageToken :: !(Maybe Text)
+    , _jlKind          :: !Text
+    , _jlJobs          :: !(Maybe [JobListJobsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jlEtag'
+--
+-- * 'jlNextPageToken'
+--
+-- * 'jlKind'
+--
+-- * 'jlJobs'
+jobList
+    :: JobList
+jobList =
+    JobList'
+    { _jlEtag = Nothing
+    , _jlNextPageToken = Nothing
+    , _jlKind = "bigquery#jobList"
+    , _jlJobs = Nothing
+    }
+
+-- | A hash of this page of results.
+jlEtag :: Lens' JobList (Maybe Text)
+jlEtag = lens _jlEtag (\ s a -> s{_jlEtag = a})
+
+-- | A token to request the next page of results.
+jlNextPageToken :: Lens' JobList (Maybe Text)
+jlNextPageToken
+  = lens _jlNextPageToken
+      (\ s a -> s{_jlNextPageToken = a})
+
+-- | The resource type of the response.
+jlKind :: Lens' JobList Text
+jlKind = lens _jlKind (\ s a -> s{_jlKind = a})
+
+-- | List of jobs that were requested.
+jlJobs :: Lens' JobList [JobListJobsItem]
+jlJobs
+  = lens _jlJobs (\ s a -> s{_jlJobs = a}) . _Default .
+      _Coerce
+
+instance FromJSON JobList where
+        parseJSON
+          = withObject "JobList"
+              (\ o ->
+                 JobList' <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "bigquery#jobList")
+                     <*> (o .:? "jobs" .!= mempty))
+
+instance ToJSON JobList where
+        toJSON JobList'{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _jlEtag,
+                  ("nextPageToken" .=) <$> _jlNextPageToken,
+                  Just ("kind" .= _jlKind), ("jobs" .=) <$> _jlJobs])
+
+-- | [Optional] If querying an external data source outside of BigQuery,
+-- describes the data format, location and other properties of the data
+-- source. By defining these properties, the data source can then be
+-- queried as if it were a standard BigQuery table.
+--
+-- /See:/ 'jobConfigurationQueryTableDefinitions' smart constructor.
+newtype JobConfigurationQueryTableDefinitions = JobConfigurationQueryTableDefinitions'
+    { _jcqtdAddtional :: HashMap Text ExternalDataConfiguration
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationQueryTableDefinitions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jcqtdAddtional'
+jobConfigurationQueryTableDefinitions
+    :: HashMap Text ExternalDataConfiguration -- ^ 'jcqtdAddtional'
+    -> JobConfigurationQueryTableDefinitions
+jobConfigurationQueryTableDefinitions pJcqtdAddtional_ =
+    JobConfigurationQueryTableDefinitions'
+    { _jcqtdAddtional = _Coerce # pJcqtdAddtional_
+    }
+
+jcqtdAddtional :: Lens' JobConfigurationQueryTableDefinitions (HashMap Text ExternalDataConfiguration)
+jcqtdAddtional
+  = lens _jcqtdAddtional
+      (\ s a -> s{_jcqtdAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         JobConfigurationQueryTableDefinitions where
+        parseJSON
+          = withObject "JobConfigurationQueryTableDefinitions"
+              (\ o ->
+                 JobConfigurationQueryTableDefinitions' <$>
+                   (parseJSONObject o))
+
+instance ToJSON JobConfigurationQueryTableDefinitions
+         where
+        toJSON = toJSON . _jcqtdAddtional
+
+--
+-- /See:/ 'tableCell' smart constructor.
+newtype TableCell = TableCell'
+    { _tcV :: Maybe JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableCell' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcV'
+tableCell
+    :: TableCell
+tableCell =
+    TableCell'
+    { _tcV = Nothing
+    }
+
+tcV :: Lens' TableCell (Maybe JSONValue)
+tcV = lens _tcV (\ s a -> s{_tcV = a})
+
+instance FromJSON TableCell where
+        parseJSON
+          = withObject "TableCell"
+              (\ o -> TableCell' <$> (o .:? "v"))
+
+instance ToJSON TableCell where
+        toJSON TableCell'{..}
+          = object (catMaybes [("v" .=) <$> _tcV])
+
+--
+-- /See:/ 'jobStatistics2ReservationUsageItem' smart constructor.
+data JobStatistics2ReservationUsageItem = JobStatistics2ReservationUsageItem'
+    { _jName   :: !(Maybe Text)
+    , _jSlotMs :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatistics2ReservationUsageItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jName'
+--
+-- * 'jSlotMs'
+jobStatistics2ReservationUsageItem
+    :: JobStatistics2ReservationUsageItem
+jobStatistics2ReservationUsageItem =
+    JobStatistics2ReservationUsageItem'
+    { _jName = Nothing
+    , _jSlotMs = Nothing
+    }
+
+-- | [Output-only] Reservation name or \"unreserved\" for on-demand resources
+-- usage.
+jName :: Lens' JobStatistics2ReservationUsageItem (Maybe Text)
+jName = lens _jName (\ s a -> s{_jName = a})
+
+-- | [Output-only] Slot-milliseconds the job spent in the given reservation.
+jSlotMs :: Lens' JobStatistics2ReservationUsageItem (Maybe Int64)
+jSlotMs
+  = lens _jSlotMs (\ s a -> s{_jSlotMs = a}) .
+      mapping _Coerce
+
+instance FromJSON JobStatistics2ReservationUsageItem
+         where
+        parseJSON
+          = withObject "JobStatistics2ReservationUsageItem"
+              (\ o ->
+                 JobStatistics2ReservationUsageItem' <$>
+                   (o .:? "name") <*> (o .:? "slotMs"))
+
+instance ToJSON JobStatistics2ReservationUsageItem
+         where
+        toJSON JobStatistics2ReservationUsageItem'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _jName, ("slotMs" .=) <$> _jSlotMs])
+
+--
+-- /See:/ 'queryParameterValue' smart constructor.
+data QueryParameterValue = QueryParameterValue'
+    { _qpvStructValues :: !(Maybe QueryParameterValueStructValues)
+    , _qpvValue        :: !(Maybe Text)
+    , _qpvArrayValues  :: !(Maybe [QueryParameterValue])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryParameterValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qpvStructValues'
+--
+-- * 'qpvValue'
+--
+-- * 'qpvArrayValues'
+queryParameterValue
+    :: QueryParameterValue
+queryParameterValue =
+    QueryParameterValue'
+    { _qpvStructValues = Nothing
+    , _qpvValue = Nothing
+    , _qpvArrayValues = Nothing
+    }
+
+-- | [Optional] The struct field values, in order of the struct type\'s
+-- declaration.
+qpvStructValues :: Lens' QueryParameterValue (Maybe QueryParameterValueStructValues)
+qpvStructValues
+  = lens _qpvStructValues
+      (\ s a -> s{_qpvStructValues = a})
+
+-- | [Optional] The value of this value, if a simple scalar type.
+qpvValue :: Lens' QueryParameterValue (Maybe Text)
+qpvValue = lens _qpvValue (\ s a -> s{_qpvValue = a})
+
+-- | [Optional] The array values, if this is an array type.
+qpvArrayValues :: Lens' QueryParameterValue [QueryParameterValue]
+qpvArrayValues
+  = lens _qpvArrayValues
+      (\ s a -> s{_qpvArrayValues = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON QueryParameterValue where
+        parseJSON
+          = withObject "QueryParameterValue"
+              (\ o ->
+                 QueryParameterValue' <$>
+                   (o .:? "structValues") <*> (o .:? "value") <*>
+                     (o .:? "arrayValues" .!= mempty))
+
+instance ToJSON QueryParameterValue where
+        toJSON QueryParameterValue'{..}
+          = object
+              (catMaybes
+                 [("structValues" .=) <$> _qpvStructValues,
+                  ("value" .=) <$> _qpvValue,
+                  ("arrayValues" .=) <$> _qpvArrayValues])
+
+--
+-- /See:/ 'viewDefinition' smart constructor.
+data ViewDefinition = ViewDefinition'
+    { _vdUserDefinedFunctionResources :: !(Maybe [UserDefinedFunctionResource])
+    , _vdQuery                        :: !(Maybe Text)
+    , _vdUseLegacySQL                 :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ViewDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vdUserDefinedFunctionResources'
+--
+-- * 'vdQuery'
+--
+-- * 'vdUseLegacySQL'
+viewDefinition
+    :: ViewDefinition
+viewDefinition =
+    ViewDefinition'
+    { _vdUserDefinedFunctionResources = Nothing
+    , _vdQuery = Nothing
+    , _vdUseLegacySQL = Nothing
+    }
+
+-- | Describes user-defined function resources used in the query.
+vdUserDefinedFunctionResources :: Lens' ViewDefinition [UserDefinedFunctionResource]
+vdUserDefinedFunctionResources
+  = lens _vdUserDefinedFunctionResources
+      (\ s a -> s{_vdUserDefinedFunctionResources = a})
+      . _Default
+      . _Coerce
+
+-- | [Required] A query that BigQuery executes when the view is referenced.
+vdQuery :: Lens' ViewDefinition (Maybe Text)
+vdQuery = lens _vdQuery (\ s a -> s{_vdQuery = a})
+
+-- | Specifies whether to use BigQuery\'s legacy SQL for this view. The
+-- default value is true. If set to false, the view will use BigQuery\'s
+-- standard SQL: https:\/\/cloud.google.com\/bigquery\/sql-reference\/
+-- Queries and views that reference this view must use the same flag value.
+vdUseLegacySQL :: Lens' ViewDefinition (Maybe Bool)
+vdUseLegacySQL
+  = lens _vdUseLegacySQL
+      (\ s a -> s{_vdUseLegacySQL = a})
+
+instance FromJSON ViewDefinition where
+        parseJSON
+          = withObject "ViewDefinition"
+              (\ o ->
+                 ViewDefinition' <$>
+                   (o .:? "userDefinedFunctionResources" .!= mempty) <*>
+                     (o .:? "query")
+                     <*> (o .:? "useLegacySql"))
+
+instance ToJSON ViewDefinition where
+        toJSON ViewDefinition'{..}
+          = object
+              (catMaybes
+                 [("userDefinedFunctionResources" .=) <$>
+                    _vdUserDefinedFunctionResources,
+                  ("query" .=) <$> _vdQuery,
+                  ("useLegacySql" .=) <$> _vdUseLegacySQL])
+
+--
+-- /See:/ 'userDefinedFunctionResource' smart constructor.
+data UserDefinedFunctionResource = UserDefinedFunctionResource'
+    { _udfrResourceURI :: !(Maybe Text)
+    , _udfrInlineCode  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserDefinedFunctionResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udfrResourceURI'
+--
+-- * 'udfrInlineCode'
+userDefinedFunctionResource
+    :: UserDefinedFunctionResource
+userDefinedFunctionResource =
+    UserDefinedFunctionResource'
+    { _udfrResourceURI = Nothing
+    , _udfrInlineCode = Nothing
+    }
+
+-- | [Pick one] A code resource to load from a Google Cloud Storage URI
+-- (gs:\/\/bucket\/path).
+udfrResourceURI :: Lens' UserDefinedFunctionResource (Maybe Text)
+udfrResourceURI
+  = lens _udfrResourceURI
+      (\ s a -> s{_udfrResourceURI = a})
+
+-- | [Pick one] An inline resource that contains code for a user-defined
+-- function (UDF). Providing a inline code resource is equivalent to
+-- providing a URI for a file containing the same code.
+udfrInlineCode :: Lens' UserDefinedFunctionResource (Maybe Text)
+udfrInlineCode
+  = lens _udfrInlineCode
+      (\ s a -> s{_udfrInlineCode = a})
+
+instance FromJSON UserDefinedFunctionResource where
+        parseJSON
+          = withObject "UserDefinedFunctionResource"
+              (\ o ->
+                 UserDefinedFunctionResource' <$>
+                   (o .:? "resourceUri") <*> (o .:? "inlineCode"))
+
+instance ToJSON UserDefinedFunctionResource where
+        toJSON UserDefinedFunctionResource'{..}
+          = object
+              (catMaybes
+                 [("resourceUri" .=) <$> _udfrResourceURI,
+                  ("inlineCode" .=) <$> _udfrInlineCode])
+
+--
+-- /See:/ 'jobStatistics2' smart constructor.
+data JobStatistics2 = JobStatistics2'
+    { _jModelTrainingExpectedTotalIteration :: !(Maybe (Textual Int64))
+    , _jModelTraining                       :: !(Maybe BigQueryModelTraining)
+    , _jTotalSlotMs                         :: !(Maybe (Textual Int64))
+    , _jDdlTargetTable                      :: !(Maybe TableReference)
+    , _jEstimatedBytesProcessed             :: !(Maybe (Textual Int64))
+    , _jModelTrainingCurrentIteration       :: !(Maybe (Textual Int32))
+    , _jSchema                              :: !(Maybe TableSchema)
+    , _jTotalBytesProcessed                 :: !(Maybe (Textual Int64))
+    , _jBillingTier                         :: !(Maybe (Textual Int32))
+    , _jTotalBytesProcessedAccuracy         :: !(Maybe Text)
+    , _jUndeclaredQueryParameters           :: !(Maybe [QueryParameter])
+    , _jReferencedTables                    :: !(Maybe [TableReference])
+    , _jStatementType                       :: !(Maybe Text)
+    , _jReservationUsage                    :: !(Maybe [JobStatistics2ReservationUsageItem])
+    , _jNumDmlAffectedRows                  :: !(Maybe (Textual Int64))
+    , _jTimeline                            :: !(Maybe [QueryTimelineSample])
+    , _jQueryPlan                           :: !(Maybe [ExplainQueryStage])
+    , _jCacheHit                            :: !(Maybe Bool)
+    , _jTotalBytesBilled                    :: !(Maybe (Textual Int64))
+    , _jDdlOperationPerformed               :: !(Maybe Text)
+    , _jTotalPartitionsProcessed            :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatistics2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jModelTrainingExpectedTotalIteration'
+--
+-- * 'jModelTraining'
+--
+-- * 'jTotalSlotMs'
+--
+-- * 'jDdlTargetTable'
+--
+-- * 'jEstimatedBytesProcessed'
+--
+-- * 'jModelTrainingCurrentIteration'
+--
+-- * 'jSchema'
+--
+-- * 'jTotalBytesProcessed'
+--
+-- * 'jBillingTier'
+--
+-- * 'jTotalBytesProcessedAccuracy'
+--
+-- * 'jUndeclaredQueryParameters'
+--
+-- * 'jReferencedTables'
+--
+-- * 'jStatementType'
+--
+-- * 'jReservationUsage'
+--
+-- * 'jNumDmlAffectedRows'
+--
+-- * 'jTimeline'
+--
+-- * 'jQueryPlan'
+--
+-- * 'jCacheHit'
+--
+-- * 'jTotalBytesBilled'
+--
+-- * 'jDdlOperationPerformed'
+--
+-- * 'jTotalPartitionsProcessed'
+jobStatistics2
+    :: JobStatistics2
+jobStatistics2 =
+    JobStatistics2'
+    { _jModelTrainingExpectedTotalIteration = Nothing
+    , _jModelTraining = Nothing
+    , _jTotalSlotMs = Nothing
+    , _jDdlTargetTable = Nothing
+    , _jEstimatedBytesProcessed = Nothing
+    , _jModelTrainingCurrentIteration = Nothing
+    , _jSchema = Nothing
+    , _jTotalBytesProcessed = Nothing
+    , _jBillingTier = Nothing
+    , _jTotalBytesProcessedAccuracy = Nothing
+    , _jUndeclaredQueryParameters = Nothing
+    , _jReferencedTables = Nothing
+    , _jStatementType = Nothing
+    , _jReservationUsage = Nothing
+    , _jNumDmlAffectedRows = Nothing
+    , _jTimeline = Nothing
+    , _jQueryPlan = Nothing
+    , _jCacheHit = Nothing
+    , _jTotalBytesBilled = Nothing
+    , _jDdlOperationPerformed = Nothing
+    , _jTotalPartitionsProcessed = Nothing
+    }
+
+-- | [Output-only, Beta] Deprecated; do not use.
+jModelTrainingExpectedTotalIteration :: Lens' JobStatistics2 (Maybe Int64)
+jModelTrainingExpectedTotalIteration
+  = lens _jModelTrainingExpectedTotalIteration
+      (\ s a ->
+         s{_jModelTrainingExpectedTotalIteration = a})
+      . mapping _Coerce
+
+-- | [Output-only, Beta] Information about create model query job progress.
+jModelTraining :: Lens' JobStatistics2 (Maybe BigQueryModelTraining)
+jModelTraining
+  = lens _jModelTraining
+      (\ s a -> s{_jModelTraining = a})
+
+-- | [Output-only] Slot-milliseconds for the job.
+jTotalSlotMs :: Lens' JobStatistics2 (Maybe Int64)
+jTotalSlotMs
+  = lens _jTotalSlotMs (\ s a -> s{_jTotalSlotMs = a})
+      . mapping _Coerce
+
+-- | The DDL target table. Present only for CREATE\/DROP TABLE\/VIEW queries.
+jDdlTargetTable :: Lens' JobStatistics2 (Maybe TableReference)
+jDdlTargetTable
+  = lens _jDdlTargetTable
+      (\ s a -> s{_jDdlTargetTable = a})
+
+-- | [Output-only] The original estimate of bytes processed for the job.
+jEstimatedBytesProcessed :: Lens' JobStatistics2 (Maybe Int64)
+jEstimatedBytesProcessed
+  = lens _jEstimatedBytesProcessed
+      (\ s a -> s{_jEstimatedBytesProcessed = a})
+      . mapping _Coerce
+
+-- | [Output-only, Beta] Deprecated; do not use.
+jModelTrainingCurrentIteration :: Lens' JobStatistics2 (Maybe Int32)
+jModelTrainingCurrentIteration
+  = lens _jModelTrainingCurrentIteration
+      (\ s a -> s{_jModelTrainingCurrentIteration = a})
+      . mapping _Coerce
+
+-- | [Output-only] The schema of the results. Present only for successful dry
+-- run of non-legacy SQL queries.
+jSchema :: Lens' JobStatistics2 (Maybe TableSchema)
+jSchema = lens _jSchema (\ s a -> s{_jSchema = a})
+
+-- | [Output-only] Total bytes processed for the job.
+jTotalBytesProcessed :: Lens' JobStatistics2 (Maybe Int64)
+jTotalBytesProcessed
+  = lens _jTotalBytesProcessed
+      (\ s a -> s{_jTotalBytesProcessed = a})
+      . mapping _Coerce
+
+-- | [Output-only] Billing tier for the job.
+jBillingTier :: Lens' JobStatistics2 (Maybe Int32)
+jBillingTier
+  = lens _jBillingTier (\ s a -> s{_jBillingTier = a})
+      . mapping _Coerce
+
+-- | [Output-only] For dry-run jobs, totalBytesProcessed is an estimate and
+-- this field specifies the accuracy of the estimate. Possible values can
+-- be: UNKNOWN: accuracy of the estimate is unknown. PRECISE: estimate is
+-- precise. LOWER_BOUND: estimate is lower bound of what the query would
+-- cost. UPPER_BOUND: estiamte is upper bound of what the query would cost.
+jTotalBytesProcessedAccuracy :: Lens' JobStatistics2 (Maybe Text)
+jTotalBytesProcessedAccuracy
+  = lens _jTotalBytesProcessedAccuracy
+      (\ s a -> s{_jTotalBytesProcessedAccuracy = a})
+
+-- | Standard SQL only: list of undeclared query parameters detected during a
+-- dry run validation.
+jUndeclaredQueryParameters :: Lens' JobStatistics2 [QueryParameter]
+jUndeclaredQueryParameters
+  = lens _jUndeclaredQueryParameters
+      (\ s a -> s{_jUndeclaredQueryParameters = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only] Referenced tables for the job. Queries that reference more
+-- than 50 tables will not have a complete list.
+jReferencedTables :: Lens' JobStatistics2 [TableReference]
+jReferencedTables
+  = lens _jReferencedTables
+      (\ s a -> s{_jReferencedTables = a})
+      . _Default
+      . _Coerce
+
+-- | The type of query statement, if valid. Possible values (new values might
+-- be added in the future): \"SELECT\": SELECT query. \"INSERT\": INSERT
+-- query; see
+-- https:\/\/cloud.google.com\/bigquery\/docs\/reference\/standard-sql\/data-manipulation-language.
+-- \"UPDATE\": UPDATE query; see
+-- https:\/\/cloud.google.com\/bigquery\/docs\/reference\/standard-sql\/data-manipulation-language.
+-- \"DELETE\": DELETE query; see
+-- https:\/\/cloud.google.com\/bigquery\/docs\/reference\/standard-sql\/data-manipulation-language.
+-- \"MERGE\": MERGE query; see
+-- https:\/\/cloud.google.com\/bigquery\/docs\/reference\/standard-sql\/data-manipulation-language.
+-- \"CREATE_TABLE\": CREATE [OR REPLACE] TABLE without AS SELECT.
+-- \"CREATE_TABLE_AS_SELECT\": CREATE [OR REPLACE] TABLE ... AS SELECT ...
+-- . \"DROP_TABLE\": DROP TABLE query. \"CREATE_VIEW\": CREATE [OR REPLACE]
+-- VIEW ... AS SELECT ... . \"DROP_VIEW\": DROP VIEW query.
+-- \"ALTER_TABLE\": ALTER TABLE query. \"ALTER_VIEW\": ALTER VIEW query.
+jStatementType :: Lens' JobStatistics2 (Maybe Text)
+jStatementType
+  = lens _jStatementType
+      (\ s a -> s{_jStatementType = a})
+
+-- | [Output-only] Job resource usage breakdown by reservation.
+jReservationUsage :: Lens' JobStatistics2 [JobStatistics2ReservationUsageItem]
+jReservationUsage
+  = lens _jReservationUsage
+      (\ s a -> s{_jReservationUsage = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only] The number of rows affected by a DML statement. Present
+-- only for DML statements INSERT, UPDATE or DELETE.
+jNumDmlAffectedRows :: Lens' JobStatistics2 (Maybe Int64)
+jNumDmlAffectedRows
+  = lens _jNumDmlAffectedRows
+      (\ s a -> s{_jNumDmlAffectedRows = a})
+      . mapping _Coerce
+
+-- | [Output-only] [Beta] Describes a timeline of job execution.
+jTimeline :: Lens' JobStatistics2 [QueryTimelineSample]
+jTimeline
+  = lens _jTimeline (\ s a -> s{_jTimeline = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output-only] Describes execution plan for the query.
+jQueryPlan :: Lens' JobStatistics2 [ExplainQueryStage]
+jQueryPlan
+  = lens _jQueryPlan (\ s a -> s{_jQueryPlan = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output-only] Whether the query result was fetched from the query cache.
+jCacheHit :: Lens' JobStatistics2 (Maybe Bool)
+jCacheHit
+  = lens _jCacheHit (\ s a -> s{_jCacheHit = a})
+
+-- | [Output-only] Total bytes billed for the job.
+jTotalBytesBilled :: Lens' JobStatistics2 (Maybe Int64)
+jTotalBytesBilled
+  = lens _jTotalBytesBilled
+      (\ s a -> s{_jTotalBytesBilled = a})
+      . mapping _Coerce
+
+-- | The DDL operation performed, possibly dependent on the pre-existence of
+-- the DDL target. Possible values (new values might be added in the
+-- future): \"CREATE\": The query created the DDL target. \"SKIP\": No-op.
+-- Example cases: the query is CREATE TABLE IF NOT EXISTS while the table
+-- already exists, or the query is DROP TABLE IF EXISTS while the table
+-- does not exist. \"REPLACE\": The query replaced the DDL target. Example
+-- case: the query is CREATE OR REPLACE TABLE, and the table already
+-- exists. \"DROP\": The query deleted the DDL target.
+jDdlOperationPerformed :: Lens' JobStatistics2 (Maybe Text)
+jDdlOperationPerformed
+  = lens _jDdlOperationPerformed
+      (\ s a -> s{_jDdlOperationPerformed = a})
+
+-- | [Output-only] Total number of partitions processed from all partitioned
+-- tables referenced in the job.
+jTotalPartitionsProcessed :: Lens' JobStatistics2 (Maybe Int64)
+jTotalPartitionsProcessed
+  = lens _jTotalPartitionsProcessed
+      (\ s a -> s{_jTotalPartitionsProcessed = a})
+      . mapping _Coerce
+
+instance FromJSON JobStatistics2 where
+        parseJSON
+          = withObject "JobStatistics2"
+              (\ o ->
+                 JobStatistics2' <$>
+                   (o .:? "modelTrainingExpectedTotalIteration") <*>
+                     (o .:? "modelTraining")
+                     <*> (o .:? "totalSlotMs")
+                     <*> (o .:? "ddlTargetTable")
+                     <*> (o .:? "estimatedBytesProcessed")
+                     <*> (o .:? "modelTrainingCurrentIteration")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "totalBytesProcessed")
+                     <*> (o .:? "billingTier")
+                     <*> (o .:? "totalBytesProcessedAccuracy")
+                     <*> (o .:? "undeclaredQueryParameters" .!= mempty)
+                     <*> (o .:? "referencedTables" .!= mempty)
+                     <*> (o .:? "statementType")
+                     <*> (o .:? "reservationUsage" .!= mempty)
+                     <*> (o .:? "numDmlAffectedRows")
+                     <*> (o .:? "timeline" .!= mempty)
+                     <*> (o .:? "queryPlan" .!= mempty)
+                     <*> (o .:? "cacheHit")
+                     <*> (o .:? "totalBytesBilled")
+                     <*> (o .:? "ddlOperationPerformed")
+                     <*> (o .:? "totalPartitionsProcessed"))
+
+instance ToJSON JobStatistics2 where
+        toJSON JobStatistics2'{..}
+          = object
+              (catMaybes
+                 [("modelTrainingExpectedTotalIteration" .=) <$>
+                    _jModelTrainingExpectedTotalIteration,
+                  ("modelTraining" .=) <$> _jModelTraining,
+                  ("totalSlotMs" .=) <$> _jTotalSlotMs,
+                  ("ddlTargetTable" .=) <$> _jDdlTargetTable,
+                  ("estimatedBytesProcessed" .=) <$>
+                    _jEstimatedBytesProcessed,
+                  ("modelTrainingCurrentIteration" .=) <$>
+                    _jModelTrainingCurrentIteration,
+                  ("schema" .=) <$> _jSchema,
+                  ("totalBytesProcessed" .=) <$> _jTotalBytesProcessed,
+                  ("billingTier" .=) <$> _jBillingTier,
+                  ("totalBytesProcessedAccuracy" .=) <$>
+                    _jTotalBytesProcessedAccuracy,
+                  ("undeclaredQueryParameters" .=) <$>
+                    _jUndeclaredQueryParameters,
+                  ("referencedTables" .=) <$> _jReferencedTables,
+                  ("statementType" .=) <$> _jStatementType,
+                  ("reservationUsage" .=) <$> _jReservationUsage,
+                  ("numDmlAffectedRows" .=) <$> _jNumDmlAffectedRows,
+                  ("timeline" .=) <$> _jTimeline,
+                  ("queryPlan" .=) <$> _jQueryPlan,
+                  ("cacheHit" .=) <$> _jCacheHit,
+                  ("totalBytesBilled" .=) <$> _jTotalBytesBilled,
+                  ("ddlOperationPerformed" .=) <$>
+                    _jDdlOperationPerformed,
+                  ("totalPartitionsProcessed" .=) <$>
+                    _jTotalPartitionsProcessed])
+
+--
+-- /See:/ 'jobStatus' smart constructor.
+data JobStatus = JobStatus'
+    { _jsState       :: !(Maybe Text)
+    , _jsErrorResult :: !(Maybe ErrorProto)
+    , _jsErrors      :: !(Maybe [ErrorProto])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jsState'
+--
+-- * 'jsErrorResult'
+--
+-- * 'jsErrors'
+jobStatus
+    :: JobStatus
+jobStatus =
+    JobStatus'
+    { _jsState = Nothing
+    , _jsErrorResult = Nothing
+    , _jsErrors = Nothing
+    }
+
+-- | [Output-only] Running state of the job.
+jsState :: Lens' JobStatus (Maybe Text)
+jsState = lens _jsState (\ s a -> s{_jsState = a})
+
+-- | [Output-only] Final error result of the job. If present, indicates that
+-- the job has completed and was unsuccessful.
+jsErrorResult :: Lens' JobStatus (Maybe ErrorProto)
+jsErrorResult
+  = lens _jsErrorResult
+      (\ s a -> s{_jsErrorResult = a})
+
+-- | [Output-only] The first errors encountered during the running of the
+-- job. The final message includes the number of errors that caused the
+-- process to stop. Errors here do not necessarily mean that the job has
+-- completed or was unsuccessful.
+jsErrors :: Lens' JobStatus [ErrorProto]
+jsErrors
+  = lens _jsErrors (\ s a -> s{_jsErrors = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON JobStatus where
+        parseJSON
+          = withObject "JobStatus"
+              (\ o ->
+                 JobStatus' <$>
+                   (o .:? "state") <*> (o .:? "errorResult") <*>
+                     (o .:? "errors" .!= mempty))
+
+instance ToJSON JobStatus where
+        toJSON JobStatus'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _jsState,
+                  ("errorResult" .=) <$> _jsErrorResult,
+                  ("errors" .=) <$> _jsErrors])
+
+-- | The labels associated with this table. You can use these to organize and
+-- group your tables. Label keys and values can be no longer than 63
+-- characters, can only contain lowercase letters, numeric characters,
+-- underscores and dashes. International characters are allowed. Label
+-- values are optional. Label keys must start with a letter and each label
+-- in the list must have a different key.
+--
+-- /See:/ 'tableLabels' smart constructor.
+newtype TableLabels = TableLabels'
+    { _tlAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tlAddtional'
+tableLabels
+    :: HashMap Text Text -- ^ 'tlAddtional'
+    -> TableLabels
+tableLabels pTlAddtional_ =
+    TableLabels'
+    { _tlAddtional = _Coerce # pTlAddtional_
+    }
+
+tlAddtional :: Lens' TableLabels (HashMap Text Text)
+tlAddtional
+  = lens _tlAddtional (\ s a -> s{_tlAddtional = a}) .
+      _Coerce
+
+instance FromJSON TableLabels where
+        parseJSON
+          = withObject "TableLabels"
+              (\ o -> TableLabels' <$> (parseJSONObject o))
+
+instance ToJSON TableLabels where
+        toJSON = toJSON . _tlAddtional
+
+--
+-- /See:/ 'destinationTableProperties' smart constructor.
+data DestinationTableProperties = DestinationTableProperties'
+    { _dtpFriendlyName :: !(Maybe Text)
+    , _dtpDescription  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DestinationTableProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtpFriendlyName'
+--
+-- * 'dtpDescription'
+destinationTableProperties
+    :: DestinationTableProperties
+destinationTableProperties =
+    DestinationTableProperties'
+    { _dtpFriendlyName = Nothing
+    , _dtpDescription = Nothing
+    }
+
+-- | [Optional] The friendly name for the destination table. This will only
+-- be used if the destination table is newly created. If the table already
+-- exists and a value different than the current friendly name is provided,
+-- the job will fail.
+dtpFriendlyName :: Lens' DestinationTableProperties (Maybe Text)
+dtpFriendlyName
+  = lens _dtpFriendlyName
+      (\ s a -> s{_dtpFriendlyName = a})
+
+-- | [Optional] The description for the destination table. This will only be
+-- used if the destination table is newly created. If the table already
+-- exists and a value different than the current description is provided,
+-- the job will fail.
+dtpDescription :: Lens' DestinationTableProperties (Maybe Text)
+dtpDescription
+  = lens _dtpDescription
+      (\ s a -> s{_dtpDescription = a})
+
+instance FromJSON DestinationTableProperties where
+        parseJSON
+          = withObject "DestinationTableProperties"
+              (\ o ->
+                 DestinationTableProperties' <$>
+                   (o .:? "friendlyName") <*> (o .:? "description"))
+
+instance ToJSON DestinationTableProperties where
+        toJSON DestinationTableProperties'{..}
+          = object
+              (catMaybes
+                 [("friendlyName" .=) <$> _dtpFriendlyName,
+                  ("description" .=) <$> _dtpDescription])
+
+--
+-- /See:/ 'dataSetAccessItem' smart constructor.
+data DataSetAccessItem = DataSetAccessItem'
+    { _dsaiGroupByEmail :: !(Maybe Text)
+    , _dsaiDomain       :: !(Maybe Text)
+    , _dsaiSpecialGroup :: !(Maybe Text)
+    , _dsaiRole         :: !(Maybe Text)
+    , _dsaiIAMMember    :: !(Maybe Text)
+    , _dsaiView         :: !(Maybe TableReference)
+    , _dsaiUserByEmail  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetAccessItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsaiGroupByEmail'
+--
+-- * 'dsaiDomain'
+--
+-- * 'dsaiSpecialGroup'
+--
+-- * 'dsaiRole'
+--
+-- * 'dsaiIAMMember'
+--
+-- * 'dsaiView'
+--
+-- * 'dsaiUserByEmail'
+dataSetAccessItem
+    :: DataSetAccessItem
+dataSetAccessItem =
+    DataSetAccessItem'
+    { _dsaiGroupByEmail = Nothing
+    , _dsaiDomain = Nothing
+    , _dsaiSpecialGroup = Nothing
+    , _dsaiRole = Nothing
+    , _dsaiIAMMember = Nothing
+    , _dsaiView = Nothing
+    , _dsaiUserByEmail = Nothing
+    }
+
+-- | [Pick one] An email address of a Google Group to grant access to. Maps
+-- to IAM policy member \"group:GROUP\".
+dsaiGroupByEmail :: Lens' DataSetAccessItem (Maybe Text)
+dsaiGroupByEmail
+  = lens _dsaiGroupByEmail
+      (\ s a -> s{_dsaiGroupByEmail = a})
+
+-- | [Pick one] A domain to grant access to. Any users signed in with the
+-- domain specified will be granted the specified access. Example:
+-- \"example.com\". Maps to IAM policy member \"domain:DOMAIN\".
+dsaiDomain :: Lens' DataSetAccessItem (Maybe Text)
+dsaiDomain
+  = lens _dsaiDomain (\ s a -> s{_dsaiDomain = a})
+
+-- | [Pick one] A special group to grant access to. Possible values include:
+-- projectOwners: Owners of the enclosing project. projectReaders: Readers
+-- of the enclosing project. projectWriters: Writers of the enclosing
+-- project. allAuthenticatedUsers: All authenticated BigQuery users. Maps
+-- to similarly-named IAM members.
+dsaiSpecialGroup :: Lens' DataSetAccessItem (Maybe Text)
+dsaiSpecialGroup
+  = lens _dsaiSpecialGroup
+      (\ s a -> s{_dsaiSpecialGroup = a})
+
+-- | [Required] Describes the rights granted to the user specified by the
+-- other member of the access object. The following string values are
+-- supported: READER, WRITER, OWNER.
+dsaiRole :: Lens' DataSetAccessItem (Maybe Text)
+dsaiRole = lens _dsaiRole (\ s a -> s{_dsaiRole = a})
+
+-- | [Pick one] Some other type of member that appears in the IAM Policy but
+-- isn\'t a user, group, domain, or special group.
+dsaiIAMMember :: Lens' DataSetAccessItem (Maybe Text)
+dsaiIAMMember
+  = lens _dsaiIAMMember
+      (\ s a -> s{_dsaiIAMMember = a})
+
+-- | [Pick one] A view from a different dataset to grant access to. Queries
+-- executed against that view will have read access to tables in this
+-- dataset. The role field is not required when this field is set. If that
+-- view is updated by any user, access to the view needs to be granted
+-- again via an update operation.
+dsaiView :: Lens' DataSetAccessItem (Maybe TableReference)
+dsaiView = lens _dsaiView (\ s a -> s{_dsaiView = a})
+
+-- | [Pick one] An email address of a user to grant access to. For example:
+-- fred\'example.com. Maps to IAM policy member \"user:EMAIL\" or
+-- \"serviceAccount:EMAIL\".
+dsaiUserByEmail :: Lens' DataSetAccessItem (Maybe Text)
+dsaiUserByEmail
+  = lens _dsaiUserByEmail
+      (\ s a -> s{_dsaiUserByEmail = a})
+
+instance FromJSON DataSetAccessItem where
+        parseJSON
+          = withObject "DataSetAccessItem"
+              (\ o ->
+                 DataSetAccessItem' <$>
+                   (o .:? "groupByEmail") <*> (o .:? "domain") <*>
+                     (o .:? "specialGroup")
+                     <*> (o .:? "role")
+                     <*> (o .:? "iamMember")
+                     <*> (o .:? "view")
+                     <*> (o .:? "userByEmail"))
+
+instance ToJSON DataSetAccessItem where
+        toJSON DataSetAccessItem'{..}
+          = object
+              (catMaybes
+                 [("groupByEmail" .=) <$> _dsaiGroupByEmail,
+                  ("domain" .=) <$> _dsaiDomain,
+                  ("specialGroup" .=) <$> _dsaiSpecialGroup,
+                  ("role" .=) <$> _dsaiRole,
+                  ("iamMember" .=) <$> _dsaiIAMMember,
+                  ("view" .=) <$> _dsaiView,
+                  ("userByEmail" .=) <$> _dsaiUserByEmail])
+
+--
+-- /See:/ 'tableDataInsertAllResponse' smart constructor.
+data TableDataInsertAllResponse = TableDataInsertAllResponse'
+    { _tKind         :: !Text
+    , _tInsertErrors :: !(Maybe [TableDataInsertAllResponseInsertErrorsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableDataInsertAllResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tKind'
+--
+-- * 'tInsertErrors'
+tableDataInsertAllResponse
+    :: TableDataInsertAllResponse
+tableDataInsertAllResponse =
+    TableDataInsertAllResponse'
+    { _tKind = "bigquery#tableDataInsertAllResponse"
+    , _tInsertErrors = Nothing
+    }
+
+-- | The resource type of the response.
+tKind :: Lens' TableDataInsertAllResponse Text
+tKind = lens _tKind (\ s a -> s{_tKind = a})
+
+-- | An array of errors for rows that were not inserted.
+tInsertErrors :: Lens' TableDataInsertAllResponse [TableDataInsertAllResponseInsertErrorsItem]
+tInsertErrors
+  = lens _tInsertErrors
+      (\ s a -> s{_tInsertErrors = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TableDataInsertAllResponse where
+        parseJSON
+          = withObject "TableDataInsertAllResponse"
+              (\ o ->
+                 TableDataInsertAllResponse' <$>
+                   (o .:? "kind" .!=
+                      "bigquery#tableDataInsertAllResponse")
+                     <*> (o .:? "insertErrors" .!= mempty))
+
+instance ToJSON TableDataInsertAllResponse where
+        toJSON TableDataInsertAllResponse'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _tKind),
+                  ("insertErrors" .=) <$> _tInsertErrors])
+
+--
+-- /See:/ 'queryParameterType' smart constructor.
+data QueryParameterType = QueryParameterType'
+    { _qptStructTypes :: !(Maybe [QueryParameterTypeStructTypesItem])
+    , _qptType        :: !(Maybe Text)
+    , _qptArrayType   :: !(Maybe QueryParameterType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryParameterType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qptStructTypes'
+--
+-- * 'qptType'
+--
+-- * 'qptArrayType'
+queryParameterType
+    :: QueryParameterType
+queryParameterType =
+    QueryParameterType'
+    { _qptStructTypes = Nothing
+    , _qptType = Nothing
+    , _qptArrayType = Nothing
+    }
+
+-- | [Optional] The types of the fields of this struct, in order, if this is
+-- a struct.
+qptStructTypes :: Lens' QueryParameterType [QueryParameterTypeStructTypesItem]
+qptStructTypes
+  = lens _qptStructTypes
+      (\ s a -> s{_qptStructTypes = a})
+      . _Default
+      . _Coerce
+
+-- | [Required] The top level type of this field.
+qptType :: Lens' QueryParameterType (Maybe Text)
+qptType = lens _qptType (\ s a -> s{_qptType = a})
+
+-- | [Optional] The type of the array\'s elements, if this is an array.
+qptArrayType :: Lens' QueryParameterType (Maybe QueryParameterType)
+qptArrayType
+  = lens _qptArrayType (\ s a -> s{_qptArrayType = a})
+
+instance FromJSON QueryParameterType where
+        parseJSON
+          = withObject "QueryParameterType"
+              (\ o ->
+                 QueryParameterType' <$>
+                   (o .:? "structTypes" .!= mempty) <*> (o .:? "type")
+                     <*> (o .:? "arrayType"))
+
+instance ToJSON QueryParameterType where
+        toJSON QueryParameterType'{..}
+          = object
+              (catMaybes
+                 [("structTypes" .=) <$> _qptStructTypes,
+                  ("type" .=) <$> _qptType,
+                  ("arrayType" .=) <$> _qptArrayType])
+
+--
+-- /See:/ 'table' smart constructor.
+data Table = Table'
+    { _tabMaterializedView          :: !(Maybe MaterializedViewDefinition)
+    , _tabCreationTime              :: !(Maybe (Textual Int64))
+    , _tabEtag                      :: !(Maybe Text)
+    , _tabNumBytes                  :: !(Maybe (Textual Int64))
+    , _tabClustering                :: !(Maybe Clustering)
+    , _tabExternalDataConfiguration :: !(Maybe ExternalDataConfiguration)
+    , _tabRangePartitioning         :: !(Maybe RangePartitioning)
+    , _tabLocation                  :: !(Maybe Text)
+    , _tabTableReference            :: !(Maybe TableReference)
+    , _tabFriendlyName              :: !(Maybe Text)
+    , _tabKind                      :: !Text
+    , _tabLastModifiedTime          :: !(Maybe (Textual Word64))
+    , _tabSchema                    :: !(Maybe TableSchema)
+    , _tabStreamingBuffer           :: !(Maybe Streamingbuffer)
+    , _tabSelfLink                  :: !(Maybe Text)
+    , _tabRequirePartitionFilter    :: !Bool
+    , _tabEncryptionConfiguration   :: !(Maybe EncryptionConfiguration)
+    , _tabModel                     :: !(Maybe ModelDefinition)
+    , _tabTimePartitioning          :: !(Maybe TimePartitioning)
+    , _tabNumRows                   :: !(Maybe (Textual Word64))
+    , _tabNumPhysicalBytes          :: !(Maybe (Textual Int64))
+    , _tabView                      :: !(Maybe ViewDefinition)
+    , _tabId                        :: !(Maybe Text)
+    , _tabLabels                    :: !(Maybe TableLabels)
+    , _tabType                      :: !(Maybe Text)
+    , _tabNumLongTermBytes          :: !(Maybe (Textual Int64))
+    , _tabExpirationTime            :: !(Maybe (Textual Int64))
+    , _tabDescription               :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Table' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tabMaterializedView'
+--
+-- * 'tabCreationTime'
+--
+-- * 'tabEtag'
+--
+-- * 'tabNumBytes'
+--
+-- * 'tabClustering'
+--
+-- * 'tabExternalDataConfiguration'
+--
+-- * 'tabRangePartitioning'
+--
+-- * 'tabLocation'
+--
+-- * 'tabTableReference'
+--
+-- * 'tabFriendlyName'
+--
+-- * 'tabKind'
+--
+-- * 'tabLastModifiedTime'
+--
+-- * 'tabSchema'
+--
+-- * 'tabStreamingBuffer'
+--
+-- * 'tabSelfLink'
+--
+-- * 'tabRequirePartitionFilter'
+--
+-- * 'tabEncryptionConfiguration'
+--
+-- * 'tabModel'
+--
+-- * 'tabTimePartitioning'
+--
+-- * 'tabNumRows'
+--
+-- * 'tabNumPhysicalBytes'
+--
+-- * 'tabView'
+--
+-- * 'tabId'
+--
+-- * 'tabLabels'
+--
+-- * 'tabType'
+--
+-- * 'tabNumLongTermBytes'
+--
+-- * 'tabExpirationTime'
+--
+-- * 'tabDescription'
+table
+    :: Table
+table =
+    Table'
+    { _tabMaterializedView = Nothing
+    , _tabCreationTime = Nothing
+    , _tabEtag = Nothing
+    , _tabNumBytes = Nothing
+    , _tabClustering = Nothing
+    , _tabExternalDataConfiguration = Nothing
+    , _tabRangePartitioning = Nothing
+    , _tabLocation = Nothing
+    , _tabTableReference = Nothing
+    , _tabFriendlyName = Nothing
+    , _tabKind = "bigquery#table"
+    , _tabLastModifiedTime = Nothing
+    , _tabSchema = Nothing
+    , _tabStreamingBuffer = Nothing
+    , _tabSelfLink = Nothing
+    , _tabRequirePartitionFilter = False
+    , _tabEncryptionConfiguration = Nothing
+    , _tabModel = Nothing
+    , _tabTimePartitioning = Nothing
+    , _tabNumRows = Nothing
+    , _tabNumPhysicalBytes = Nothing
+    , _tabView = Nothing
+    , _tabId = Nothing
+    , _tabLabels = Nothing
+    , _tabType = Nothing
+    , _tabNumLongTermBytes = Nothing
+    , _tabExpirationTime = Nothing
+    , _tabDescription = Nothing
+    }
+
+-- | [Optional] Materialized view definition.
+tabMaterializedView :: Lens' Table (Maybe MaterializedViewDefinition)
+tabMaterializedView
+  = lens _tabMaterializedView
+      (\ s a -> s{_tabMaterializedView = a})
+
+-- | [Output-only] The time when this table was created, in milliseconds
+-- since the epoch.
+tabCreationTime :: Lens' Table (Maybe Int64)
+tabCreationTime
+  = lens _tabCreationTime
+      (\ s a -> s{_tabCreationTime = a})
+      . mapping _Coerce
+
+-- | [Output-only] A hash of the table metadata. Used to ensure there were no
+-- concurrent modifications to the resource when attempting an update. Not
+-- guaranteed to change when the table contents or the fields numRows,
+-- numBytes, numLongTermBytes or lastModifiedTime change.
+tabEtag :: Lens' Table (Maybe Text)
+tabEtag = lens _tabEtag (\ s a -> s{_tabEtag = a})
+
+-- | [Output-only] The size of this table in bytes, excluding any data in the
+-- streaming buffer.
+tabNumBytes :: Lens' Table (Maybe Int64)
+tabNumBytes
+  = lens _tabNumBytes (\ s a -> s{_tabNumBytes = a}) .
+      mapping _Coerce
+
+-- | [Beta] Clustering specification for the table. Must be specified with
+-- partitioning, data in the table will be first partitioned and
+-- subsequently clustered.
+tabClustering :: Lens' Table (Maybe Clustering)
+tabClustering
+  = lens _tabClustering
+      (\ s a -> s{_tabClustering = a})
+
+-- | [Optional] Describes the data format, location, and other properties of
+-- a table stored outside of BigQuery. By defining these properties, the
+-- data source can then be queried as if it were a standard BigQuery table.
+tabExternalDataConfiguration :: Lens' Table (Maybe ExternalDataConfiguration)
+tabExternalDataConfiguration
+  = lens _tabExternalDataConfiguration
+      (\ s a -> s{_tabExternalDataConfiguration = a})
+
+-- | [TrustedTester] Range partitioning specification for this table. Only
+-- one of timePartitioning and rangePartitioning should be specified.
+tabRangePartitioning :: Lens' Table (Maybe RangePartitioning)
+tabRangePartitioning
+  = lens _tabRangePartitioning
+      (\ s a -> s{_tabRangePartitioning = a})
+
+-- | [Output-only] The geographic location where the table resides. This
+-- value is inherited from the dataset.
+tabLocation :: Lens' Table (Maybe Text)
+tabLocation
+  = lens _tabLocation (\ s a -> s{_tabLocation = a})
+
+-- | [Required] Reference describing the ID of this table.
+tabTableReference :: Lens' Table (Maybe TableReference)
+tabTableReference
+  = lens _tabTableReference
+      (\ s a -> s{_tabTableReference = a})
+
+-- | [Optional] A descriptive name for this table.
+tabFriendlyName :: Lens' Table (Maybe Text)
+tabFriendlyName
+  = lens _tabFriendlyName
+      (\ s a -> s{_tabFriendlyName = a})
+
+-- | [Output-only] The type of the resource.
+tabKind :: Lens' Table Text
+tabKind = lens _tabKind (\ s a -> s{_tabKind = a})
+
+-- | [Output-only] The time when this table was last modified, in
+-- milliseconds since the epoch.
+tabLastModifiedTime :: Lens' Table (Maybe Word64)
+tabLastModifiedTime
+  = lens _tabLastModifiedTime
+      (\ s a -> s{_tabLastModifiedTime = a})
+      . mapping _Coerce
+
+-- | [Optional] Describes the schema of this table.
+tabSchema :: Lens' Table (Maybe TableSchema)
+tabSchema
+  = lens _tabSchema (\ s a -> s{_tabSchema = a})
+
+-- | [Output-only] Contains information regarding this table\'s streaming
+-- buffer, if one is present. This field will be absent if the table is not
+-- being streamed to or if there is no data in the streaming buffer.
+tabStreamingBuffer :: Lens' Table (Maybe Streamingbuffer)
+tabStreamingBuffer
+  = lens _tabStreamingBuffer
+      (\ s a -> s{_tabStreamingBuffer = a})
+
+-- | [Output-only] A URL that can be used to access this resource again.
+tabSelfLink :: Lens' Table (Maybe Text)
+tabSelfLink
+  = lens _tabSelfLink (\ s a -> s{_tabSelfLink = a})
+
+-- | [Beta] [Optional] If set to true, queries over this table require a
+-- partition filter that can be used for partition elimination to be
+-- specified.
+tabRequirePartitionFilter :: Lens' Table Bool
+tabRequirePartitionFilter
+  = lens _tabRequirePartitionFilter
+      (\ s a -> s{_tabRequirePartitionFilter = a})
+
+-- | Custom encryption configuration (e.g., Cloud KMS keys).
+tabEncryptionConfiguration :: Lens' Table (Maybe EncryptionConfiguration)
+tabEncryptionConfiguration
+  = lens _tabEncryptionConfiguration
+      (\ s a -> s{_tabEncryptionConfiguration = a})
+
+-- | [Output-only, Beta] Present iff this table represents a ML model.
+-- Describes the training information for the model, and it is required to
+-- run \'PREDICT\' queries.
+tabModel :: Lens' Table (Maybe ModelDefinition)
+tabModel = lens _tabModel (\ s a -> s{_tabModel = a})
+
+-- | Time-based partitioning specification for this table. Only one of
+-- timePartitioning and rangePartitioning should be specified.
+tabTimePartitioning :: Lens' Table (Maybe TimePartitioning)
+tabTimePartitioning
+  = lens _tabTimePartitioning
+      (\ s a -> s{_tabTimePartitioning = a})
+
+-- | [Output-only] The number of rows of data in this table, excluding any
+-- data in the streaming buffer.
+tabNumRows :: Lens' Table (Maybe Word64)
+tabNumRows
+  = lens _tabNumRows (\ s a -> s{_tabNumRows = a}) .
+      mapping _Coerce
+
+-- | [Output-only] [TrustedTester] The physical size of this table in bytes,
+-- excluding any data in the streaming buffer. This includes compression
+-- and storage used for time travel.
+tabNumPhysicalBytes :: Lens' Table (Maybe Int64)
+tabNumPhysicalBytes
+  = lens _tabNumPhysicalBytes
+      (\ s a -> s{_tabNumPhysicalBytes = a})
+      . mapping _Coerce
+
+-- | [Optional] The view definition.
+tabView :: Lens' Table (Maybe ViewDefinition)
+tabView = lens _tabView (\ s a -> s{_tabView = a})
+
+-- | [Output-only] An opaque ID uniquely identifying the table.
+tabId :: Lens' Table (Maybe Text)
+tabId = lens _tabId (\ s a -> s{_tabId = a})
+
+-- | The labels associated with this table. You can use these to organize and
+-- group your tables. Label keys and values can be no longer than 63
+-- characters, can only contain lowercase letters, numeric characters,
+-- underscores and dashes. International characters are allowed. Label
+-- values are optional. Label keys must start with a letter and each label
+-- in the list must have a different key.
+tabLabels :: Lens' Table (Maybe TableLabels)
+tabLabels
+  = lens _tabLabels (\ s a -> s{_tabLabels = a})
+
+-- | [Output-only] Describes the table type. The following values are
+-- supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined
+-- by a SQL query. [TrustedTester] MATERIALIZED_VIEW: SQL query whose
+-- result is persisted. EXTERNAL: A table that references data stored in an
+-- external storage system, such as Google Cloud Storage. The default value
+-- is TABLE.
+tabType :: Lens' Table (Maybe Text)
+tabType = lens _tabType (\ s a -> s{_tabType = a})
+
+-- | [Output-only] The number of bytes in the table that are considered
+-- \"long-term storage\".
+tabNumLongTermBytes :: Lens' Table (Maybe Int64)
+tabNumLongTermBytes
+  = lens _tabNumLongTermBytes
+      (\ s a -> s{_tabNumLongTermBytes = a})
+      . mapping _Coerce
+
+-- | [Optional] The time when this table expires, in milliseconds since the
+-- epoch. If not present, the table will persist indefinitely. Expired
+-- tables will be deleted and their storage reclaimed. The
+-- defaultTableExpirationMs property of the encapsulating dataset can be
+-- used to set a default expirationTime on newly created tables.
+tabExpirationTime :: Lens' Table (Maybe Int64)
+tabExpirationTime
+  = lens _tabExpirationTime
+      (\ s a -> s{_tabExpirationTime = a})
+      . mapping _Coerce
+
+-- | [Optional] A user-friendly description of this table.
+tabDescription :: Lens' Table (Maybe Text)
+tabDescription
+  = lens _tabDescription
+      (\ s a -> s{_tabDescription = a})
+
+instance FromJSON Table where
+        parseJSON
+          = withObject "Table"
+              (\ o ->
+                 Table' <$>
+                   (o .:? "materializedView") <*> (o .:? "creationTime")
+                     <*> (o .:? "etag")
+                     <*> (o .:? "numBytes")
+                     <*> (o .:? "clustering")
+                     <*> (o .:? "externalDataConfiguration")
+                     <*> (o .:? "rangePartitioning")
+                     <*> (o .:? "location")
+                     <*> (o .:? "tableReference")
+                     <*> (o .:? "friendlyName")
+                     <*> (o .:? "kind" .!= "bigquery#table")
+                     <*> (o .:? "lastModifiedTime")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "streamingBuffer")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "requirePartitionFilter" .!= False)
+                     <*> (o .:? "encryptionConfiguration")
+                     <*> (o .:? "model")
+                     <*> (o .:? "timePartitioning")
+                     <*> (o .:? "numRows")
+                     <*> (o .:? "numPhysicalBytes")
+                     <*> (o .:? "view")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "type")
+                     <*> (o .:? "numLongTermBytes")
+                     <*> (o .:? "expirationTime")
+                     <*> (o .:? "description"))
+
+instance ToJSON Table where
+        toJSON Table'{..}
+          = object
+              (catMaybes
+                 [("materializedView" .=) <$> _tabMaterializedView,
+                  ("creationTime" .=) <$> _tabCreationTime,
+                  ("etag" .=) <$> _tabEtag,
+                  ("numBytes" .=) <$> _tabNumBytes,
+                  ("clustering" .=) <$> _tabClustering,
+                  ("externalDataConfiguration" .=) <$>
+                    _tabExternalDataConfiguration,
+                  ("rangePartitioning" .=) <$> _tabRangePartitioning,
+                  ("location" .=) <$> _tabLocation,
+                  ("tableReference" .=) <$> _tabTableReference,
+                  ("friendlyName" .=) <$> _tabFriendlyName,
+                  Just ("kind" .= _tabKind),
+                  ("lastModifiedTime" .=) <$> _tabLastModifiedTime,
+                  ("schema" .=) <$> _tabSchema,
+                  ("streamingBuffer" .=) <$> _tabStreamingBuffer,
+                  ("selfLink" .=) <$> _tabSelfLink,
+                  Just
+                    ("requirePartitionFilter" .=
+                       _tabRequirePartitionFilter),
+                  ("encryptionConfiguration" .=) <$>
+                    _tabEncryptionConfiguration,
+                  ("model" .=) <$> _tabModel,
+                  ("timePartitioning" .=) <$> _tabTimePartitioning,
+                  ("numRows" .=) <$> _tabNumRows,
+                  ("numPhysicalBytes" .=) <$> _tabNumPhysicalBytes,
+                  ("view" .=) <$> _tabView, ("id" .=) <$> _tabId,
+                  ("labels" .=) <$> _tabLabels,
+                  ("type" .=) <$> _tabType,
+                  ("numLongTermBytes" .=) <$> _tabNumLongTermBytes,
+                  ("expirationTime" .=) <$> _tabExpirationTime,
+                  ("description" .=) <$> _tabDescription])
+
+--
+-- /See:/ 'errorProto' smart constructor.
+data ErrorProto = ErrorProto'
+    { _epDebugInfo :: !(Maybe Text)
+    , _epLocation  :: !(Maybe Text)
+    , _epReason    :: !(Maybe Text)
+    , _epMessage   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorProto' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epDebugInfo'
+--
+-- * 'epLocation'
+--
+-- * 'epReason'
+--
+-- * 'epMessage'
+errorProto
+    :: ErrorProto
+errorProto =
+    ErrorProto'
+    { _epDebugInfo = Nothing
+    , _epLocation = Nothing
+    , _epReason = Nothing
+    , _epMessage = Nothing
+    }
+
+-- | Debugging information. This property is internal to Google and should
+-- not be used.
+epDebugInfo :: Lens' ErrorProto (Maybe Text)
+epDebugInfo
+  = lens _epDebugInfo (\ s a -> s{_epDebugInfo = a})
+
+-- | Specifies where the error occurred, if present.
+epLocation :: Lens' ErrorProto (Maybe Text)
+epLocation
+  = lens _epLocation (\ s a -> s{_epLocation = a})
+
+-- | A short error code that summarizes the error.
+epReason :: Lens' ErrorProto (Maybe Text)
+epReason = lens _epReason (\ s a -> s{_epReason = a})
+
+-- | A human-readable description of the error.
+epMessage :: Lens' ErrorProto (Maybe Text)
+epMessage
+  = lens _epMessage (\ s a -> s{_epMessage = a})
+
+instance FromJSON ErrorProto where
+        parseJSON
+          = withObject "ErrorProto"
+              (\ o ->
+                 ErrorProto' <$>
+                   (o .:? "debugInfo") <*> (o .:? "location") <*>
+                     (o .:? "reason")
+                     <*> (o .:? "message"))
+
+instance ToJSON ErrorProto where
+        toJSON ErrorProto'{..}
+          = object
+              (catMaybes
+                 [("debugInfo" .=) <$> _epDebugInfo,
+                  ("location" .=) <$> _epLocation,
+                  ("reason" .=) <$> _epReason,
+                  ("message" .=) <$> _epMessage])
+
+--
+-- /See:/ 'csvOptions' smart constructor.
+data CSVOptions = CSVOptions'
+    { _coSkipLeadingRows     :: !(Maybe (Textual Int64))
+    , _coAllowJaggedRows     :: !(Maybe Bool)
+    , _coAllowQuotedNewlines :: !(Maybe Bool)
+    , _coQuote               :: !Text
+    , _coEncoding            :: !(Maybe Text)
+    , _coFieldDelimiter      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CSVOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'coSkipLeadingRows'
+--
+-- * 'coAllowJaggedRows'
+--
+-- * 'coAllowQuotedNewlines'
+--
+-- * 'coQuote'
+--
+-- * 'coEncoding'
+--
+-- * 'coFieldDelimiter'
+csvOptions
+    :: CSVOptions
+csvOptions =
+    CSVOptions'
+    { _coSkipLeadingRows = Nothing
+    , _coAllowJaggedRows = Nothing
+    , _coAllowQuotedNewlines = Nothing
+    , _coQuote = "\""
+    , _coEncoding = Nothing
+    , _coFieldDelimiter = Nothing
+    }
+
+-- | [Optional] The number of rows at the top of a CSV file that BigQuery
+-- will skip when reading the data. The default value is 0. This property
+-- is useful if you have header rows in the file that should be skipped.
+coSkipLeadingRows :: Lens' CSVOptions (Maybe Int64)
+coSkipLeadingRows
+  = lens _coSkipLeadingRows
+      (\ s a -> s{_coSkipLeadingRows = a})
+      . mapping _Coerce
+
+-- | [Optional] Indicates if BigQuery should accept rows that are missing
+-- trailing optional columns. If true, BigQuery treats missing trailing
+-- columns as null values. If false, records with missing trailing columns
+-- are treated as bad records, and if there are too many bad records, an
+-- invalid error is returned in the job result. The default value is false.
+coAllowJaggedRows :: Lens' CSVOptions (Maybe Bool)
+coAllowJaggedRows
+  = lens _coAllowJaggedRows
+      (\ s a -> s{_coAllowJaggedRows = a})
+
+-- | [Optional] Indicates if BigQuery should allow quoted data sections that
+-- contain newline characters in a CSV file. The default value is false.
+coAllowQuotedNewlines :: Lens' CSVOptions (Maybe Bool)
+coAllowQuotedNewlines
+  = lens _coAllowQuotedNewlines
+      (\ s a -> s{_coAllowQuotedNewlines = a})
+
+-- | [Optional] The value that is used to quote data sections in a CSV file.
+-- BigQuery converts the string to ISO-8859-1 encoding, and then uses the
+-- first byte of the encoded string to split the data in its raw, binary
+-- state. The default value is a double-quote (\'\"\'). If your data does
+-- not contain quoted sections, set the property value to an empty string.
+-- If your data contains quoted newline characters, you must also set the
+-- allowQuotedNewlines property to true.
+coQuote :: Lens' CSVOptions Text
+coQuote = lens _coQuote (\ s a -> s{_coQuote = a})
+
+-- | [Optional] The character encoding of the data. The supported values are
+-- UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the
+-- data after the raw, binary data has been split using the values of the
+-- quote and fieldDelimiter properties.
+coEncoding :: Lens' CSVOptions (Maybe Text)
+coEncoding
+  = lens _coEncoding (\ s a -> s{_coEncoding = a})
+
+-- | [Optional] The separator for fields in a CSV file. BigQuery converts the
+-- string to ISO-8859-1 encoding, and then uses the first byte of the
+-- encoded string to split the data in its raw, binary state. BigQuery also
+-- supports the escape sequence \"\\t\" to specify a tab separator. The
+-- default value is a comma (\',\').
+coFieldDelimiter :: Lens' CSVOptions (Maybe Text)
+coFieldDelimiter
+  = lens _coFieldDelimiter
+      (\ s a -> s{_coFieldDelimiter = a})
+
+instance FromJSON CSVOptions where
+        parseJSON
+          = withObject "CSVOptions"
+              (\ o ->
+                 CSVOptions' <$>
+                   (o .:? "skipLeadingRows") <*>
+                     (o .:? "allowJaggedRows")
+                     <*> (o .:? "allowQuotedNewlines")
+                     <*> (o .:? "quote" .!= "\"")
+                     <*> (o .:? "encoding")
+                     <*> (o .:? "fieldDelimiter"))
+
+instance ToJSON CSVOptions where
+        toJSON CSVOptions'{..}
+          = object
+              (catMaybes
+                 [("skipLeadingRows" .=) <$> _coSkipLeadingRows,
+                  ("allowJaggedRows" .=) <$> _coAllowJaggedRows,
+                  ("allowQuotedNewlines" .=) <$>
+                    _coAllowQuotedNewlines,
+                  Just ("quote" .= _coQuote),
+                  ("encoding" .=) <$> _coEncoding,
+                  ("fieldDelimiter" .=) <$> _coFieldDelimiter])
+
+--
+-- /See:/ 'jobStatistics3' smart constructor.
+data JobStatistics3 = JobStatistics3'
+    { _jsInputFiles     :: !(Maybe (Textual Int64))
+    , _jsOutputRows     :: !(Maybe (Textual Int64))
+    , _jsOutputBytes    :: !(Maybe (Textual Int64))
+    , _jsInputFileBytes :: !(Maybe (Textual Int64))
+    , _jsBadRecords     :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatistics3' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jsInputFiles'
+--
+-- * 'jsOutputRows'
+--
+-- * 'jsOutputBytes'
+--
+-- * 'jsInputFileBytes'
+--
+-- * 'jsBadRecords'
+jobStatistics3
+    :: JobStatistics3
+jobStatistics3 =
+    JobStatistics3'
+    { _jsInputFiles = Nothing
+    , _jsOutputRows = Nothing
+    , _jsOutputBytes = Nothing
+    , _jsInputFileBytes = Nothing
+    , _jsBadRecords = Nothing
+    }
+
+-- | [Output-only] Number of source files in a load job.
+jsInputFiles :: Lens' JobStatistics3 (Maybe Int64)
+jsInputFiles
+  = lens _jsInputFiles (\ s a -> s{_jsInputFiles = a})
+      . mapping _Coerce
+
+-- | [Output-only] Number of rows imported in a load job. Note that while an
+-- import job is in the running state, this value may change.
+jsOutputRows :: Lens' JobStatistics3 (Maybe Int64)
+jsOutputRows
+  = lens _jsOutputRows (\ s a -> s{_jsOutputRows = a})
+      . mapping _Coerce
+
+-- | [Output-only] Size of the loaded data in bytes. Note that while a load
+-- job is in the running state, this value may change.
+jsOutputBytes :: Lens' JobStatistics3 (Maybe Int64)
+jsOutputBytes
+  = lens _jsOutputBytes
+      (\ s a -> s{_jsOutputBytes = a})
+      . mapping _Coerce
+
+-- | [Output-only] Number of bytes of source data in a load job.
+jsInputFileBytes :: Lens' JobStatistics3 (Maybe Int64)
+jsInputFileBytes
+  = lens _jsInputFileBytes
+      (\ s a -> s{_jsInputFileBytes = a})
+      . mapping _Coerce
+
+-- | [Output-only] The number of bad records encountered. Note that if the
+-- job has failed because of more bad records encountered than the maximum
+-- allowed in the load job configuration, then this number can be less than
+-- the total number of bad records present in the input data.
+jsBadRecords :: Lens' JobStatistics3 (Maybe Int64)
+jsBadRecords
+  = lens _jsBadRecords (\ s a -> s{_jsBadRecords = a})
+      . mapping _Coerce
+
+instance FromJSON JobStatistics3 where
+        parseJSON
+          = withObject "JobStatistics3"
+              (\ o ->
+                 JobStatistics3' <$>
+                   (o .:? "inputFiles") <*> (o .:? "outputRows") <*>
+                     (o .:? "outputBytes")
+                     <*> (o .:? "inputFileBytes")
+                     <*> (o .:? "badRecords"))
+
+instance ToJSON JobStatistics3 where
+        toJSON JobStatistics3'{..}
+          = object
+              (catMaybes
+                 [("inputFiles" .=) <$> _jsInputFiles,
+                  ("outputRows" .=) <$> _jsOutputRows,
+                  ("outputBytes" .=) <$> _jsOutputBytes,
+                  ("inputFileBytes" .=) <$> _jsInputFileBytes,
+                  ("badRecords" .=) <$> _jsBadRecords])
+
+--
+-- /See:/ 'queryResponse' smart constructor.
+data QueryResponse = QueryResponse'
+    { _qJobReference        :: !(Maybe JobReference)
+    , _qKind                :: !Text
+    , _qSchema              :: !(Maybe TableSchema)
+    , _qTotalBytesProcessed :: !(Maybe (Textual Int64))
+    , _qRows                :: !(Maybe [TableRow])
+    , _qPageToken           :: !(Maybe Text)
+    , _qNumDmlAffectedRows  :: !(Maybe (Textual Int64))
+    , _qTotalRows           :: !(Maybe (Textual Word64))
+    , _qErrors              :: !(Maybe [ErrorProto])
+    , _qJobComplete         :: !(Maybe Bool)
+    , _qCacheHit            :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qJobReference'
+--
+-- * 'qKind'
+--
+-- * 'qSchema'
+--
+-- * 'qTotalBytesProcessed'
+--
+-- * 'qRows'
+--
+-- * 'qPageToken'
+--
+-- * 'qNumDmlAffectedRows'
+--
+-- * 'qTotalRows'
+--
+-- * 'qErrors'
+--
+-- * 'qJobComplete'
+--
+-- * 'qCacheHit'
+queryResponse
+    :: QueryResponse
+queryResponse =
+    QueryResponse'
+    { _qJobReference = Nothing
+    , _qKind = "bigquery#queryResponse"
+    , _qSchema = Nothing
+    , _qTotalBytesProcessed = Nothing
+    , _qRows = Nothing
+    , _qPageToken = Nothing
+    , _qNumDmlAffectedRows = Nothing
+    , _qTotalRows = Nothing
+    , _qErrors = Nothing
+    , _qJobComplete = Nothing
+    , _qCacheHit = Nothing
+    }
+
+-- | Reference to the Job that was created to run the query. This field will
+-- be present even if the original request timed out, in which case
+-- GetQueryResults can be used to read the results once the query has
+-- completed. Since this API only returns the first page of results,
+-- subsequent pages can be fetched via the same mechanism
+-- (GetQueryResults).
+qJobReference :: Lens' QueryResponse (Maybe JobReference)
+qJobReference
+  = lens _qJobReference
+      (\ s a -> s{_qJobReference = a})
+
+-- | The resource type.
+qKind :: Lens' QueryResponse Text
+qKind = lens _qKind (\ s a -> s{_qKind = a})
+
+-- | The schema of the results. Present only when the query completes
+-- successfully.
+qSchema :: Lens' QueryResponse (Maybe TableSchema)
+qSchema = lens _qSchema (\ s a -> s{_qSchema = a})
+
+-- | The total number of bytes processed for this query. If this query was a
+-- dry run, this is the number of bytes that would be processed if the
+-- query were run.
+qTotalBytesProcessed :: Lens' QueryResponse (Maybe Int64)
+qTotalBytesProcessed
+  = lens _qTotalBytesProcessed
+      (\ s a -> s{_qTotalBytesProcessed = a})
+      . mapping _Coerce
+
+-- | An object with as many results as can be contained within the maximum
+-- permitted reply size. To get any additional rows, you can call
+-- GetQueryResults and specify the jobReference returned above.
+qRows :: Lens' QueryResponse [TableRow]
+qRows
+  = lens _qRows (\ s a -> s{_qRows = a}) . _Default .
+      _Coerce
+
+-- | A token used for paging results.
+qPageToken :: Lens' QueryResponse (Maybe Text)
+qPageToken
+  = lens _qPageToken (\ s a -> s{_qPageToken = a})
+
+-- | [Output-only] The number of rows affected by a DML statement. Present
+-- only for DML statements INSERT, UPDATE or DELETE.
+qNumDmlAffectedRows :: Lens' QueryResponse (Maybe Int64)
+qNumDmlAffectedRows
+  = lens _qNumDmlAffectedRows
+      (\ s a -> s{_qNumDmlAffectedRows = a})
+      . mapping _Coerce
+
+-- | The total number of rows in the complete query result set, which can be
+-- more than the number of rows in this single page of results.
+qTotalRows :: Lens' QueryResponse (Maybe Word64)
+qTotalRows
+  = lens _qTotalRows (\ s a -> s{_qTotalRows = a}) .
+      mapping _Coerce
+
+-- | [Output-only] The first errors or warnings encountered during the
+-- running of the job. The final message includes the number of errors that
+-- caused the process to stop. Errors here do not necessarily mean that the
+-- job has completed or was unsuccessful.
+qErrors :: Lens' QueryResponse [ErrorProto]
+qErrors
+  = lens _qErrors (\ s a -> s{_qErrors = a}) . _Default
+      . _Coerce
+
+-- | Whether the query has completed or not. If rows or totalRows are
+-- present, this will always be true. If this is false, totalRows will not
+-- be available.
+qJobComplete :: Lens' QueryResponse (Maybe Bool)
+qJobComplete
+  = lens _qJobComplete (\ s a -> s{_qJobComplete = a})
+
+-- | Whether the query result was fetched from the query cache.
+qCacheHit :: Lens' QueryResponse (Maybe Bool)
+qCacheHit
+  = lens _qCacheHit (\ s a -> s{_qCacheHit = a})
+
+instance FromJSON QueryResponse where
+        parseJSON
+          = withObject "QueryResponse"
+              (\ o ->
+                 QueryResponse' <$>
+                   (o .:? "jobReference") <*>
+                     (o .:? "kind" .!= "bigquery#queryResponse")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "totalBytesProcessed")
+                     <*> (o .:? "rows" .!= mempty)
+                     <*> (o .:? "pageToken")
+                     <*> (o .:? "numDmlAffectedRows")
+                     <*> (o .:? "totalRows")
+                     <*> (o .:? "errors" .!= mempty)
+                     <*> (o .:? "jobComplete")
+                     <*> (o .:? "cacheHit"))
+
+instance ToJSON QueryResponse where
+        toJSON QueryResponse'{..}
+          = object
+              (catMaybes
+                 [("jobReference" .=) <$> _qJobReference,
+                  Just ("kind" .= _qKind), ("schema" .=) <$> _qSchema,
+                  ("totalBytesProcessed" .=) <$> _qTotalBytesProcessed,
+                  ("rows" .=) <$> _qRows,
+                  ("pageToken" .=) <$> _qPageToken,
+                  ("numDmlAffectedRows" .=) <$> _qNumDmlAffectedRows,
+                  ("totalRows" .=) <$> _qTotalRows,
+                  ("errors" .=) <$> _qErrors,
+                  ("jobComplete" .=) <$> _qJobComplete,
+                  ("cacheHit" .=) <$> _qCacheHit])
+
+-- | The labels associated with this dataset. You can use these to organize
+-- and group your datasets.
+--
+-- /See:/ 'dataSetListDataSetsItemLabels' smart constructor.
+newtype DataSetListDataSetsItemLabels = DataSetListDataSetsItemLabels'
+    { _dsldsilAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetListDataSetsItemLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsldsilAddtional'
+dataSetListDataSetsItemLabels
+    :: HashMap Text Text -- ^ 'dsldsilAddtional'
+    -> DataSetListDataSetsItemLabels
+dataSetListDataSetsItemLabels pDsldsilAddtional_ =
+    DataSetListDataSetsItemLabels'
+    { _dsldsilAddtional = _Coerce # pDsldsilAddtional_
+    }
+
+dsldsilAddtional :: Lens' DataSetListDataSetsItemLabels (HashMap Text Text)
+dsldsilAddtional
+  = lens _dsldsilAddtional
+      (\ s a -> s{_dsldsilAddtional = a})
+      . _Coerce
+
+instance FromJSON DataSetListDataSetsItemLabels where
+        parseJSON
+          = withObject "DataSetListDataSetsItemLabels"
+              (\ o ->
+                 DataSetListDataSetsItemLabels' <$>
+                   (parseJSONObject o))
+
+instance ToJSON DataSetListDataSetsItemLabels where
+        toJSON = toJSON . _dsldsilAddtional
+
+--
+-- /See:/ 'trainingRun' smart constructor.
+data TrainingRun = TrainingRun'
+    { _trState            :: !(Maybe Text)
+    , _trStartTime        :: !(Maybe DateTime')
+    , _trIterationResults :: !(Maybe [IterationResult])
+    , _trTrainingOptions  :: !(Maybe TrainingRunTrainingOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainingRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trState'
+--
+-- * 'trStartTime'
+--
+-- * 'trIterationResults'
+--
+-- * 'trTrainingOptions'
+trainingRun
+    :: TrainingRun
+trainingRun =
+    TrainingRun'
+    { _trState = Nothing
+    , _trStartTime = Nothing
+    , _trIterationResults = Nothing
+    , _trTrainingOptions = Nothing
+    }
+
+-- | [Output-only, Beta] Different state applicable for a training run. IN
+-- PROGRESS: Training run is in progress. FAILED: Training run ended due to
+-- a non-retryable failure. SUCCEEDED: Training run successfully completed.
+-- CANCELLED: Training run cancelled by the user.
+trState :: Lens' TrainingRun (Maybe Text)
+trState = lens _trState (\ s a -> s{_trState = a})
+
+-- | [Output-only, Beta] Training run start time in milliseconds since the
+-- epoch.
+trStartTime :: Lens' TrainingRun (Maybe UTCTime)
+trStartTime
+  = lens _trStartTime (\ s a -> s{_trStartTime = a}) .
+      mapping _DateTime
+
+-- | [Output-only, Beta] List of each iteration results.
+trIterationResults :: Lens' TrainingRun [IterationResult]
+trIterationResults
+  = lens _trIterationResults
+      (\ s a -> s{_trIterationResults = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only, Beta] Training options used by this training run. These
+-- options are mutable for subsequent training runs. Default values are
+-- explicitly stored for options not specified in the input query of the
+-- first training run. For subsequent training runs, any option not
+-- explicitly specified in the input query will be copied from the previous
+-- training run.
+trTrainingOptions :: Lens' TrainingRun (Maybe TrainingRunTrainingOptions)
+trTrainingOptions
+  = lens _trTrainingOptions
+      (\ s a -> s{_trTrainingOptions = a})
+
+instance FromJSON TrainingRun where
+        parseJSON
+          = withObject "TrainingRun"
+              (\ o ->
+                 TrainingRun' <$>
+                   (o .:? "state") <*> (o .:? "startTime") <*>
+                     (o .:? "iterationResults" .!= mempty)
+                     <*> (o .:? "trainingOptions"))
+
+instance ToJSON TrainingRun where
+        toJSON TrainingRun'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _trState,
+                  ("startTime" .=) <$> _trStartTime,
+                  ("iterationResults" .=) <$> _trIterationResults,
+                  ("trainingOptions" .=) <$> _trTrainingOptions])
+
+-- | Additional details for a view.
+--
+-- /See:/ 'tableListTablesItemView' smart constructor.
+newtype TableListTablesItemView = TableListTablesItemView'
+    { _tltivUseLegacySQL :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableListTablesItemView' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tltivUseLegacySQL'
+tableListTablesItemView
+    :: TableListTablesItemView
+tableListTablesItemView =
+    TableListTablesItemView'
+    { _tltivUseLegacySQL = Nothing
+    }
+
+-- | True if view is defined in legacy SQL dialect, false if in standard SQL.
+tltivUseLegacySQL :: Lens' TableListTablesItemView (Maybe Bool)
+tltivUseLegacySQL
+  = lens _tltivUseLegacySQL
+      (\ s a -> s{_tltivUseLegacySQL = a})
+
+instance FromJSON TableListTablesItemView where
+        parseJSON
+          = withObject "TableListTablesItemView"
+              (\ o ->
+                 TableListTablesItemView' <$> (o .:? "useLegacySql"))
+
+instance ToJSON TableListTablesItemView where
+        toJSON TableListTablesItemView'{..}
+          = object
+              (catMaybes
+                 [("useLegacySql" .=) <$> _tltivUseLegacySQL])
+
+-- | The labels associated with this table. You can use these to organize and
+-- group your tables.
 --
 -- /See:/ 'tableListTablesItemLabels' smart constructor.
 newtype TableListTablesItemLabels = TableListTablesItemLabels'
diff --git a/gen/Network/Google/BigQuery/Types/Sum.hs b/gen/Network/Google/BigQuery/Types/Sum.hs
--- a/gen/Network/Google/BigQuery/Types/Sum.hs
+++ b/gen/Network/Google/BigQuery/Types/Sum.hs
@@ -16,7 +16,7 @@
 --
 module Network.Google.BigQuery.Types.Sum where
 
-import           Network.Google.Prelude
+import           Network.Google.Prelude hiding (Bytes)
 
 -- | Restrict information returned to a set of selected fields
 data JobsListProjection
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs b/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs
--- a/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs
@@ -36,6 +36,7 @@
 
     -- * Request Lenses
     , jcJobId
+    , jcLocation
     , jcProjectId
     ) where
 
@@ -52,8 +53,9 @@
              "jobs" :>
                Capture "jobId" Text :>
                  "cancel" :>
-                   QueryParam "alt" AltJSON :>
-                     Post '[JSON] JobCancelResponse
+                   QueryParam "location" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Post '[JSON] JobCancelResponse
 
 -- | Requests that a job be cancelled. This call will return immediately, and
 -- the client will need to poll for the job status to see if the cancel
@@ -62,6 +64,7 @@
 -- /See:/ 'jobsCancel' smart constructor.
 data JobsCancel = JobsCancel'
     { _jcJobId     :: !Text
+    , _jcLocation  :: !(Maybe Text)
     , _jcProjectId :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -71,6 +74,8 @@
 --
 -- * 'jcJobId'
 --
+-- * 'jcLocation'
+--
 -- * 'jcProjectId'
 jobsCancel
     :: Text -- ^ 'jcJobId'
@@ -79,6 +84,7 @@
 jobsCancel pJcJobId_ pJcProjectId_ =
     JobsCancel'
     { _jcJobId = pJcJobId_
+    , _jcLocation = Nothing
     , _jcProjectId = pJcProjectId_
     }
 
@@ -86,6 +92,13 @@
 jcJobId :: Lens' JobsCancel Text
 jcJobId = lens _jcJobId (\ s a -> s{_jcJobId = a})
 
+-- | The geographic location of the job. Required except for US and EU. See
+-- details at
+-- https:\/\/cloud.google.com\/bigquery\/docs\/locations#specifying_your_location.
+jcLocation :: Lens' JobsCancel (Maybe Text)
+jcLocation
+  = lens _jcLocation (\ s a -> s{_jcLocation = a})
+
 -- | [Required] Project ID of the job to cancel
 jcProjectId :: Lens' JobsCancel Text
 jcProjectId
@@ -97,7 +110,7 @@
              '["https://www.googleapis.com/auth/bigquery",
                "https://www.googleapis.com/auth/cloud-platform"]
         requestClient JobsCancel'{..}
-          = go _jcProjectId _jcJobId (Just AltJSON)
+          = go _jcProjectId _jcJobId _jcLocation (Just AltJSON)
               bigQueryService
           where go
                   = buildClient (Proxy :: Proxy JobsCancelResource)
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs b/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs
--- a/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs
@@ -36,6 +36,7 @@
 
     -- * Request Lenses
     , jgJobId
+    , jgLocation
     , jgProjectId
     ) where
 
@@ -51,7 +52,8 @@
            Capture "projectId" Text :>
              "jobs" :>
                Capture "jobId" Text :>
-                 QueryParam "alt" AltJSON :> Get '[JSON] Job
+                 QueryParam "location" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Job
 
 -- | Returns information about a specific job. Job information is available
 -- for a six month period after creation. Requires that you\'re the person
@@ -60,6 +62,7 @@
 -- /See:/ 'jobsGet' smart constructor.
 data JobsGet = JobsGet'
     { _jgJobId     :: !Text
+    , _jgLocation  :: !(Maybe Text)
     , _jgProjectId :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -69,6 +72,8 @@
 --
 -- * 'jgJobId'
 --
+-- * 'jgLocation'
+--
 -- * 'jgProjectId'
 jobsGet
     :: Text -- ^ 'jgJobId'
@@ -77,6 +82,7 @@
 jobsGet pJgJobId_ pJgProjectId_ =
     JobsGet'
     { _jgJobId = pJgJobId_
+    , _jgLocation = Nothing
     , _jgProjectId = pJgProjectId_
     }
 
@@ -84,6 +90,13 @@
 jgJobId :: Lens' JobsGet Text
 jgJobId = lens _jgJobId (\ s a -> s{_jgJobId = a})
 
+-- | The geographic location of the job. Required except for US and EU. See
+-- details at
+-- https:\/\/cloud.google.com\/bigquery\/docs\/locations#specifying_your_location.
+jgLocation :: Lens' JobsGet (Maybe Text)
+jgLocation
+  = lens _jgLocation (\ s a -> s{_jgLocation = a})
+
 -- | [Required] Project ID of the requested job
 jgProjectId :: Lens' JobsGet Text
 jgProjectId
@@ -96,7 +109,7 @@
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/cloud-platform.read-only"]
         requestClient JobsGet'{..}
-          = go _jgProjectId _jgJobId (Just AltJSON)
+          = go _jgProjectId _jgJobId _jgLocation (Just AltJSON)
               bigQueryService
           where go
                   = buildClient (Proxy :: Proxy JobsGetResource) mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/GetQueryResults.hs b/gen/Network/Google/Resource/BigQuery/Jobs/GetQueryResults.hs
--- a/gen/Network/Google/Resource/BigQuery/Jobs/GetQueryResults.hs
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/GetQueryResults.hs
@@ -34,6 +34,7 @@
 
     -- * Request Lenses
     , jgqrJobId
+    , jgqrLocation
     , jgqrTimeoutMs
     , jgqrPageToken
     , jgqrProjectId
@@ -53,18 +54,20 @@
            Capture "projectId" Text :>
              "queries" :>
                Capture "jobId" Text :>
-                 QueryParam "timeoutMs" (Textual Word32) :>
-                   QueryParam "pageToken" Text :>
-                     QueryParam "startIndex" (Textual Word64) :>
-                       QueryParam "maxResults" (Textual Word32) :>
-                         QueryParam "alt" AltJSON :>
-                           Get '[JSON] GetQueryResultsResponse
+                 QueryParam "location" Text :>
+                   QueryParam "timeoutMs" (Textual Word32) :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "startIndex" (Textual Word64) :>
+                         QueryParam "maxResults" (Textual Word32) :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] GetQueryResultsResponse
 
 -- | Retrieves the results of a query job.
 --
 -- /See:/ 'jobsGetQueryResults' smart constructor.
 data JobsGetQueryResults = JobsGetQueryResults'
     { _jgqrJobId      :: !Text
+    , _jgqrLocation   :: !(Maybe Text)
     , _jgqrTimeoutMs  :: !(Maybe (Textual Word32))
     , _jgqrPageToken  :: !(Maybe Text)
     , _jgqrProjectId  :: !Text
@@ -78,6 +81,8 @@
 --
 -- * 'jgqrJobId'
 --
+-- * 'jgqrLocation'
+--
 -- * 'jgqrTimeoutMs'
 --
 -- * 'jgqrPageToken'
@@ -94,6 +99,7 @@
 jobsGetQueryResults pJgqrJobId_ pJgqrProjectId_ =
     JobsGetQueryResults'
     { _jgqrJobId = pJgqrJobId_
+    , _jgqrLocation = Nothing
     , _jgqrTimeoutMs = Nothing
     , _jgqrPageToken = Nothing
     , _jgqrProjectId = pJgqrProjectId_
@@ -106,6 +112,13 @@
 jgqrJobId
   = lens _jgqrJobId (\ s a -> s{_jgqrJobId = a})
 
+-- | The geographic location where the job should run. Required except for US
+-- and EU. See details at
+-- https:\/\/cloud.google.com\/bigquery\/docs\/locations#specifying_your_location.
+jgqrLocation :: Lens' JobsGetQueryResults (Maybe Text)
+jgqrLocation
+  = lens _jgqrLocation (\ s a -> s{_jgqrLocation = a})
+
 -- | How long to wait for the query to complete, in milliseconds, before
 -- returning. Default is 10 seconds. If the timeout passes before the job
 -- completes, the \'jobComplete\' field in the response will be false
@@ -149,7 +162,8 @@
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/cloud-platform.read-only"]
         requestClient JobsGetQueryResults'{..}
-          = go _jgqrProjectId _jgqrJobId _jgqrTimeoutMs
+          = go _jgqrProjectId _jgqrJobId _jgqrLocation
+              _jgqrTimeoutMs
               _jgqrPageToken
               _jgqrStartIndex
               _jgqrMaxResults
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/List.hs b/gen/Network/Google/Resource/BigQuery/Jobs/List.hs
--- a/gen/Network/Google/Resource/BigQuery/Jobs/List.hs
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/List.hs
@@ -37,6 +37,8 @@
     , JobsList
 
     -- * Request Lenses
+    , jlMaxCreationTime
+    , jlMinCreationTime
     , jlStateFilter
     , jlProjection
     , jlPageToken
@@ -56,12 +58,14 @@
          "projects" :>
            Capture "projectId" Text :>
              "jobs" :>
-               QueryParams "stateFilter" JobsListStateFilter :>
-                 QueryParam "projection" JobsListProjection :>
-                   QueryParam "pageToken" Text :>
-                     QueryParam "allUsers" Bool :>
-                       QueryParam "maxResults" (Textual Word32) :>
-                         QueryParam "alt" AltJSON :> Get '[JSON] JobList
+               QueryParam "maxCreationTime" (Textual Word64) :>
+                 QueryParam "minCreationTime" (Textual Word64) :>
+                   QueryParams "stateFilter" JobsListStateFilter :>
+                     QueryParam "projection" JobsListProjection :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "allUsers" Bool :>
+                           QueryParam "maxResults" (Textual Word32) :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] JobList
 
 -- | Lists all jobs that you started in the specified project. Job
 -- information is available for a six month period after creation. The job
@@ -71,18 +75,24 @@
 --
 -- /See:/ 'jobsList' smart constructor.
 data JobsList = JobsList'
-    { _jlStateFilter :: !(Maybe [JobsListStateFilter])
-    , _jlProjection  :: !(Maybe JobsListProjection)
-    , _jlPageToken   :: !(Maybe Text)
-    , _jlProjectId   :: !Text
-    , _jlAllUsers    :: !(Maybe Bool)
-    , _jlMaxResults  :: !(Maybe (Textual Word32))
+    { _jlMaxCreationTime :: !(Maybe (Textual Word64))
+    , _jlMinCreationTime :: !(Maybe (Textual Word64))
+    , _jlStateFilter     :: !(Maybe [JobsListStateFilter])
+    , _jlProjection      :: !(Maybe JobsListProjection)
+    , _jlPageToken       :: !(Maybe Text)
+    , _jlProjectId       :: !Text
+    , _jlAllUsers        :: !(Maybe Bool)
+    , _jlMaxResults      :: !(Maybe (Textual Word32))
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'JobsList' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'jlMaxCreationTime'
+--
+-- * 'jlMinCreationTime'
+--
 -- * 'jlStateFilter'
 --
 -- * 'jlProjection'
@@ -99,7 +109,9 @@
     -> JobsList
 jobsList pJlProjectId_ =
     JobsList'
-    { _jlStateFilter = Nothing
+    { _jlMaxCreationTime = Nothing
+    , _jlMinCreationTime = Nothing
+    , _jlStateFilter = Nothing
     , _jlProjection = Nothing
     , _jlPageToken = Nothing
     , _jlProjectId = pJlProjectId_
@@ -107,6 +119,22 @@
     , _jlMaxResults = Nothing
     }
 
+-- | Max value for job creation time, in milliseconds since the POSIX epoch.
+-- If set, only jobs created before or at this timestamp are returned
+jlMaxCreationTime :: Lens' JobsList (Maybe Word64)
+jlMaxCreationTime
+  = lens _jlMaxCreationTime
+      (\ s a -> s{_jlMaxCreationTime = a})
+      . mapping _Coerce
+
+-- | Min value for job creation time, in milliseconds since the POSIX epoch.
+-- If set, only jobs created after or at this timestamp are returned
+jlMinCreationTime :: Lens' JobsList (Maybe Word64)
+jlMinCreationTime
+  = lens _jlMinCreationTime
+      (\ s a -> s{_jlMinCreationTime = a})
+      . mapping _Coerce
+
 -- | Filter for job state
 jlStateFilter :: Lens' JobsList [JobsListStateFilter]
 jlStateFilter
@@ -149,7 +177,9 @@
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/cloud-platform.read-only"]
         requestClient JobsList'{..}
-          = go _jlProjectId (_jlStateFilter ^. _Default)
+          = go _jlProjectId _jlMaxCreationTime
+              _jlMinCreationTime
+              (_jlStateFilter ^. _Default)
               _jlProjection
               _jlPageToken
               _jlAllUsers
diff --git a/gen/Network/Google/Resource/BigQuery/Projects/GetServiceAccount.hs b/gen/Network/Google/Resource/BigQuery/Projects/GetServiceAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Projects/GetServiceAccount.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.BigQuery.Projects.GetServiceAccount
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the email address of the service account for your project used
+-- for interactions with Google Cloud KMS.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.projects.getServiceAccount@.
+module Network.Google.Resource.BigQuery.Projects.GetServiceAccount
+    (
+    -- * REST Resource
+      ProjectsGetServiceAccountResource
+
+    -- * Creating a Request
+    , projectsGetServiceAccount
+    , ProjectsGetServiceAccount
+
+    -- * Request Lenses
+    , pgsaProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.projects.getServiceAccount@ method which the
+-- 'ProjectsGetServiceAccount' request conforms to.
+type ProjectsGetServiceAccountResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "serviceAccount" :>
+               QueryParam "alt" AltJSON :>
+                 Get '[JSON] GetServiceAccountResponse
+
+-- | Returns the email address of the service account for your project used
+-- for interactions with Google Cloud KMS.
+--
+-- /See:/ 'projectsGetServiceAccount' smart constructor.
+newtype ProjectsGetServiceAccount = ProjectsGetServiceAccount'
+    { _pgsaProjectId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsGetServiceAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgsaProjectId'
+projectsGetServiceAccount
+    :: Text -- ^ 'pgsaProjectId'
+    -> ProjectsGetServiceAccount
+projectsGetServiceAccount pPgsaProjectId_ =
+    ProjectsGetServiceAccount'
+    { _pgsaProjectId = pPgsaProjectId_
+    }
+
+-- | Project ID for which the service account is requested.
+pgsaProjectId :: Lens' ProjectsGetServiceAccount Text
+pgsaProjectId
+  = lens _pgsaProjectId
+      (\ s a -> s{_pgsaProjectId = a})
+
+instance GoogleRequest ProjectsGetServiceAccount
+         where
+        type Rs ProjectsGetServiceAccount =
+             GetServiceAccountResponse
+        type Scopes ProjectsGetServiceAccount =
+             '["https://www.googleapis.com/auth/bigquery",
+               "https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/cloud-platform.read-only"]
+        requestClient ProjectsGetServiceAccount'{..}
+          = go _pgsaProjectId (Just AltJSON) bigQueryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsGetServiceAccountResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/TableData/List.hs b/gen/Network/Google/Resource/BigQuery/TableData/List.hs
--- a/gen/Network/Google/Resource/BigQuery/TableData/List.hs
+++ b/gen/Network/Google/Resource/BigQuery/TableData/List.hs
@@ -37,6 +37,7 @@
     , tDataSetId
     , tPageToken
     , tProjectId
+    , tSelectedFields
     , tTableId
     , tStartIndex
     , tMaxResults
@@ -58,22 +59,24 @@
                    Capture "tableId" Text :>
                      "data" :>
                        QueryParam "pageToken" Text :>
-                         QueryParam "startIndex" (Textual Word64) :>
-                           QueryParam "maxResults" (Textual Word32) :>
-                             QueryParam "alt" AltJSON :>
-                               Get '[JSON] TableDataList
+                         QueryParam "selectedFields" Text :>
+                           QueryParam "startIndex" (Textual Word64) :>
+                             QueryParam "maxResults" (Textual Word32) :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] TableDataList
 
 -- | Retrieves table data from a specified set of rows. Requires the READER
 -- dataset role.
 --
 -- /See:/ 'tableDataList'' smart constructor.
 data TableDataList' = TableDataList''
-    { _tDataSetId  :: !Text
-    , _tPageToken  :: !(Maybe Text)
-    , _tProjectId  :: !Text
-    , _tTableId    :: !Text
-    , _tStartIndex :: !(Maybe (Textual Word64))
-    , _tMaxResults :: !(Maybe (Textual Word32))
+    { _tDataSetId      :: !Text
+    , _tPageToken      :: !(Maybe Text)
+    , _tProjectId      :: !Text
+    , _tSelectedFields :: !(Maybe Text)
+    , _tTableId        :: !Text
+    , _tStartIndex     :: !(Maybe (Textual Word64))
+    , _tMaxResults     :: !(Maybe (Textual Word32))
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'TableDataList'' with the minimum fields required to make a request.
@@ -86,6 +89,8 @@
 --
 -- * 'tProjectId'
 --
+-- * 'tSelectedFields'
+--
 -- * 'tTableId'
 --
 -- * 'tStartIndex'
@@ -101,6 +106,7 @@
     { _tDataSetId = pTDataSetId_
     , _tPageToken = Nothing
     , _tProjectId = pTProjectId_
+    , _tSelectedFields = Nothing
     , _tTableId = pTTableId_
     , _tStartIndex = Nothing
     , _tMaxResults = Nothing
@@ -123,6 +129,13 @@
 tProjectId
   = lens _tProjectId (\ s a -> s{_tProjectId = a})
 
+-- | List of fields to return (comma-separated). If unspecified, all fields
+-- are returned
+tSelectedFields :: Lens' TableDataList' (Maybe Text)
+tSelectedFields
+  = lens _tSelectedFields
+      (\ s a -> s{_tSelectedFields = a})
+
 -- | Table ID of the table to read
 tTableId :: Lens' TableDataList' Text
 tTableId = lens _tTableId (\ s a -> s{_tTableId = a})
@@ -147,6 +160,7 @@
                "https://www.googleapis.com/auth/cloud-platform.read-only"]
         requestClient TableDataList''{..}
           = go _tProjectId _tDataSetId _tTableId _tPageToken
+              _tSelectedFields
               _tStartIndex
               _tMaxResults
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/Get.hs b/gen/Network/Google/Resource/BigQuery/Tables/Get.hs
--- a/gen/Network/Google/Resource/BigQuery/Tables/Get.hs
+++ b/gen/Network/Google/Resource/BigQuery/Tables/Get.hs
@@ -37,6 +37,7 @@
     -- * Request Lenses
     , tgDataSetId
     , tgProjectId
+    , tgSelectedFields
     , tgTableId
     ) where
 
@@ -54,7 +55,8 @@
                Capture "datasetId" Text :>
                  "tables" :>
                    Capture "tableId" Text :>
-                     QueryParam "alt" AltJSON :> Get '[JSON] Table
+                     QueryParam "selectedFields" Text :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Table
 
 -- | Gets the specified table resource by table ID. This method does not
 -- return the data in the table, it only returns the table resource, which
@@ -62,9 +64,10 @@
 --
 -- /See:/ 'tablesGet' smart constructor.
 data TablesGet = TablesGet'
-    { _tgDataSetId :: !Text
-    , _tgProjectId :: !Text
-    , _tgTableId   :: !Text
+    { _tgDataSetId      :: !Text
+    , _tgProjectId      :: !Text
+    , _tgSelectedFields :: !(Maybe Text)
+    , _tgTableId        :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'TablesGet' with the minimum fields required to make a request.
@@ -75,6 +78,8 @@
 --
 -- * 'tgProjectId'
 --
+-- * 'tgSelectedFields'
+--
 -- * 'tgTableId'
 tablesGet
     :: Text -- ^ 'tgDataSetId'
@@ -85,6 +90,7 @@
     TablesGet'
     { _tgDataSetId = pTgDataSetId_
     , _tgProjectId = pTgProjectId_
+    , _tgSelectedFields = Nothing
     , _tgTableId = pTgTableId_
     }
 
@@ -98,6 +104,13 @@
 tgProjectId
   = lens _tgProjectId (\ s a -> s{_tgProjectId = a})
 
+-- | List of fields to return (comma-separated). If unspecified, all fields
+-- are returned
+tgSelectedFields :: Lens' TablesGet (Maybe Text)
+tgSelectedFields
+  = lens _tgSelectedFields
+      (\ s a -> s{_tgSelectedFields = a})
+
 -- | Table ID of the requested table
 tgTableId :: Lens' TablesGet Text
 tgTableId
@@ -111,6 +124,7 @@
                "https://www.googleapis.com/auth/cloud-platform.read-only"]
         requestClient TablesGet'{..}
           = go _tgProjectId _tgDataSetId _tgTableId
+              _tgSelectedFields
               (Just AltJSON)
               bigQueryService
           where go
diff --git a/gogol-bigquery.cabal b/gogol-bigquery.cabal
--- a/gogol-bigquery.cabal
+++ b/gogol-bigquery.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-bigquery
-version:               0.3.0
+version:               0.4.0
 synopsis:              Google BigQuery SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -47,6 +47,7 @@
         , Network.Google.Resource.BigQuery.Jobs.Insert
         , Network.Google.Resource.BigQuery.Jobs.List
         , Network.Google.Resource.BigQuery.Jobs.Query
+        , Network.Google.Resource.BigQuery.Projects.GetServiceAccount
         , Network.Google.Resource.BigQuery.Projects.List
         , Network.Google.Resource.BigQuery.TableData.InsertAll
         , Network.Google.Resource.BigQuery.TableData.List
@@ -62,5 +63,5 @@
         , Network.Google.BigQuery.Types.Sum
 
     build-depends:
-          gogol-core == 0.3.0.*
+          gogol-core == 0.4.0.*
         , base       >= 4.7 && < 5
