diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-bigquery
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google BigQuery.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-bigquery` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/BigQuery.hs b/gen/Network/Google/BigQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/BigQuery.hs
@@ -0,0 +1,585 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.BigQuery
+-- Copyright   : (c) 2015 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)
+--
+-- A data platform for customers to create, manage, share and query data.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference>
+module Network.Google.BigQuery
+    (
+    -- * Service Configuration
+      bigQueryService
+
+    -- * API Declaration
+    , BigQueryAPI
+
+    -- * Resources
+
+    -- ** bigquery.datasets.delete
+    , module Network.Google.Resource.BigQuery.DataSets.Delete
+
+    -- ** bigquery.datasets.get
+    , module Network.Google.Resource.BigQuery.DataSets.Get
+
+    -- ** bigquery.datasets.insert
+    , module Network.Google.Resource.BigQuery.DataSets.Insert
+
+    -- ** bigquery.datasets.list
+    , module Network.Google.Resource.BigQuery.DataSets.List
+
+    -- ** bigquery.datasets.patch
+    , module Network.Google.Resource.BigQuery.DataSets.Patch
+
+    -- ** bigquery.datasets.update
+    , module Network.Google.Resource.BigQuery.DataSets.Update
+
+    -- ** bigquery.jobs.cancel
+    , module Network.Google.Resource.BigQuery.Jobs.Cancel
+
+    -- ** bigquery.jobs.get
+    , module Network.Google.Resource.BigQuery.Jobs.Get
+
+    -- ** bigquery.jobs.getQueryResults
+    , module Network.Google.Resource.BigQuery.Jobs.GetQueryResults
+
+    -- ** bigquery.jobs.insert
+    , module Network.Google.Resource.BigQuery.Jobs.Insert
+
+    -- ** bigquery.jobs.list
+    , module Network.Google.Resource.BigQuery.Jobs.List
+
+    -- ** bigquery.jobs.query
+    , module Network.Google.Resource.BigQuery.Jobs.Query
+
+    -- ** bigquery.projects.list
+    , module Network.Google.Resource.BigQuery.Projects.List
+
+    -- ** bigquery.tabledata.insertAll
+    , module Network.Google.Resource.BigQuery.TableData.InsertAll
+
+    -- ** bigquery.tabledata.list
+    , module Network.Google.Resource.BigQuery.TableData.List
+
+    -- ** bigquery.tables.delete
+    , module Network.Google.Resource.BigQuery.Tables.Delete
+
+    -- ** bigquery.tables.get
+    , module Network.Google.Resource.BigQuery.Tables.Get
+
+    -- ** bigquery.tables.insert
+    , module Network.Google.Resource.BigQuery.Tables.Insert
+
+    -- ** bigquery.tables.list
+    , module Network.Google.Resource.BigQuery.Tables.List
+
+    -- ** bigquery.tables.patch
+    , module Network.Google.Resource.BigQuery.Tables.Patch
+
+    -- ** bigquery.tables.update
+    , module Network.Google.Resource.BigQuery.Tables.Update
+
+    -- * Types
+
+    -- ** JobReference
+    , JobReference
+    , jobReference
+    , jrJobId
+    , jrProjectId
+
+    -- ** TableList
+    , TableList
+    , tableList
+    , tlTotalItems
+    , tlEtag
+    , tlNextPageToken
+    , tlKind
+    , tlTables
+
+    -- ** DataSetListDataSetsItem
+    , DataSetListDataSetsItem
+    , dataSetListDataSetsItem
+    , dsldsiFriendlyName
+    , dsldsiKind
+    , dsldsiDataSetReference
+    , dsldsiId
+
+    -- ** TableDataList
+    , TableDataList
+    , tableDataList
+    , tdlEtag
+    , tdlKind
+    , tdlRows
+    , tdlPageToken
+    , tdlTotalRows
+
+    -- ** JobConfigurationTableCopy
+    , JobConfigurationTableCopy
+    , jobConfigurationTableCopy
+    , jctcDestinationTable
+    , jctcWriteDisPosition
+    , jctcSourceTables
+    , jctcCreateDisPosition
+    , jctcSourceTable
+
+    -- ** TableListTablesItem
+    , TableListTablesItem
+    , tableListTablesItem
+    , tltiTableReference
+    , tltiFriendlyName
+    , tltiKind
+    , tltiId
+    , tltiType
+
+    -- ** TableSchema
+    , TableSchema
+    , tableSchema
+    , tsFields
+
+    -- ** ProjectList
+    , ProjectList
+    , projectList
+    , plTotalItems
+    , plEtag
+    , plNextPageToken
+    , plKind
+    , plProjects
+
+    -- ** JobStatistics
+    , JobStatistics
+    , jobStatistics
+    , jsCreationTime
+    , jsStartTime
+    , jsLoad
+    , jsTotalBytesProcessed
+    , jsEndTime
+    , jsQuery
+    , jsExtract
+
+    -- ** DataSet
+    , DataSet
+    , dataSet
+    , dsCreationTime
+    , dsAccess
+    , dsEtag
+    , dsLocation
+    , dsFriendlyName
+    , dsKind
+    , dsLastModifiedTime
+    , dsDataSetReference
+    , dsSelfLink
+    , dsId
+    , dsDefaultTableExpirationMs
+    , dsDescription
+
+    -- ** ExternalDataConfiguration
+    , ExternalDataConfiguration
+    , externalDataConfiguration
+    , edcIgnoreUnknownValues
+    , edcCompression
+    , edcSourceFormat
+    , edcSchema
+    , edcMaxBadRecords
+    , edcSourceURIs
+    , edcCSVOptions
+
+    -- ** TableReference
+    , TableReference
+    , tableReference
+    , trDataSetId
+    , trProjectId
+    , trTableId
+
+    -- ** TableFieldSchema
+    , TableFieldSchema
+    , tableFieldSchema
+    , tfsMode
+    , tfsName
+    , tfsType
+    , tfsDescription
+    , tfsFields
+
+    -- ** GetQueryResultsResponse
+    , GetQueryResultsResponse
+    , getQueryResultsResponse
+    , gqrrJobReference
+    , gqrrEtag
+    , gqrrKind
+    , gqrrSchema
+    , gqrrTotalBytesProcessed
+    , gqrrRows
+    , gqrrPageToken
+    , gqrrTotalRows
+    , gqrrErrors
+    , gqrrJobComplete
+    , gqrrCacheHit
+
+    -- ** DataSetList
+    , DataSetList
+    , dataSetList
+    , dslEtag
+    , dslNextPageToken
+    , dslKind
+    , dslDataSets
+
+    -- ** QueryRequest
+    , QueryRequest
+    , queryRequest
+    , qrUseQueryCache
+    , qrPreserveNulls
+    , qrKind
+    , qrQuery
+    , qrTimeoutMs
+    , qrDryRun
+    , qrMaxResults
+    , qrDefaultDataSet
+
+    -- ** JobsListProjection
+    , JobsListProjection (..)
+
+    -- ** JobStatistics4
+    , JobStatistics4
+    , jobStatistics4
+    , jsDestinationURIFileCounts
+
+    -- ** ProjectReference
+    , ProjectReference
+    , projectReference
+    , prProjectId
+
+    -- ** JobConfigurationLoad
+    , JobConfigurationLoad
+    , jobConfigurationLoad
+    , jclSkipLeadingRows
+    , jclProjectionFields
+    , jclDestinationTable
+    , jclWriteDisPosition
+    , jclAllowJaggedRows
+    , jclSchemaInline
+    , jclIgnoreUnknownValues
+    , jclCreateDisPosition
+    , jclSchemaInlineFormat
+    , jclAllowQuotedNewlines
+    , jclSourceFormat
+    , jclSchema
+    , jclQuote
+    , jclMaxBadRecords
+    , jclSourceURIs
+    , jclEncoding
+    , jclFieldDelimiter
+
+    -- ** JobsListStateFilter
+    , JobsListStateFilter (..)
+
+    -- ** DataSetReference
+    , DataSetReference
+    , dataSetReference
+    , dsrDataSetId
+    , dsrProjectId
+
+    -- ** TableDataInsertAllRequest
+    , TableDataInsertAllRequest
+    , tableDataInsertAllRequest
+    , tdiarKind
+    , tdiarIgnoreUnknownValues
+    , tdiarRows
+    , tdiarSkipInvalidRows
+
+    -- ** ProjectListProjectsItem
+    , ProjectListProjectsItem
+    , projectListProjectsItem
+    , plpiFriendlyName
+    , plpiKind
+    , plpiProjectReference
+    , plpiId
+    , plpiNumericId
+
+    -- ** Streamingbuffer
+    , Streamingbuffer
+    , streamingbuffer
+    , sEstimatedBytes
+    , sOldestEntryTime
+    , sEstimatedRows
+
+    -- ** TableRow
+    , TableRow
+    , tableRow
+    , trF
+
+    -- ** JobListJobsItem
+    , JobListJobsItem
+    , jobListJobsItem
+    , jljiJobReference
+    , jljiStatus
+    , jljiState
+    , jljiUserEmail
+    , jljiKind
+    , jljiErrorResult
+    , jljiId
+    , jljiStatistics
+    , jljiConfiguration
+
+    -- ** JobConfiguration
+    , JobConfiguration
+    , jobConfiguration
+    , jcCopy
+    , jcLink
+    , jcLoad
+    , jcQuery
+    , jcExtract
+    , jcDryRun
+
+    -- ** Job
+    , Job
+    , job
+    , jJobReference
+    , jStatus
+    , jEtag
+    , jUserEmail
+    , jKind
+    , jSelfLink
+    , jId
+    , jStatistics
+    , jConfiguration
+
+    -- ** JobConfigurationLink
+    , JobConfigurationLink
+    , jobConfigurationLink
+    , jDestinationTable
+    , jWriteDisPosition
+    , jCreateDisPosition
+    , jSourceURI
+
+    -- ** TableDataInsertAllResponseInsertErrorsItem
+    , TableDataInsertAllResponseInsertErrorsItem
+    , tableDataInsertAllResponseInsertErrorsItem
+    , tdiarieiErrors
+    , tdiarieiIndex
+
+    -- ** JobConfigurationExtract
+    , JobConfigurationExtract
+    , jobConfigurationExtract
+    , jceDestinationFormat
+    , jceSourceTable
+    , jcePrintHeader
+    , jceCompression
+    , jceDestinationURIs
+    , jceDestinationURI
+    , jceFieldDelimiter
+
+    -- ** JobCancelResponse
+    , JobCancelResponse
+    , jobCancelResponse
+    , jcrKind
+    , jcrJob
+
+    -- ** JSONObject
+    , JSONObject
+    , jsonObject
+    , joAddtional
+
+    -- ** JobConfigurationQuery
+    , JobConfigurationQuery
+    , jobConfigurationQuery
+    , jcqDestinationTable
+    , jcqWriteDisPosition
+    , jcqPriority
+    , jcqUseQueryCache
+    , jcqPreserveNulls
+    , jcqTableDefinitions
+    , jcqCreateDisPosition
+    , jcqUserDefinedFunctionResources
+    , jcqAllowLargeResults
+    , jcqQuery
+    , jcqFlattenResults
+    , jcqDefaultDataSet
+
+    -- ** TableDataInsertAllRequestRowsItem
+    , TableDataInsertAllRequestRowsItem
+    , tableDataInsertAllRequestRowsItem
+    , tdiarriJSON
+    , tdiarriInsertId
+
+    -- ** JobList
+    , JobList
+    , jobList
+    , jlEtag
+    , jlNextPageToken
+    , jlKind
+    , jlJobs
+
+    -- ** JobConfigurationQueryTableDefinitions
+    , JobConfigurationQueryTableDefinitions
+    , jobConfigurationQueryTableDefinitions
+    , jcqtdAddtional
+
+    -- ** TableCell
+    , TableCell
+    , tableCell
+    , tcV
+
+    -- ** ViewDefinition
+    , ViewDefinition
+    , viewDefinition
+    , vdQuery
+
+    -- ** UserDefinedFunctionResource
+    , UserDefinedFunctionResource
+    , userDefinedFunctionResource
+    , udfrResourceURI
+    , udfrInlineCode
+
+    -- ** JobStatistics2
+    , JobStatistics2
+    , jobStatistics2
+    , jTotalBytesProcessed
+    , jBillingTier
+    , jCacheHit
+    , jTotalBytesBilled
+
+    -- ** JobStatus
+    , JobStatus
+    , jobStatus
+    , jsState
+    , jsErrorResult
+    , jsErrors
+
+    -- ** DataSetAccessItem
+    , DataSetAccessItem
+    , dataSetAccessItem
+    , dsaiGroupByEmail
+    , dsaiDomain
+    , dsaiSpecialGroup
+    , dsaiRole
+    , dsaiView
+    , dsaiUserByEmail
+
+    -- ** TableDataInsertAllResponse
+    , TableDataInsertAllResponse
+    , tableDataInsertAllResponse
+    , tKind
+    , tInsertErrors
+
+    -- ** Table
+    , Table
+    , table
+    , tabCreationTime
+    , tabEtag
+    , tabNumBytes
+    , tabExternalDataConfiguration
+    , tabLocation
+    , tabTableReference
+    , tabFriendlyName
+    , tabKind
+    , tabLastModifiedTime
+    , tabSchema
+    , tabStreamingBuffer
+    , tabSelfLink
+    , tabNumRows
+    , tabView
+    , tabId
+    , tabType
+    , tabExpirationTime
+    , tabDescription
+
+    -- ** ErrorProto
+    , ErrorProto
+    , errorProto
+    , epDebugInfo
+    , epLocation
+    , epReason
+    , epMessage
+
+    -- ** CSVOptions
+    , CSVOptions
+    , csvOptions
+    , coSkipLeadingRows
+    , coAllowJaggedRows
+    , coAllowQuotedNewlines
+    , coQuote
+    , coEncoding
+    , coFieldDelimiter
+
+    -- ** JobStatistics3
+    , JobStatistics3
+    , jobStatistics3
+    , jsInputFiles
+    , jsOutputRows
+    , jsOutputBytes
+    , jsInputFileBytes
+
+    -- ** QueryResponse
+    , QueryResponse
+    , queryResponse
+    , qJobReference
+    , qKind
+    , qSchema
+    , qTotalBytesProcessed
+    , qRows
+    , qPageToken
+    , qTotalRows
+    , qErrors
+    , qJobComplete
+    , qCacheHit
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.BigQuery.DataSets.Delete
+import           Network.Google.Resource.BigQuery.DataSets.Get
+import           Network.Google.Resource.BigQuery.DataSets.Insert
+import           Network.Google.Resource.BigQuery.DataSets.List
+import           Network.Google.Resource.BigQuery.DataSets.Patch
+import           Network.Google.Resource.BigQuery.DataSets.Update
+import           Network.Google.Resource.BigQuery.Jobs.Cancel
+import           Network.Google.Resource.BigQuery.Jobs.Get
+import           Network.Google.Resource.BigQuery.Jobs.GetQueryResults
+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.List
+import           Network.Google.Resource.BigQuery.TableData.InsertAll
+import           Network.Google.Resource.BigQuery.TableData.List
+import           Network.Google.Resource.BigQuery.Tables.Delete
+import           Network.Google.Resource.BigQuery.Tables.Get
+import           Network.Google.Resource.BigQuery.Tables.Insert
+import           Network.Google.Resource.BigQuery.Tables.List
+import           Network.Google.Resource.BigQuery.Tables.Patch
+import           Network.Google.Resource.BigQuery.Tables.Update
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the BigQuery API service.
+type BigQueryAPI =
+     JobsInsertResource :<|> JobsListResource :<|>
+       JobsGetResource
+       :<|> JobsQueryResource
+       :<|> JobsCancelResource
+       :<|> JobsGetQueryResultsResource
+       :<|> TablesInsertResource
+       :<|> TablesListResource
+       :<|> TablesPatchResource
+       :<|> TablesGetResource
+       :<|> TablesDeleteResource
+       :<|> TablesUpdateResource
+       :<|> TableDataListResource
+       :<|> TableDataInsertAllResource
+       :<|> ProjectsListResource
+       :<|> DataSetsInsertResource
+       :<|> DataSetsListResource
+       :<|> DataSetsPatchResource
+       :<|> DataSetsGetResource
+       :<|> DataSetsDeleteResource
+       :<|> DataSetsUpdateResource
diff --git a/gen/Network/Google/BigQuery/Types.hs b/gen/Network/Google/BigQuery/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/BigQuery/Types.hs
@@ -0,0 +1,508 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.BigQuery.Types
+-- Copyright   : (c) 2015 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)
+--
+module Network.Google.BigQuery.Types
+    (
+    -- * Service Configuration
+      bigQueryService
+
+    -- * OAuth Scopes
+    , cloudPlatformReadOnlyScope
+    , cloudPlatformScope
+    , devstorageReadOnlyScope
+    , bigqueryInsertdataScope
+    , devstorageReadWriteScope
+    , bigqueryScope
+    , devstorageFullControlScope
+
+    -- * JobReference
+    , JobReference
+    , jobReference
+    , jrJobId
+    , jrProjectId
+
+    -- * TableList
+    , TableList
+    , tableList
+    , tlTotalItems
+    , tlEtag
+    , tlNextPageToken
+    , tlKind
+    , tlTables
+
+    -- * DataSetListDataSetsItem
+    , DataSetListDataSetsItem
+    , dataSetListDataSetsItem
+    , dsldsiFriendlyName
+    , dsldsiKind
+    , dsldsiDataSetReference
+    , dsldsiId
+
+    -- * TableDataList
+    , TableDataList
+    , tableDataList
+    , tdlEtag
+    , tdlKind
+    , tdlRows
+    , tdlPageToken
+    , tdlTotalRows
+
+    -- * JobConfigurationTableCopy
+    , JobConfigurationTableCopy
+    , jobConfigurationTableCopy
+    , jctcDestinationTable
+    , jctcWriteDisPosition
+    , jctcSourceTables
+    , jctcCreateDisPosition
+    , jctcSourceTable
+
+    -- * TableListTablesItem
+    , TableListTablesItem
+    , tableListTablesItem
+    , tltiTableReference
+    , tltiFriendlyName
+    , tltiKind
+    , tltiId
+    , tltiType
+
+    -- * TableSchema
+    , TableSchema
+    , tableSchema
+    , tsFields
+
+    -- * ProjectList
+    , ProjectList
+    , projectList
+    , plTotalItems
+    , plEtag
+    , plNextPageToken
+    , plKind
+    , plProjects
+
+    -- * JobStatistics
+    , JobStatistics
+    , jobStatistics
+    , jsCreationTime
+    , jsStartTime
+    , jsLoad
+    , jsTotalBytesProcessed
+    , jsEndTime
+    , jsQuery
+    , jsExtract
+
+    -- * DataSet
+    , DataSet
+    , dataSet
+    , dsCreationTime
+    , dsAccess
+    , dsEtag
+    , dsLocation
+    , dsFriendlyName
+    , dsKind
+    , dsLastModifiedTime
+    , dsDataSetReference
+    , dsSelfLink
+    , dsId
+    , dsDefaultTableExpirationMs
+    , dsDescription
+
+    -- * ExternalDataConfiguration
+    , ExternalDataConfiguration
+    , externalDataConfiguration
+    , edcIgnoreUnknownValues
+    , edcCompression
+    , edcSourceFormat
+    , edcSchema
+    , edcMaxBadRecords
+    , edcSourceURIs
+    , edcCSVOptions
+
+    -- * TableReference
+    , TableReference
+    , tableReference
+    , trDataSetId
+    , trProjectId
+    , trTableId
+
+    -- * TableFieldSchema
+    , TableFieldSchema
+    , tableFieldSchema
+    , tfsMode
+    , tfsName
+    , tfsType
+    , tfsDescription
+    , tfsFields
+
+    -- * GetQueryResultsResponse
+    , GetQueryResultsResponse
+    , getQueryResultsResponse
+    , gqrrJobReference
+    , gqrrEtag
+    , gqrrKind
+    , gqrrSchema
+    , gqrrTotalBytesProcessed
+    , gqrrRows
+    , gqrrPageToken
+    , gqrrTotalRows
+    , gqrrErrors
+    , gqrrJobComplete
+    , gqrrCacheHit
+
+    -- * DataSetList
+    , DataSetList
+    , dataSetList
+    , dslEtag
+    , dslNextPageToken
+    , dslKind
+    , dslDataSets
+
+    -- * QueryRequest
+    , QueryRequest
+    , queryRequest
+    , qrUseQueryCache
+    , qrPreserveNulls
+    , qrKind
+    , qrQuery
+    , qrTimeoutMs
+    , qrDryRun
+    , qrMaxResults
+    , qrDefaultDataSet
+
+    -- * JobsListProjection
+    , JobsListProjection (..)
+
+    -- * JobStatistics4
+    , JobStatistics4
+    , jobStatistics4
+    , jsDestinationURIFileCounts
+
+    -- * ProjectReference
+    , ProjectReference
+    , projectReference
+    , prProjectId
+
+    -- * JobConfigurationLoad
+    , JobConfigurationLoad
+    , jobConfigurationLoad
+    , jclSkipLeadingRows
+    , jclProjectionFields
+    , jclDestinationTable
+    , jclWriteDisPosition
+    , jclAllowJaggedRows
+    , jclSchemaInline
+    , jclIgnoreUnknownValues
+    , jclCreateDisPosition
+    , jclSchemaInlineFormat
+    , jclAllowQuotedNewlines
+    , jclSourceFormat
+    , jclSchema
+    , jclQuote
+    , jclMaxBadRecords
+    , jclSourceURIs
+    , jclEncoding
+    , jclFieldDelimiter
+
+    -- * JobsListStateFilter
+    , JobsListStateFilter (..)
+
+    -- * DataSetReference
+    , DataSetReference
+    , dataSetReference
+    , dsrDataSetId
+    , dsrProjectId
+
+    -- * TableDataInsertAllRequest
+    , TableDataInsertAllRequest
+    , tableDataInsertAllRequest
+    , tdiarKind
+    , tdiarIgnoreUnknownValues
+    , tdiarRows
+    , tdiarSkipInvalidRows
+
+    -- * ProjectListProjectsItem
+    , ProjectListProjectsItem
+    , projectListProjectsItem
+    , plpiFriendlyName
+    , plpiKind
+    , plpiProjectReference
+    , plpiId
+    , plpiNumericId
+
+    -- * Streamingbuffer
+    , Streamingbuffer
+    , streamingbuffer
+    , sEstimatedBytes
+    , sOldestEntryTime
+    , sEstimatedRows
+
+    -- * TableRow
+    , TableRow
+    , tableRow
+    , trF
+
+    -- * JobListJobsItem
+    , JobListJobsItem
+    , jobListJobsItem
+    , jljiJobReference
+    , jljiStatus
+    , jljiState
+    , jljiUserEmail
+    , jljiKind
+    , jljiErrorResult
+    , jljiId
+    , jljiStatistics
+    , jljiConfiguration
+
+    -- * JobConfiguration
+    , JobConfiguration
+    , jobConfiguration
+    , jcCopy
+    , jcLink
+    , jcLoad
+    , jcQuery
+    , jcExtract
+    , jcDryRun
+
+    -- * Job
+    , Job
+    , job
+    , jJobReference
+    , jStatus
+    , jEtag
+    , jUserEmail
+    , jKind
+    , jSelfLink
+    , jId
+    , jStatistics
+    , jConfiguration
+
+    -- * JobConfigurationLink
+    , JobConfigurationLink
+    , jobConfigurationLink
+    , jDestinationTable
+    , jWriteDisPosition
+    , jCreateDisPosition
+    , jSourceURI
+
+    -- * TableDataInsertAllResponseInsertErrorsItem
+    , TableDataInsertAllResponseInsertErrorsItem
+    , tableDataInsertAllResponseInsertErrorsItem
+    , tdiarieiErrors
+    , tdiarieiIndex
+
+    -- * JobConfigurationExtract
+    , JobConfigurationExtract
+    , jobConfigurationExtract
+    , jceDestinationFormat
+    , jceSourceTable
+    , jcePrintHeader
+    , jceCompression
+    , jceDestinationURIs
+    , jceDestinationURI
+    , jceFieldDelimiter
+
+    -- * JobCancelResponse
+    , JobCancelResponse
+    , jobCancelResponse
+    , jcrKind
+    , jcrJob
+
+    -- * JSONObject
+    , JSONObject
+    , jsonObject
+    , joAddtional
+
+    -- * JobConfigurationQuery
+    , JobConfigurationQuery
+    , jobConfigurationQuery
+    , jcqDestinationTable
+    , jcqWriteDisPosition
+    , jcqPriority
+    , jcqUseQueryCache
+    , jcqPreserveNulls
+    , jcqTableDefinitions
+    , jcqCreateDisPosition
+    , jcqUserDefinedFunctionResources
+    , jcqAllowLargeResults
+    , jcqQuery
+    , jcqFlattenResults
+    , jcqDefaultDataSet
+
+    -- * TableDataInsertAllRequestRowsItem
+    , TableDataInsertAllRequestRowsItem
+    , tableDataInsertAllRequestRowsItem
+    , tdiarriJSON
+    , tdiarriInsertId
+
+    -- * JobList
+    , JobList
+    , jobList
+    , jlEtag
+    , jlNextPageToken
+    , jlKind
+    , jlJobs
+
+    -- * JobConfigurationQueryTableDefinitions
+    , JobConfigurationQueryTableDefinitions
+    , jobConfigurationQueryTableDefinitions
+    , jcqtdAddtional
+
+    -- * TableCell
+    , TableCell
+    , tableCell
+    , tcV
+
+    -- * ViewDefinition
+    , ViewDefinition
+    , viewDefinition
+    , vdQuery
+
+    -- * UserDefinedFunctionResource
+    , UserDefinedFunctionResource
+    , userDefinedFunctionResource
+    , udfrResourceURI
+    , udfrInlineCode
+
+    -- * JobStatistics2
+    , JobStatistics2
+    , jobStatistics2
+    , jTotalBytesProcessed
+    , jBillingTier
+    , jCacheHit
+    , jTotalBytesBilled
+
+    -- * JobStatus
+    , JobStatus
+    , jobStatus
+    , jsState
+    , jsErrorResult
+    , jsErrors
+
+    -- * DataSetAccessItem
+    , DataSetAccessItem
+    , dataSetAccessItem
+    , dsaiGroupByEmail
+    , dsaiDomain
+    , dsaiSpecialGroup
+    , dsaiRole
+    , dsaiView
+    , dsaiUserByEmail
+
+    -- * TableDataInsertAllResponse
+    , TableDataInsertAllResponse
+    , tableDataInsertAllResponse
+    , tKind
+    , tInsertErrors
+
+    -- * Table
+    , Table
+    , table
+    , tabCreationTime
+    , tabEtag
+    , tabNumBytes
+    , tabExternalDataConfiguration
+    , tabLocation
+    , tabTableReference
+    , tabFriendlyName
+    , tabKind
+    , tabLastModifiedTime
+    , tabSchema
+    , tabStreamingBuffer
+    , tabSelfLink
+    , tabNumRows
+    , tabView
+    , tabId
+    , tabType
+    , tabExpirationTime
+    , tabDescription
+
+    -- * ErrorProto
+    , ErrorProto
+    , errorProto
+    , epDebugInfo
+    , epLocation
+    , epReason
+    , epMessage
+
+    -- * CSVOptions
+    , CSVOptions
+    , csvOptions
+    , coSkipLeadingRows
+    , coAllowJaggedRows
+    , coAllowQuotedNewlines
+    , coQuote
+    , coEncoding
+    , coFieldDelimiter
+
+    -- * JobStatistics3
+    , JobStatistics3
+    , jobStatistics3
+    , jsInputFiles
+    , jsOutputRows
+    , jsOutputBytes
+    , jsInputFileBytes
+
+    -- * QueryResponse
+    , QueryResponse
+    , queryResponse
+    , qJobReference
+    , qKind
+    , qSchema
+    , qTotalBytesProcessed
+    , qRows
+    , qPageToken
+    , qTotalRows
+    , qErrors
+    , qJobComplete
+    , qCacheHit
+    ) where
+
+import           Network.Google.BigQuery.Types.Product
+import           Network.Google.BigQuery.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v2' of the BigQuery API. This contains the host and root path used as a starting point for constructing service requests.
+bigQueryService :: Service
+bigQueryService
+  = defaultService (ServiceId "bigquery:v2")
+      "www.googleapis.com"
+
+-- | View your data across Google Cloud Platform services
+cloudPlatformReadOnlyScope :: OAuthScope
+cloudPlatformReadOnlyScope = "https://www.googleapis.com/auth/cloud-platform.read-only";
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: OAuthScope
+cloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+
+-- | View your data in Google Cloud Storage
+devstorageReadOnlyScope :: OAuthScope
+devstorageReadOnlyScope = "https://www.googleapis.com/auth/devstorage.read_only";
+
+-- | Insert data into Google BigQuery
+bigqueryInsertdataScope :: OAuthScope
+bigqueryInsertdataScope = "https://www.googleapis.com/auth/bigquery.insertdata";
+
+-- | Manage your data in Google Cloud Storage
+devstorageReadWriteScope :: OAuthScope
+devstorageReadWriteScope = "https://www.googleapis.com/auth/devstorage.read_write";
+
+-- | View and manage your data in Google BigQuery
+bigqueryScope :: OAuthScope
+bigqueryScope = "https://www.googleapis.com/auth/bigquery";
+
+-- | Manage your data and permissions in Google Cloud Storage
+devstorageFullControlScope :: OAuthScope
+devstorageFullControlScope = "https://www.googleapis.com/auth/devstorage.full_control";
diff --git a/gen/Network/Google/BigQuery/Types/Product.hs b/gen/Network/Google/BigQuery/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/BigQuery/Types/Product.hs
@@ -0,0 +1,4298 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.BigQuery.Types.Product
+-- Copyright   : (c) 2015 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)
+--
+module Network.Google.BigQuery.Types.Product where
+
+import           Network.Google.BigQuery.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /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)
+    } 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'
+dataSetListDataSetsItem
+    :: DataSetListDataSetsItem
+dataSetListDataSetsItem =
+    DataSetListDataSetsItem
+    { _dsldsiFriendlyName = Nothing
+    , _dsldsiKind = "bigquery#dataset"
+    , _dsldsiDataSetReference = Nothing
+    , _dsldsiId = 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})
+
+instance FromJSON DataSetListDataSetsItem where
+        parseJSON
+          = withObject "DataSetListDataSetsItem"
+              (\ o ->
+                 DataSetListDataSetsItem <$>
+                   (o .:? "friendlyName") <*>
+                     (o .:? "kind" .!= "bigquery#dataset")
+                     <*> (o .:? "datasetReference")
+                     <*> (o .:? "id"))
+
+instance ToJSON DataSetListDataSetsItem where
+        toJSON DataSetListDataSetsItem{..}
+          = object
+              (catMaybes
+                 [("friendlyName" .=) <$> _dsldsiFriendlyName,
+                  Just ("kind" .= _dsldsiKind),
+                  ("datasetReference" .=) <$> _dsldsiDataSetReference,
+                  ("id" .=) <$> _dsldsiId])
+
+--
+-- /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)
+    , _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'
+--
+-- * 'tltiType'
+tableListTablesItem
+    :: TableListTablesItem
+tableListTablesItem =
+    TableListTablesItem
+    { _tltiTableReference = Nothing
+    , _tltiFriendlyName = Nothing
+    , _tltiKind = "bigquery#table"
+    , _tltiId = 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})
+
+-- | 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 .:? "type"))
+
+instance ToJSON TableListTablesItem where
+        toJSON TableListTablesItem{..}
+          = object
+              (catMaybes
+                 [("tableReference" .=) <$> _tltiTableReference,
+                  ("friendlyName" .=) <$> _tltiFriendlyName,
+                  Just ("kind" .= _tltiKind), ("id" .=) <$> _tltiId,
+                  ("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:/ '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])
+
+--
+-- /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)
+    , _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'
+--
+-- * '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
+    , _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 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 .:? "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,
+                  ("defaultTableExpirationMs" .=) <$>
+                    _dsDefaultTableExpirationMs,
+                  ("description" .=) <$> _dsDescription])
+
+--
+-- /See:/ 'externalDataConfiguration' smart constructor.
+data ExternalDataConfiguration = ExternalDataConfiguration
+    { _edcIgnoreUnknownValues :: !(Maybe Bool)
+    , _edcCompression         :: !(Maybe Text)
+    , _edcSourceFormat        :: !(Maybe Text)
+    , _edcSchema              :: !(Maybe TableSchema)
+    , _edcMaxBadRecords       :: !(Maybe (Textual Int32))
+    , _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:
+--
+-- * 'edcIgnoreUnknownValues'
+--
+-- * 'edcCompression'
+--
+-- * 'edcSourceFormat'
+--
+-- * 'edcSchema'
+--
+-- * 'edcMaxBadRecords'
+--
+-- * 'edcSourceURIs'
+--
+-- * 'edcCSVOptions'
+externalDataConfiguration
+    :: ExternalDataConfiguration
+externalDataConfiguration =
+    ExternalDataConfiguration
+    { _edcIgnoreUnknownValues = Nothing
+    , _edcCompression = Nothing
+    , _edcSourceFormat = Nothing
+    , _edcSchema = Nothing
+    , _edcMaxBadRecords = Nothing
+    , _edcSourceURIs = Nothing
+    , _edcCSVOptions = Nothing
+    }
+
+-- | [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
+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.
+edcCompression :: Lens' ExternalDataConfiguration (Maybe Text)
+edcCompression
+  = lens _edcCompression
+      (\ s a -> s{_edcCompression = a})
+
+-- | [Required] The data format. For CSV files, specify \"CSV\". For
+-- newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\".
+edcSourceFormat :: Lens' ExternalDataConfiguration (Maybe Text)
+edcSourceFormat
+  = lens _edcSourceFormat
+      (\ s a -> s{_edcSourceFormat = a})
+
+-- | [Required] The schema for the data.
+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.
+edcMaxBadRecords :: Lens' ExternalDataConfiguration (Maybe Int32)
+edcMaxBadRecords
+  = lens _edcMaxBadRecords
+      (\ s a -> s{_edcMaxBadRecords = a})
+      . mapping _Coerce
+
+-- | [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. Size limits related to load jobs
+-- apply to external data sources, plus an additional limit of 10 GB
+-- maximum size across all URIs.
+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 .:? "ignoreUnknownValues") <*>
+                     (o .:? "compression")
+                     <*> (o .:? "sourceFormat")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "maxBadRecords")
+                     <*> (o .:? "sourceUris" .!= mempty)
+                     <*> (o .:? "csvOptions"))
+
+instance ToJSON ExternalDataConfiguration where
+        toJSON ExternalDataConfiguration{..}
+          = object
+              (catMaybes
+                 [("ignoreUnknownValues" .=) <$>
+                    _edcIgnoreUnknownValues,
+                  ("compression" .=) <$> _edcCompression,
+                  ("sourceFormat" .=) <$> _edcSourceFormat,
+                  ("schema" .=) <$> _edcSchema,
+                  ("maxBadRecords" .=) <$> _edcMaxBadRecords,
+                  ("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, INTEGER,
+-- FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the
+-- field contains a nested schema).
+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)
+    , _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'
+--
+-- * 'gqrrTotalRows'
+--
+-- * 'gqrrErrors'
+--
+-- * 'gqrrJobComplete'
+--
+-- * 'gqrrCacheHit'
+getQueryResultsResponse
+    :: GetQueryResultsResponse
+getQueryResultsResponse =
+    GetQueryResultsResponse
+    { _gqrrJobReference = Nothing
+    , _gqrrEtag = Nothing
+    , _gqrrKind = "bigquery#getQueryResultsResponse"
+    , _gqrrSchema = Nothing
+    , _gqrrTotalBytesProcessed = Nothing
+    , _gqrrRows = Nothing
+    , _gqrrPageToken = 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})
+
+-- | 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 .:? "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,
+                  ("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
+    , _qrQuery          :: !(Maybe Text)
+    , _qrTimeoutMs      :: !(Maybe (Textual Word32))
+    , _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'
+--
+-- * 'qrQuery'
+--
+-- * 'qrTimeoutMs'
+--
+-- * 'qrDryRun'
+--
+-- * 'qrMaxResults'
+--
+-- * 'qrDefaultDataSet'
+queryRequest
+    :: QueryRequest
+queryRequest =
+    QueryRequest
+    { _qrUseQueryCache = True
+    , _qrPreserveNulls = Nothing
+    , _qrKind = "bigquery#queryRequest"
+    , _qrQuery = Nothing
+    , _qrTimeoutMs = Nothing
+    , _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})
+
+-- | [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})
+
+-- | [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
+
+-- | [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 .:? "query")
+                     <*> (o .:? "timeoutMs")
+                     <*> (o .:? "dryRun")
+                     <*> (o .:? "maxResults")
+                     <*> (o .:? "defaultDataset"))
+
+instance ToJSON QueryRequest where
+        toJSON QueryRequest{..}
+          = object
+              (catMaybes
+                 [Just ("useQueryCache" .= _qrUseQueryCache),
+                  ("preserveNulls" .=) <$> _qrPreserveNulls,
+                  Just ("kind" .= _qrKind), ("query" .=) <$> _qrQuery,
+                  ("timeoutMs" .=) <$> _qrTimeoutMs,
+                  ("dryRun" .=) <$> _qrDryRun,
+                  ("maxResults" .=) <$> _qrMaxResults,
+                  ("defaultDataset" .=) <$> _qrDefaultDataSet])
+
+--
+-- /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:/ '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)
+    , _jclCreateDisPosition   :: !(Maybe Text)
+    , _jclSchemaInlineFormat  :: !(Maybe Text)
+    , _jclAllowQuotedNewlines :: !(Maybe Bool)
+    , _jclSourceFormat        :: !(Maybe Text)
+    , _jclSchema              :: !(Maybe TableSchema)
+    , _jclQuote               :: !Text
+    , _jclMaxBadRecords       :: !(Maybe (Textual Int32))
+    , _jclSourceURIs          :: !(Maybe [Text])
+    , _jclEncoding            :: !(Maybe Text)
+    , _jclFieldDelimiter      :: !(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'
+--
+-- * 'jclCreateDisPosition'
+--
+-- * 'jclSchemaInlineFormat'
+--
+-- * 'jclAllowQuotedNewlines'
+--
+-- * 'jclSourceFormat'
+--
+-- * 'jclSchema'
+--
+-- * 'jclQuote'
+--
+-- * 'jclMaxBadRecords'
+--
+-- * 'jclSourceURIs'
+--
+-- * 'jclEncoding'
+--
+-- * 'jclFieldDelimiter'
+jobConfigurationLoad
+    :: JobConfigurationLoad
+jobConfigurationLoad =
+    JobConfigurationLoad
+    { _jclSkipLeadingRows = Nothing
+    , _jclProjectionFields = Nothing
+    , _jclDestinationTable = Nothing
+    , _jclWriteDisPosition = Nothing
+    , _jclAllowJaggedRows = Nothing
+    , _jclSchemaInline = Nothing
+    , _jclIgnoreUnknownValues = Nothing
+    , _jclCreateDisPosition = Nothing
+    , _jclSchemaInlineFormat = Nothing
+    , _jclAllowQuotedNewlines = Nothing
+    , _jclSourceFormat = Nothing
+    , _jclSchema = Nothing
+    , _jclQuote = "\""
+    , _jclMaxBadRecords = Nothing
+    , _jclSourceURIs = Nothing
+    , _jclEncoding = Nothing
+    , _jclFieldDelimiter = 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})
+
+-- | [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\". 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 the schema can be
+-- inferred from the loaded data.
+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 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
+
+-- | [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. 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})
+
+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 .:? "createDisposition")
+                     <*> (o .:? "schemaInlineFormat")
+                     <*> (o .:? "allowQuotedNewlines")
+                     <*> (o .:? "sourceFormat")
+                     <*> (o .:? "schema")
+                     <*> (o .:? "quote" .!= "\"")
+                     <*> (o .:? "maxBadRecords")
+                     <*> (o .:? "sourceUris" .!= mempty)
+                     <*> (o .:? "encoding")
+                     <*> (o .:? "fieldDelimiter"))
+
+instance ToJSON JobConfigurationLoad where
+        toJSON JobConfigurationLoad{..}
+          = object
+              (catMaybes
+                 [("skipLeadingRows" .=) <$> _jclSkipLeadingRows,
+                  ("projectionFields" .=) <$> _jclProjectionFields,
+                  ("destinationTable" .=) <$> _jclDestinationTable,
+                  ("writeDisposition" .=) <$> _jclWriteDisPosition,
+                  ("allowJaggedRows" .=) <$> _jclAllowJaggedRows,
+                  ("schemaInline" .=) <$> _jclSchemaInline,
+                  ("ignoreUnknownValues" .=) <$>
+                    _jclIgnoreUnknownValues,
+                  ("createDisposition" .=) <$> _jclCreateDisPosition,
+                  ("schemaInlineFormat" .=) <$> _jclSchemaInlineFormat,
+                  ("allowQuotedNewlines" .=) <$>
+                    _jclAllowQuotedNewlines,
+                  ("sourceFormat" .=) <$> _jclSourceFormat,
+                  ("schema" .=) <$> _jclSchema,
+                  Just ("quote" .= _jclQuote),
+                  ("maxBadRecords" .=) <$> _jclMaxBadRecords,
+                  ("sourceUris" .=) <$> _jclSourceURIs,
+                  ("encoding" .=) <$> _jclEncoding,
+                  ("fieldDelimiter" .=) <$> _jclFieldDelimiter])
+
+--
+-- /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])
+    , _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'
+--
+-- * 'tdiarSkipInvalidRows'
+tableDataInsertAllRequest
+    :: TableDataInsertAllRequest
+tableDataInsertAllRequest =
+    TableDataInsertAllRequest
+    { _tdiarKind = "bigquery#tableDataInsertAllRequest"
+    , _tdiarIgnoreUnknownValues = Nothing
+    , _tdiarRows = 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
+
+-- | [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 .:? "skipInvalidRows"))
+
+instance ToJSON TableDataInsertAllRequest where
+        toJSON TableDataInsertAllRequest{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _tdiarKind),
+                  ("ignoreUnknownValues" .=) <$>
+                    _tdiarIgnoreUnknownValues,
+                  ("rows" .=) <$> _tdiarRows,
+                  ("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:/ '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:/ 'jobConfiguration' smart constructor.
+data JobConfiguration = JobConfiguration
+    { _jcCopy    :: !(Maybe JobConfigurationTableCopy)
+    , _jcLink    :: !(Maybe JobConfigurationLink)
+    , _jcLoad    :: !(Maybe JobConfigurationLoad)
+    , _jcQuery   :: !(Maybe JobConfigurationQuery)
+    , _jcExtract :: !(Maybe JobConfigurationExtract)
+    , _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'
+--
+-- * 'jcLink'
+--
+-- * 'jcLoad'
+--
+-- * 'jcQuery'
+--
+-- * 'jcExtract'
+--
+-- * 'jcDryRun'
+jobConfiguration
+    :: JobConfiguration
+jobConfiguration =
+    JobConfiguration
+    { _jcCopy = Nothing
+    , _jcLink = Nothing
+    , _jcLoad = Nothing
+    , _jcQuery = Nothing
+    , _jcExtract = 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 link job.
+jcLink :: Lens' JobConfiguration (Maybe JobConfigurationLink)
+jcLink = lens _jcLink (\ s a -> s{_jcLink = 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})
+
+-- | [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 .:? "link") <*> (o .:? "load")
+                     <*> (o .:? "query")
+                     <*> (o .:? "extract")
+                     <*> (o .:? "dryRun"))
+
+instance ToJSON JobConfiguration where
+        toJSON JobConfiguration{..}
+          = object
+              (catMaybes
+                 [("copy" .=) <$> _jcCopy, ("link" .=) <$> _jcLink,
+                  ("load" .=) <$> _jcLoad, ("query" .=) <$> _jcQuery,
+                  ("extract" .=) <$> _jcExtract,
+                  ("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:/ 'jobConfigurationLink' smart constructor.
+data JobConfigurationLink = JobConfigurationLink
+    { _jDestinationTable  :: !(Maybe TableReference)
+    , _jWriteDisPosition  :: !(Maybe Text)
+    , _jCreateDisPosition :: !(Maybe Text)
+    , _jSourceURI         :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobConfigurationLink' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jDestinationTable'
+--
+-- * 'jWriteDisPosition'
+--
+-- * 'jCreateDisPosition'
+--
+-- * 'jSourceURI'
+jobConfigurationLink
+    :: JobConfigurationLink
+jobConfigurationLink =
+    JobConfigurationLink
+    { _jDestinationTable = Nothing
+    , _jWriteDisPosition = Nothing
+    , _jCreateDisPosition = Nothing
+    , _jSourceURI = Nothing
+    }
+
+-- | [Required] The destination table of the link job.
+jDestinationTable :: Lens' JobConfigurationLink (Maybe TableReference)
+jDestinationTable
+  = lens _jDestinationTable
+      (\ s a -> s{_jDestinationTable = 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.
+jWriteDisPosition :: Lens' JobConfigurationLink (Maybe Text)
+jWriteDisPosition
+  = lens _jWriteDisPosition
+      (\ s a -> s{_jWriteDisPosition = a})
+
+-- | [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.
+jCreateDisPosition :: Lens' JobConfigurationLink (Maybe Text)
+jCreateDisPosition
+  = lens _jCreateDisPosition
+      (\ s a -> s{_jCreateDisPosition = a})
+
+-- | [Required] URI of source table to link.
+jSourceURI :: Lens' JobConfigurationLink [Text]
+jSourceURI
+  = lens _jSourceURI (\ s a -> s{_jSourceURI = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON JobConfigurationLink where
+        parseJSON
+          = withObject "JobConfigurationLink"
+              (\ o ->
+                 JobConfigurationLink <$>
+                   (o .:? "destinationTable") <*>
+                     (o .:? "writeDisposition")
+                     <*> (o .:? "createDisposition")
+                     <*> (o .:? "sourceUri" .!= mempty))
+
+instance ToJSON JobConfigurationLink where
+        toJSON JobConfigurationLink{..}
+          = object
+              (catMaybes
+                 [("destinationTable" .=) <$> _jDestinationTable,
+                  ("writeDisposition" .=) <$> _jWriteDisPosition,
+                  ("createDisposition" .=) <$> _jCreateDisPosition,
+                  ("sourceUri" .=) <$> _jSourceURI])
+
+--
+-- /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)
+    , _jcqCreateDisPosition            :: !(Maybe Text)
+    , _jcqUserDefinedFunctionResources :: !(Maybe [UserDefinedFunctionResource])
+    , _jcqAllowLargeResults            :: !(Maybe Bool)
+    , _jcqQuery                        :: !(Maybe Text)
+    , _jcqFlattenResults               :: !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'
+--
+-- * 'jcqCreateDisPosition'
+--
+-- * 'jcqUserDefinedFunctionResources'
+--
+-- * 'jcqAllowLargeResults'
+--
+-- * 'jcqQuery'
+--
+-- * 'jcqFlattenResults'
+--
+-- * 'jcqDefaultDataSet'
+jobConfigurationQuery
+    :: JobConfigurationQuery
+jobConfigurationQuery =
+    JobConfigurationQuery
+    { _jcqDestinationTable = Nothing
+    , _jcqWriteDisPosition = Nothing
+    , _jcqPriority = Nothing
+    , _jcqUseQueryCache = True
+    , _jcqPreserveNulls = Nothing
+    , _jcqTableDefinitions = Nothing
+    , _jcqCreateDisPosition = Nothing
+    , _jcqUserDefinedFunctionResources = Nothing
+    , _jcqAllowLargeResults = Nothing
+    , _jcqQuery = Nothing
+    , _jcqFlattenResults = True
+    , _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})
+
+-- | [Experimental] 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})
+
+-- | [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})
+
+-- | [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})
+
+-- | [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 .:? "createDisposition")
+                     <*> (o .:? "userDefinedFunctionResources" .!= mempty)
+                     <*> (o .:? "allowLargeResults")
+                     <*> (o .:? "query")
+                     <*> (o .:? "flattenResults" .!= True)
+                     <*> (o .:? "defaultDataset"))
+
+instance ToJSON JobConfigurationQuery where
+        toJSON JobConfigurationQuery{..}
+          = object
+              (catMaybes
+                 [("destinationTable" .=) <$> _jcqDestinationTable,
+                  ("writeDisposition" .=) <$> _jcqWriteDisPosition,
+                  ("priority" .=) <$> _jcqPriority,
+                  Just ("useQueryCache" .= _jcqUseQueryCache),
+                  ("preserveNulls" .=) <$> _jcqPreserveNulls,
+                  ("tableDefinitions" .=) <$> _jcqTableDefinitions,
+                  ("createDisposition" .=) <$> _jcqCreateDisPosition,
+                  ("userDefinedFunctionResources" .=) <$>
+                    _jcqUserDefinedFunctionResources,
+                  ("allowLargeResults" .=) <$> _jcqAllowLargeResults,
+                  ("query" .=) <$> _jcqQuery,
+                  Just ("flattenResults" .= _jcqFlattenResults),
+                  ("defaultDataset" .=) <$> _jcqDefaultDataSet])
+
+--
+-- /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])
+
+-- | [Experimental] 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:/ 'viewDefinition' smart constructor.
+newtype ViewDefinition = ViewDefinition
+    { _vdQuery :: Maybe Text
+    } 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:
+--
+-- * 'vdQuery'
+viewDefinition
+    :: ViewDefinition
+viewDefinition =
+    ViewDefinition
+    { _vdQuery = Nothing
+    }
+
+-- | [Required] A query that BigQuery executes when the view is referenced.
+vdQuery :: Lens' ViewDefinition (Maybe Text)
+vdQuery = lens _vdQuery (\ s a -> s{_vdQuery = a})
+
+instance FromJSON ViewDefinition where
+        parseJSON
+          = withObject "ViewDefinition"
+              (\ o -> ViewDefinition <$> (o .:? "query"))
+
+instance ToJSON ViewDefinition where
+        toJSON ViewDefinition{..}
+          = object (catMaybes [("query" .=) <$> _vdQuery])
+
+--
+-- /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
+    { _jTotalBytesProcessed :: !(Maybe (Textual Int64))
+    , _jBillingTier         :: !(Maybe (Textual Int32))
+    , _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:
+--
+-- * 'jTotalBytesProcessed'
+--
+-- * 'jBillingTier'
+--
+-- * 'jCacheHit'
+--
+-- * 'jTotalBytesBilled'
+jobStatistics2
+    :: JobStatistics2
+jobStatistics2 =
+    JobStatistics2
+    { _jTotalBytesProcessed = Nothing
+    , _jBillingTier = Nothing
+    , _jCacheHit = Nothing
+    , _jTotalBytesBilled = Nothing
+    }
+
+-- | [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] 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 .:? "totalBytesProcessed") <*>
+                     (o .:? "billingTier")
+                     <*> (o .:? "cacheHit")
+                     <*> (o .:? "totalBytesBilled"))
+
+instance ToJSON JobStatistics2 where
+        toJSON JobStatistics2{..}
+          = object
+              (catMaybes
+                 [("totalBytesProcessed" .=) <$>
+                    _jTotalBytesProcessed,
+                  ("billingTier" .=) <$> _jBillingTier,
+                  ("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])
+
+--
+-- /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:/ '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)
+    , _tabNumRows                   :: !(Maybe (Textual Word64))
+    , _tabView                      :: !(Maybe ViewDefinition)
+    , _tabId                        :: !(Maybe Text)
+    , _tabType                      :: !(Maybe Text)
+    , _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'
+--
+-- * 'tabNumRows'
+--
+-- * 'tabView'
+--
+-- * 'tabId'
+--
+-- * 'tabType'
+--
+-- * '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
+    , _tabNumRows = Nothing
+    , _tabView = Nothing
+    , _tabId = Nothing
+    , _tabType = 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
+
+-- | [Experimental] 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})
+
+-- | [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})
+
+-- | [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. The default value is TABLE.
+tabType :: Lens' Table (Maybe Text)
+tabType = lens _tabType (\ s a -> s{_tabType = 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.
+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 .:? "numRows")
+                     <*> (o .:? "view")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type")
+                     <*> (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,
+                  ("numRows" .=) <$> _tabNumRows,
+                  ("view" .=) <$> _tabView, ("id" .=) <$> _tabId,
+                  ("type" .=) <$> _tabType,
+                  ("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 Int32))
+    , _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 Int32)
+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)
+    , _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'
+--
+-- * 'qTotalRows'
+--
+-- * 'qErrors'
+--
+-- * 'qJobComplete'
+--
+-- * 'qCacheHit'
+queryResponse
+    :: QueryResponse
+queryResponse =
+    QueryResponse
+    { _qJobReference = Nothing
+    , _qKind = "bigquery#queryResponse"
+    , _qSchema = Nothing
+    , _qTotalBytesProcessed = Nothing
+    , _qRows = Nothing
+    , _qPageToken = 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})
+
+-- | 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 .:? "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,
+                  ("totalRows" .=) <$> _qTotalRows,
+                  ("errors" .=) <$> _qErrors,
+                  ("jobComplete" .=) <$> _qJobComplete,
+                  ("cacheHit" .=) <$> _qCacheHit])
diff --git a/gen/Network/Google/BigQuery/Types/Sum.hs b/gen/Network/Google/BigQuery/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/BigQuery/Types/Sum.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.BigQuery.Types.Sum
+-- Copyright   : (c) 2015 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)
+--
+module Network.Google.BigQuery.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Restrict information returned to a set of selected fields
+data JobsListProjection
+    = Full
+      -- ^ @full@
+      -- Includes all job data
+    | Minimal
+      -- ^ @minimal@
+      -- Does not include the job configuration
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable JobsListProjection
+
+instance FromText JobsListProjection where
+    fromText = \case
+        "full" -> Just Full
+        "minimal" -> Just Minimal
+        _ -> Nothing
+
+instance ToText JobsListProjection where
+    toText = \case
+        Full -> "full"
+        Minimal -> "minimal"
+
+instance FromJSON JobsListProjection where
+    parseJSON = parseJSONText "JobsListProjection"
+
+instance ToJSON JobsListProjection where
+    toJSON = toJSONText
+
+-- | Filter for job state
+data JobsListStateFilter
+    = Done
+      -- ^ @done@
+      -- Finished jobs
+    | Pending
+      -- ^ @pending@
+      -- Pending jobs
+    | Running
+      -- ^ @running@
+      -- Running jobs
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable JobsListStateFilter
+
+instance FromText JobsListStateFilter where
+    fromText = \case
+        "done" -> Just Done
+        "pending" -> Just Pending
+        "running" -> Just Running
+        _ -> Nothing
+
+instance ToText JobsListStateFilter where
+    toText = \case
+        Done -> "done"
+        Pending -> "pending"
+        Running -> "running"
+
+instance FromJSON JobsListStateFilter where
+    parseJSON = parseJSONText "JobsListStateFilter"
+
+instance ToJSON JobsListStateFilter where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/BigQuery/DataSets/Delete.hs b/gen/Network/Google/Resource/BigQuery/DataSets/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/DataSets/Delete.hs
@@ -0,0 +1,116 @@
+{-# 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.DataSets.Delete
+-- Copyright   : (c) 2015 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)
+--
+-- Deletes the dataset specified by the datasetId value. Before you can
+-- delete a dataset, you must delete all its tables, either manually or by
+-- specifying deleteContents. Immediately after deletion, you can create
+-- another dataset with the same name.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.datasets.delete@.
+module Network.Google.Resource.BigQuery.DataSets.Delete
+    (
+    -- * REST Resource
+      DataSetsDeleteResource
+
+    -- * Creating a Request
+    , dataSetsDelete
+    , DataSetsDelete
+
+    -- * Request Lenses
+    , dsdDataSetId
+    , dsdProjectId
+    , dsdDeleteContents
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.datasets.delete@ method which the
+-- 'DataSetsDelete' request conforms to.
+type DataSetsDeleteResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 QueryParam "deleteContents" Bool :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes the dataset specified by the datasetId value. Before you can
+-- delete a dataset, you must delete all its tables, either manually or by
+-- specifying deleteContents. Immediately after deletion, you can create
+-- another dataset with the same name.
+--
+-- /See:/ 'dataSetsDelete' smart constructor.
+data DataSetsDelete = DataSetsDelete
+    { _dsdDataSetId      :: !Text
+    , _dsdProjectId      :: !Text
+    , _dsdDeleteContents :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsdDataSetId'
+--
+-- * 'dsdProjectId'
+--
+-- * 'dsdDeleteContents'
+dataSetsDelete
+    :: Text -- ^ 'dsdDataSetId'
+    -> Text -- ^ 'dsdProjectId'
+    -> DataSetsDelete
+dataSetsDelete pDsdDataSetId_ pDsdProjectId_ =
+    DataSetsDelete
+    { _dsdDataSetId = pDsdDataSetId_
+    , _dsdProjectId = pDsdProjectId_
+    , _dsdDeleteContents = Nothing
+    }
+
+-- | Dataset ID of dataset being deleted
+dsdDataSetId :: Lens' DataSetsDelete Text
+dsdDataSetId
+  = lens _dsdDataSetId (\ s a -> s{_dsdDataSetId = a})
+
+-- | Project ID of the dataset being deleted
+dsdProjectId :: Lens' DataSetsDelete Text
+dsdProjectId
+  = lens _dsdProjectId (\ s a -> s{_dsdProjectId = a})
+
+-- | If True, delete all the tables in the dataset. If False and the dataset
+-- contains tables, the request will fail. Default is False
+dsdDeleteContents :: Lens' DataSetsDelete (Maybe Bool)
+dsdDeleteContents
+  = lens _dsdDeleteContents
+      (\ s a -> s{_dsdDeleteContents = a})
+
+instance GoogleRequest DataSetsDelete where
+        type Rs DataSetsDelete = ()
+        requestClient DataSetsDelete{..}
+          = go _dsdProjectId _dsdDataSetId _dsdDeleteContents
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy DataSetsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/DataSets/Get.hs b/gen/Network/Google/Resource/BigQuery/DataSets/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/DataSets/Get.hs
@@ -0,0 +1,96 @@
+{-# 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.DataSets.Get
+-- Copyright   : (c) 2015 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 dataset specified by datasetID.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.datasets.get@.
+module Network.Google.Resource.BigQuery.DataSets.Get
+    (
+    -- * REST Resource
+      DataSetsGetResource
+
+    -- * Creating a Request
+    , dataSetsGet
+    , DataSetsGet
+
+    -- * Request Lenses
+    , dsgDataSetId
+    , dsgProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.datasets.get@ method which the
+-- 'DataSetsGet' request conforms to.
+type DataSetsGetResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] DataSet
+
+-- | Returns the dataset specified by datasetID.
+--
+-- /See:/ 'dataSetsGet' smart constructor.
+data DataSetsGet = DataSetsGet
+    { _dsgDataSetId :: !Text
+    , _dsgProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsgDataSetId'
+--
+-- * 'dsgProjectId'
+dataSetsGet
+    :: Text -- ^ 'dsgDataSetId'
+    -> Text -- ^ 'dsgProjectId'
+    -> DataSetsGet
+dataSetsGet pDsgDataSetId_ pDsgProjectId_ =
+    DataSetsGet
+    { _dsgDataSetId = pDsgDataSetId_
+    , _dsgProjectId = pDsgProjectId_
+    }
+
+-- | Dataset ID of the requested dataset
+dsgDataSetId :: Lens' DataSetsGet Text
+dsgDataSetId
+  = lens _dsgDataSetId (\ s a -> s{_dsgDataSetId = a})
+
+-- | Project ID of the requested dataset
+dsgProjectId :: Lens' DataSetsGet Text
+dsgProjectId
+  = lens _dsgProjectId (\ s a -> s{_dsgProjectId = a})
+
+instance GoogleRequest DataSetsGet where
+        type Rs DataSetsGet = DataSet
+        requestClient DataSetsGet{..}
+          = go _dsgProjectId _dsgDataSetId (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy DataSetsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/DataSets/Insert.hs b/gen/Network/Google/Resource/BigQuery/DataSets/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/DataSets/Insert.hs
@@ -0,0 +1,96 @@
+{-# 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.DataSets.Insert
+-- Copyright   : (c) 2015 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)
+--
+-- Creates a new empty dataset.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.datasets.insert@.
+module Network.Google.Resource.BigQuery.DataSets.Insert
+    (
+    -- * REST Resource
+      DataSetsInsertResource
+
+    -- * Creating a Request
+    , dataSetsInsert
+    , DataSetsInsert
+
+    -- * Request Lenses
+    , dsiPayload
+    , dsiProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.datasets.insert@ method which the
+-- 'DataSetsInsert' request conforms to.
+type DataSetsInsertResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] DataSet :> Post '[JSON] DataSet
+
+-- | Creates a new empty dataset.
+--
+-- /See:/ 'dataSetsInsert' smart constructor.
+data DataSetsInsert = DataSetsInsert
+    { _dsiPayload   :: !DataSet
+    , _dsiProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsiPayload'
+--
+-- * 'dsiProjectId'
+dataSetsInsert
+    :: DataSet -- ^ 'dsiPayload'
+    -> Text -- ^ 'dsiProjectId'
+    -> DataSetsInsert
+dataSetsInsert pDsiPayload_ pDsiProjectId_ =
+    DataSetsInsert
+    { _dsiPayload = pDsiPayload_
+    , _dsiProjectId = pDsiProjectId_
+    }
+
+-- | Multipart request metadata.
+dsiPayload :: Lens' DataSetsInsert DataSet
+dsiPayload
+  = lens _dsiPayload (\ s a -> s{_dsiPayload = a})
+
+-- | Project ID of the new dataset
+dsiProjectId :: Lens' DataSetsInsert Text
+dsiProjectId
+  = lens _dsiProjectId (\ s a -> s{_dsiProjectId = a})
+
+instance GoogleRequest DataSetsInsert where
+        type Rs DataSetsInsert = DataSet
+        requestClient DataSetsInsert{..}
+          = go _dsiProjectId (Just AltJSON) _dsiPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy DataSetsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/DataSets/List.hs b/gen/Network/Google/Resource/BigQuery/DataSets/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/DataSets/List.hs
@@ -0,0 +1,123 @@
+{-# 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.DataSets.List
+-- Copyright   : (c) 2015 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)
+--
+-- Lists all datasets in the specified project to which you have been
+-- granted the READER dataset role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.datasets.list@.
+module Network.Google.Resource.BigQuery.DataSets.List
+    (
+    -- * REST Resource
+      DataSetsListResource
+
+    -- * Creating a Request
+    , dataSetsList
+    , DataSetsList
+
+    -- * Request Lenses
+    , dslAll
+    , dslPageToken
+    , dslProjectId
+    , dslMaxResults
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.datasets.list@ method which the
+-- 'DataSetsList' request conforms to.
+type DataSetsListResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               QueryParam "all" Bool :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "maxResults" (Textual Word32) :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] DataSetList
+
+-- | Lists all datasets in the specified project to which you have been
+-- granted the READER dataset role.
+--
+-- /See:/ 'dataSetsList' smart constructor.
+data DataSetsList = DataSetsList
+    { _dslAll        :: !(Maybe Bool)
+    , _dslPageToken  :: !(Maybe Text)
+    , _dslProjectId  :: !Text
+    , _dslMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dslAll'
+--
+-- * 'dslPageToken'
+--
+-- * 'dslProjectId'
+--
+-- * 'dslMaxResults'
+dataSetsList
+    :: Text -- ^ 'dslProjectId'
+    -> DataSetsList
+dataSetsList pDslProjectId_ =
+    DataSetsList
+    { _dslAll = Nothing
+    , _dslPageToken = Nothing
+    , _dslProjectId = pDslProjectId_
+    , _dslMaxResults = Nothing
+    }
+
+-- | Whether to list all datasets, including hidden ones
+dslAll :: Lens' DataSetsList (Maybe Bool)
+dslAll = lens _dslAll (\ s a -> s{_dslAll = a})
+
+-- | Page token, returned by a previous call, to request the next page of
+-- results
+dslPageToken :: Lens' DataSetsList (Maybe Text)
+dslPageToken
+  = lens _dslPageToken (\ s a -> s{_dslPageToken = a})
+
+-- | Project ID of the datasets to be listed
+dslProjectId :: Lens' DataSetsList Text
+dslProjectId
+  = lens _dslProjectId (\ s a -> s{_dslProjectId = a})
+
+-- | The maximum number of results to return
+dslMaxResults :: Lens' DataSetsList (Maybe Word32)
+dslMaxResults
+  = lens _dslMaxResults
+      (\ s a -> s{_dslMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest DataSetsList where
+        type Rs DataSetsList = DataSetList
+        requestClient DataSetsList{..}
+          = go _dslProjectId _dslAll _dslPageToken
+              _dslMaxResults
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy DataSetsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/DataSets/Patch.hs b/gen/Network/Google/Resource/BigQuery/DataSets/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/DataSets/Patch.hs
@@ -0,0 +1,115 @@
+{-# 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.DataSets.Patch
+-- Copyright   : (c) 2015 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)
+--
+-- Updates information in an existing dataset. The update method replaces
+-- the entire dataset resource, whereas the patch method only replaces
+-- fields that are provided in the submitted dataset resource. This method
+-- supports patch semantics.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.datasets.patch@.
+module Network.Google.Resource.BigQuery.DataSets.Patch
+    (
+    -- * REST Resource
+      DataSetsPatchResource
+
+    -- * Creating a Request
+    , dataSetsPatch
+    , DataSetsPatch
+
+    -- * Request Lenses
+    , dspPayload
+    , dspDataSetId
+    , dspProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.datasets.patch@ method which the
+-- 'DataSetsPatch' request conforms to.
+type DataSetsPatchResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] DataSet :> Patch '[JSON] DataSet
+
+-- | Updates information in an existing dataset. The update method replaces
+-- the entire dataset resource, whereas the patch method only replaces
+-- fields that are provided in the submitted dataset resource. This method
+-- supports patch semantics.
+--
+-- /See:/ 'dataSetsPatch' smart constructor.
+data DataSetsPatch = DataSetsPatch
+    { _dspPayload   :: !DataSet
+    , _dspDataSetId :: !Text
+    , _dspProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dspPayload'
+--
+-- * 'dspDataSetId'
+--
+-- * 'dspProjectId'
+dataSetsPatch
+    :: DataSet -- ^ 'dspPayload'
+    -> Text -- ^ 'dspDataSetId'
+    -> Text -- ^ 'dspProjectId'
+    -> DataSetsPatch
+dataSetsPatch pDspPayload_ pDspDataSetId_ pDspProjectId_ =
+    DataSetsPatch
+    { _dspPayload = pDspPayload_
+    , _dspDataSetId = pDspDataSetId_
+    , _dspProjectId = pDspProjectId_
+    }
+
+-- | Multipart request metadata.
+dspPayload :: Lens' DataSetsPatch DataSet
+dspPayload
+  = lens _dspPayload (\ s a -> s{_dspPayload = a})
+
+-- | Dataset ID of the dataset being updated
+dspDataSetId :: Lens' DataSetsPatch Text
+dspDataSetId
+  = lens _dspDataSetId (\ s a -> s{_dspDataSetId = a})
+
+-- | Project ID of the dataset being updated
+dspProjectId :: Lens' DataSetsPatch Text
+dspProjectId
+  = lens _dspProjectId (\ s a -> s{_dspProjectId = a})
+
+instance GoogleRequest DataSetsPatch where
+        type Rs DataSetsPatch = DataSet
+        requestClient DataSetsPatch{..}
+          = go _dspProjectId _dspDataSetId (Just AltJSON)
+              _dspPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy DataSetsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/DataSets/Update.hs b/gen/Network/Google/Resource/BigQuery/DataSets/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/DataSets/Update.hs
@@ -0,0 +1,113 @@
+{-# 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.DataSets.Update
+-- Copyright   : (c) 2015 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)
+--
+-- Updates information in an existing dataset. The update method replaces
+-- the entire dataset resource, whereas the patch method only replaces
+-- fields that are provided in the submitted dataset resource.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.datasets.update@.
+module Network.Google.Resource.BigQuery.DataSets.Update
+    (
+    -- * REST Resource
+      DataSetsUpdateResource
+
+    -- * Creating a Request
+    , dataSetsUpdate
+    , DataSetsUpdate
+
+    -- * Request Lenses
+    , dsuPayload
+    , dsuDataSetId
+    , dsuProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.datasets.update@ method which the
+-- 'DataSetsUpdate' request conforms to.
+type DataSetsUpdateResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] DataSet :> Put '[JSON] DataSet
+
+-- | Updates information in an existing dataset. The update method replaces
+-- the entire dataset resource, whereas the patch method only replaces
+-- fields that are provided in the submitted dataset resource.
+--
+-- /See:/ 'dataSetsUpdate' smart constructor.
+data DataSetsUpdate = DataSetsUpdate
+    { _dsuPayload   :: !DataSet
+    , _dsuDataSetId :: !Text
+    , _dsuProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSetsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsuPayload'
+--
+-- * 'dsuDataSetId'
+--
+-- * 'dsuProjectId'
+dataSetsUpdate
+    :: DataSet -- ^ 'dsuPayload'
+    -> Text -- ^ 'dsuDataSetId'
+    -> Text -- ^ 'dsuProjectId'
+    -> DataSetsUpdate
+dataSetsUpdate pDsuPayload_ pDsuDataSetId_ pDsuProjectId_ =
+    DataSetsUpdate
+    { _dsuPayload = pDsuPayload_
+    , _dsuDataSetId = pDsuDataSetId_
+    , _dsuProjectId = pDsuProjectId_
+    }
+
+-- | Multipart request metadata.
+dsuPayload :: Lens' DataSetsUpdate DataSet
+dsuPayload
+  = lens _dsuPayload (\ s a -> s{_dsuPayload = a})
+
+-- | Dataset ID of the dataset being updated
+dsuDataSetId :: Lens' DataSetsUpdate Text
+dsuDataSetId
+  = lens _dsuDataSetId (\ s a -> s{_dsuDataSetId = a})
+
+-- | Project ID of the dataset being updated
+dsuProjectId :: Lens' DataSetsUpdate Text
+dsuProjectId
+  = lens _dsuProjectId (\ s a -> s{_dsuProjectId = a})
+
+instance GoogleRequest DataSetsUpdate where
+        type Rs DataSetsUpdate = DataSet
+        requestClient DataSetsUpdate{..}
+          = go _dsuProjectId _dsuDataSetId (Just AltJSON)
+              _dsuPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy DataSetsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs b/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/Cancel.hs
@@ -0,0 +1,101 @@
+{-# 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.Jobs.Cancel
+-- Copyright   : (c) 2015 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)
+--
+-- 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
+-- completed successfully. Cancelled jobs may still incur costs.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.jobs.cancel@.
+module Network.Google.Resource.BigQuery.Jobs.Cancel
+    (
+    -- * REST Resource
+      JobsCancelResource
+
+    -- * Creating a Request
+    , jobsCancel
+    , JobsCancel
+
+    -- * Request Lenses
+    , jcJobId
+    , jcProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.jobs.cancel@ method which the
+-- 'JobsCancel' request conforms to.
+type JobsCancelResource =
+     "bigquery" :>
+       "v2" :>
+         "project" :>
+           Capture "projectId" Text :>
+             "jobs" :>
+               Capture "jobId" Text :>
+                 "cancel" :>
+                   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
+-- completed successfully. Cancelled jobs may still incur costs.
+--
+-- /See:/ 'jobsCancel' smart constructor.
+data JobsCancel = JobsCancel
+    { _jcJobId     :: !Text
+    , _jcProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jcJobId'
+--
+-- * 'jcProjectId'
+jobsCancel
+    :: Text -- ^ 'jcJobId'
+    -> Text -- ^ 'jcProjectId'
+    -> JobsCancel
+jobsCancel pJcJobId_ pJcProjectId_ =
+    JobsCancel
+    { _jcJobId = pJcJobId_
+    , _jcProjectId = pJcProjectId_
+    }
+
+-- | Job ID of the job to cancel
+jcJobId :: Lens' JobsCancel Text
+jcJobId = lens _jcJobId (\ s a -> s{_jcJobId = a})
+
+-- | Project ID of the job to cancel
+jcProjectId :: Lens' JobsCancel Text
+jcProjectId
+  = lens _jcProjectId (\ s a -> s{_jcProjectId = a})
+
+instance GoogleRequest JobsCancel where
+        type Rs JobsCancel = JobCancelResponse
+        requestClient JobsCancel{..}
+          = go _jcProjectId _jcJobId (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy JobsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs b/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/Get.hs
@@ -0,0 +1,98 @@
+{-# 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.Jobs.Get
+-- Copyright   : (c) 2015 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 information about a specific job. Job information is available
+-- for a six month period after creation. Requires that you\'re the person
+-- who ran the job, or have the Is Owner project role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.jobs.get@.
+module Network.Google.Resource.BigQuery.Jobs.Get
+    (
+    -- * REST Resource
+      JobsGetResource
+
+    -- * Creating a Request
+    , jobsGet
+    , JobsGet
+
+    -- * Request Lenses
+    , jgJobId
+    , jgProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.jobs.get@ method which the
+-- 'JobsGet' request conforms to.
+type JobsGetResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "jobs" :>
+               Capture "jobId" 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
+-- who ran the job, or have the Is Owner project role.
+--
+-- /See:/ 'jobsGet' smart constructor.
+data JobsGet = JobsGet
+    { _jgJobId     :: !Text
+    , _jgProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jgJobId'
+--
+-- * 'jgProjectId'
+jobsGet
+    :: Text -- ^ 'jgJobId'
+    -> Text -- ^ 'jgProjectId'
+    -> JobsGet
+jobsGet pJgJobId_ pJgProjectId_ =
+    JobsGet
+    { _jgJobId = pJgJobId_
+    , _jgProjectId = pJgProjectId_
+    }
+
+-- | Job ID of the requested job
+jgJobId :: Lens' JobsGet Text
+jgJobId = lens _jgJobId (\ s a -> s{_jgJobId = a})
+
+-- | Project ID of the requested job
+jgProjectId :: Lens' JobsGet Text
+jgProjectId
+  = lens _jgProjectId (\ s a -> s{_jgProjectId = a})
+
+instance GoogleRequest JobsGet where
+        type Rs JobsGet = Job
+        requestClient JobsGet{..}
+          = go _jgProjectId _jgJobId (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
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/GetQueryResults.hs
@@ -0,0 +1,157 @@
+{-# 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.Jobs.GetQueryResults
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the results of a query job.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.jobs.getQueryResults@.
+module Network.Google.Resource.BigQuery.Jobs.GetQueryResults
+    (
+    -- * REST Resource
+      JobsGetQueryResultsResource
+
+    -- * Creating a Request
+    , jobsGetQueryResults
+    , JobsGetQueryResults
+
+    -- * Request Lenses
+    , jgqrJobId
+    , jgqrTimeoutMs
+    , jgqrPageToken
+    , jgqrProjectId
+    , jgqrStartIndex
+    , jgqrMaxResults
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.jobs.getQueryResults@ method which the
+-- 'JobsGetQueryResults' request conforms to.
+type JobsGetQueryResultsResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           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
+
+-- | Retrieves the results of a query job.
+--
+-- /See:/ 'jobsGetQueryResults' smart constructor.
+data JobsGetQueryResults = JobsGetQueryResults
+    { _jgqrJobId      :: !Text
+    , _jgqrTimeoutMs  :: !(Maybe (Textual Word32))
+    , _jgqrPageToken  :: !(Maybe Text)
+    , _jgqrProjectId  :: !Text
+    , _jgqrStartIndex :: !(Maybe (Textual Word64))
+    , _jgqrMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobsGetQueryResults' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jgqrJobId'
+--
+-- * 'jgqrTimeoutMs'
+--
+-- * 'jgqrPageToken'
+--
+-- * 'jgqrProjectId'
+--
+-- * 'jgqrStartIndex'
+--
+-- * 'jgqrMaxResults'
+jobsGetQueryResults
+    :: Text -- ^ 'jgqrJobId'
+    -> Text -- ^ 'jgqrProjectId'
+    -> JobsGetQueryResults
+jobsGetQueryResults pJgqrJobId_ pJgqrProjectId_ =
+    JobsGetQueryResults
+    { _jgqrJobId = pJgqrJobId_
+    , _jgqrTimeoutMs = Nothing
+    , _jgqrPageToken = Nothing
+    , _jgqrProjectId = pJgqrProjectId_
+    , _jgqrStartIndex = Nothing
+    , _jgqrMaxResults = Nothing
+    }
+
+-- | Job ID of the query job
+jgqrJobId :: Lens' JobsGetQueryResults Text
+jgqrJobId
+  = lens _jgqrJobId (\ s a -> s{_jgqrJobId = 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
+jgqrTimeoutMs :: Lens' JobsGetQueryResults (Maybe Word32)
+jgqrTimeoutMs
+  = lens _jgqrTimeoutMs
+      (\ s a -> s{_jgqrTimeoutMs = a})
+      . mapping _Coerce
+
+-- | Page token, returned by a previous call, to request the next page of
+-- results
+jgqrPageToken :: Lens' JobsGetQueryResults (Maybe Text)
+jgqrPageToken
+  = lens _jgqrPageToken
+      (\ s a -> s{_jgqrPageToken = a})
+
+-- | Project ID of the query job
+jgqrProjectId :: Lens' JobsGetQueryResults Text
+jgqrProjectId
+  = lens _jgqrProjectId
+      (\ s a -> s{_jgqrProjectId = a})
+
+-- | Zero-based index of the starting row
+jgqrStartIndex :: Lens' JobsGetQueryResults (Maybe Word64)
+jgqrStartIndex
+  = lens _jgqrStartIndex
+      (\ s a -> s{_jgqrStartIndex = a})
+      . mapping _Coerce
+
+-- | Maximum number of results to read
+jgqrMaxResults :: Lens' JobsGetQueryResults (Maybe Word32)
+jgqrMaxResults
+  = lens _jgqrMaxResults
+      (\ s a -> s{_jgqrMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest JobsGetQueryResults where
+        type Rs JobsGetQueryResults = GetQueryResultsResponse
+        requestClient JobsGetQueryResults{..}
+          = go _jgqrProjectId _jgqrJobId _jgqrTimeoutMs
+              _jgqrPageToken
+              _jgqrStartIndex
+              _jgqrMaxResults
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy JobsGetQueryResultsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/Insert.hs b/gen/Network/Google/Resource/BigQuery/Jobs/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/Insert.hs
@@ -0,0 +1,118 @@
+{-# 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.Jobs.Insert
+-- Copyright   : (c) 2015 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)
+--
+-- Starts a new asynchronous job. Requires the Can View project role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.jobs.insert@.
+module Network.Google.Resource.BigQuery.Jobs.Insert
+    (
+    -- * REST Resource
+      JobsInsertResource
+
+    -- * Creating a Request
+    , jobsInsert
+    , JobsInsert
+
+    -- * Request Lenses
+    , jiPayload
+    , jiProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.jobs.insert@ method which the
+-- 'JobsInsert' request conforms to.
+type JobsInsertResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "jobs" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Job :> Post '[JSON] Job
+       :<|>
+       "upload" :>
+         "bigquery" :>
+           "v2" :>
+             "projects" :>
+               Capture "projectId" Text :>
+                 "jobs" :>
+                   QueryParam "alt" AltJSON :>
+                     QueryParam "uploadType" AltMedia :>
+                       MultipartRelated '[JSON] Job RequestBody :>
+                         Post '[JSON] Job
+
+-- | Starts a new asynchronous job. Requires the Can View project role.
+--
+-- /See:/ 'jobsInsert' smart constructor.
+data JobsInsert = JobsInsert
+    { _jiPayload   :: !Job
+    , _jiProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jiPayload'
+--
+-- * 'jiProjectId'
+jobsInsert
+    :: Job -- ^ 'jiPayload'
+    -> Text -- ^ 'jiProjectId'
+    -> JobsInsert
+jobsInsert pJiPayload_ pJiProjectId_ =
+    JobsInsert
+    { _jiPayload = pJiPayload_
+    , _jiProjectId = pJiProjectId_
+    }
+
+-- | Multipart request metadata.
+jiPayload :: Lens' JobsInsert Job
+jiPayload
+  = lens _jiPayload (\ s a -> s{_jiPayload = a})
+
+-- | Project ID of the project that will be billed for the job
+jiProjectId :: Lens' JobsInsert Text
+jiProjectId
+  = lens _jiProjectId (\ s a -> s{_jiProjectId = a})
+
+instance GoogleRequest JobsInsert where
+        type Rs JobsInsert = Job
+        requestClient JobsInsert{..}
+          = go _jiProjectId (Just AltJSON) _jiPayload
+              bigQueryService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy JobsInsertResource)
+                      mempty
+
+instance GoogleRequest (MediaUpload JobsInsert) where
+        type Rs (MediaUpload JobsInsert) = Job
+        requestClient (MediaUpload JobsInsert{..} body)
+          = go _jiProjectId (Just AltJSON) (Just AltMedia)
+              _jiPayload
+              body
+              bigQueryService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy JobsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/List.hs b/gen/Network/Google/Resource/BigQuery/Jobs/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/List.hs
@@ -0,0 +1,157 @@
+{-# 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.Jobs.List
+-- Copyright   : (c) 2015 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)
+--
+-- Lists all jobs that you started in the specified project. Job
+-- information is available for a six month period after creation. The job
+-- list is sorted in reverse chronological order, by job creation time.
+-- Requires the Can View project role, or the Is Owner project role if you
+-- set the allUsers property.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.jobs.list@.
+module Network.Google.Resource.BigQuery.Jobs.List
+    (
+    -- * REST Resource
+      JobsListResource
+
+    -- * Creating a Request
+    , jobsList
+    , JobsList
+
+    -- * Request Lenses
+    , jlStateFilter
+    , jlProjection
+    , jlPageToken
+    , jlProjectId
+    , jlAllUsers
+    , jlMaxResults
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.jobs.list@ method which the
+-- 'JobsList' request conforms to.
+type JobsListResource =
+     "bigquery" :>
+       "v2" :>
+         "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
+
+-- | Lists all jobs that you started in the specified project. Job
+-- information is available for a six month period after creation. The job
+-- list is sorted in reverse chronological order, by job creation time.
+-- Requires the Can View project role, or the Is Owner project role if you
+-- set the allUsers property.
+--
+-- /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))
+    } 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:
+--
+-- * 'jlStateFilter'
+--
+-- * 'jlProjection'
+--
+-- * 'jlPageToken'
+--
+-- * 'jlProjectId'
+--
+-- * 'jlAllUsers'
+--
+-- * 'jlMaxResults'
+jobsList
+    :: Text -- ^ 'jlProjectId'
+    -> JobsList
+jobsList pJlProjectId_ =
+    JobsList
+    { _jlStateFilter = Nothing
+    , _jlProjection = Nothing
+    , _jlPageToken = Nothing
+    , _jlProjectId = pJlProjectId_
+    , _jlAllUsers = Nothing
+    , _jlMaxResults = Nothing
+    }
+
+-- | Filter for job state
+jlStateFilter :: Lens' JobsList [JobsListStateFilter]
+jlStateFilter
+  = lens _jlStateFilter
+      (\ s a -> s{_jlStateFilter = a})
+      . _Default
+      . _Coerce
+
+-- | Restrict information returned to a set of selected fields
+jlProjection :: Lens' JobsList (Maybe JobsListProjection)
+jlProjection
+  = lens _jlProjection (\ s a -> s{_jlProjection = a})
+
+-- | Page token, returned by a previous call, to request the next page of
+-- results
+jlPageToken :: Lens' JobsList (Maybe Text)
+jlPageToken
+  = lens _jlPageToken (\ s a -> s{_jlPageToken = a})
+
+-- | Project ID of the jobs to list
+jlProjectId :: Lens' JobsList Text
+jlProjectId
+  = lens _jlProjectId (\ s a -> s{_jlProjectId = a})
+
+-- | Whether to display jobs owned by all users in the project. Default false
+jlAllUsers :: Lens' JobsList (Maybe Bool)
+jlAllUsers
+  = lens _jlAllUsers (\ s a -> s{_jlAllUsers = a})
+
+-- | Maximum number of results to return
+jlMaxResults :: Lens' JobsList (Maybe Word32)
+jlMaxResults
+  = lens _jlMaxResults (\ s a -> s{_jlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest JobsList where
+        type Rs JobsList = JobList
+        requestClient JobsList{..}
+          = go _jlProjectId (_jlStateFilter ^. _Default)
+              _jlProjection
+              _jlPageToken
+              _jlAllUsers
+              _jlMaxResults
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy JobsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Jobs/Query.hs b/gen/Network/Google/Resource/BigQuery/Jobs/Query.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Jobs/Query.hs
@@ -0,0 +1,99 @@
+{-# 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.Jobs.Query
+-- Copyright   : (c) 2015 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)
+--
+-- Runs a BigQuery SQL query synchronously and returns query results if the
+-- query completes within a specified timeout.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.jobs.query@.
+module Network.Google.Resource.BigQuery.Jobs.Query
+    (
+    -- * REST Resource
+      JobsQueryResource
+
+    -- * Creating a Request
+    , jobsQuery
+    , JobsQuery
+
+    -- * Request Lenses
+    , jqPayload
+    , jqProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.jobs.query@ method which the
+-- 'JobsQuery' request conforms to.
+type JobsQueryResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "queries" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] QueryRequest :>
+                   Post '[JSON] QueryResponse
+
+-- | Runs a BigQuery SQL query synchronously and returns query results if the
+-- query completes within a specified timeout.
+--
+-- /See:/ 'jobsQuery' smart constructor.
+data JobsQuery = JobsQuery
+    { _jqPayload   :: !QueryRequest
+    , _jqProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobsQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jqPayload'
+--
+-- * 'jqProjectId'
+jobsQuery
+    :: QueryRequest -- ^ 'jqPayload'
+    -> Text -- ^ 'jqProjectId'
+    -> JobsQuery
+jobsQuery pJqPayload_ pJqProjectId_ =
+    JobsQuery
+    { _jqPayload = pJqPayload_
+    , _jqProjectId = pJqProjectId_
+    }
+
+-- | Multipart request metadata.
+jqPayload :: Lens' JobsQuery QueryRequest
+jqPayload
+  = lens _jqPayload (\ s a -> s{_jqPayload = a})
+
+-- | Project ID of the project billed for the query
+jqProjectId :: Lens' JobsQuery Text
+jqProjectId
+  = lens _jqProjectId (\ s a -> s{_jqProjectId = a})
+
+instance GoogleRequest JobsQuery where
+        type Rs JobsQuery = QueryResponse
+        requestClient JobsQuery{..}
+          = go _jqProjectId (Just AltJSON) _jqPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy JobsQueryResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Projects/List.hs b/gen/Network/Google/Resource/BigQuery/Projects/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Projects/List.hs
@@ -0,0 +1,95 @@
+{-# 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.List
+-- Copyright   : (c) 2015 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)
+--
+-- Lists all projects to which you have been granted any project role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.projects.list@.
+module Network.Google.Resource.BigQuery.Projects.List
+    (
+    -- * REST Resource
+      ProjectsListResource
+
+    -- * Creating a Request
+    , projectsList
+    , ProjectsList
+
+    -- * Request Lenses
+    , plPageToken
+    , plMaxResults
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.projects.list@ method which the
+-- 'ProjectsList' request conforms to.
+type ProjectsListResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           QueryParam "pageToken" Text :>
+             QueryParam "maxResults" (Textual Word32) :>
+               QueryParam "alt" AltJSON :> Get '[JSON] ProjectList
+
+-- | Lists all projects to which you have been granted any project role.
+--
+-- /See:/ 'projectsList' smart constructor.
+data ProjectsList = ProjectsList
+    { _plPageToken  :: !(Maybe Text)
+    , _plMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plPageToken'
+--
+-- * 'plMaxResults'
+projectsList
+    :: ProjectsList
+projectsList =
+    ProjectsList
+    { _plPageToken = Nothing
+    , _plMaxResults = Nothing
+    }
+
+-- | Page token, returned by a previous call, to request the next page of
+-- results
+plPageToken :: Lens' ProjectsList (Maybe Text)
+plPageToken
+  = lens _plPageToken (\ s a -> s{_plPageToken = a})
+
+-- | Maximum number of results to return
+plMaxResults :: Lens' ProjectsList (Maybe Word32)
+plMaxResults
+  = lens _plMaxResults (\ s a -> s{_plMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ProjectsList where
+        type Rs ProjectsList = ProjectList
+        requestClient ProjectsList{..}
+          = go _plPageToken _plMaxResults (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy ProjectsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/TableData/InsertAll.hs b/gen/Network/Google/Resource/BigQuery/TableData/InsertAll.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/TableData/InsertAll.hs
@@ -0,0 +1,131 @@
+{-# 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.TableData.InsertAll
+-- Copyright   : (c) 2015 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)
+--
+-- Streams data into BigQuery one record at a time without needing to run a
+-- load job. Requires the WRITER dataset role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tabledata.insertAll@.
+module Network.Google.Resource.BigQuery.TableData.InsertAll
+    (
+    -- * REST Resource
+      TableDataInsertAllResource
+
+    -- * Creating a Request
+    , tableDataInsertAll
+    , TableDataInsertAll
+
+    -- * Request Lenses
+    , tdiaPayload
+    , tdiaDataSetId
+    , tdiaProjectId
+    , tdiaTableId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tabledata.insertAll@ method which the
+-- 'TableDataInsertAll' request conforms to.
+type TableDataInsertAllResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   Capture "tableId" Text :>
+                     "insertAll" :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] TableDataInsertAllRequest :>
+                           Post '[JSON] TableDataInsertAllResponse
+
+-- | Streams data into BigQuery one record at a time without needing to run a
+-- load job. Requires the WRITER dataset role.
+--
+-- /See:/ 'tableDataInsertAll' smart constructor.
+data TableDataInsertAll = TableDataInsertAll
+    { _tdiaPayload   :: !TableDataInsertAllRequest
+    , _tdiaDataSetId :: !Text
+    , _tdiaProjectId :: !Text
+    , _tdiaTableId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableDataInsertAll' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdiaPayload'
+--
+-- * 'tdiaDataSetId'
+--
+-- * 'tdiaProjectId'
+--
+-- * 'tdiaTableId'
+tableDataInsertAll
+    :: TableDataInsertAllRequest -- ^ 'tdiaPayload'
+    -> Text -- ^ 'tdiaDataSetId'
+    -> Text -- ^ 'tdiaProjectId'
+    -> Text -- ^ 'tdiaTableId'
+    -> TableDataInsertAll
+tableDataInsertAll pTdiaPayload_ pTdiaDataSetId_ pTdiaProjectId_ pTdiaTableId_ =
+    TableDataInsertAll
+    { _tdiaPayload = pTdiaPayload_
+    , _tdiaDataSetId = pTdiaDataSetId_
+    , _tdiaProjectId = pTdiaProjectId_
+    , _tdiaTableId = pTdiaTableId_
+    }
+
+-- | Multipart request metadata.
+tdiaPayload :: Lens' TableDataInsertAll TableDataInsertAllRequest
+tdiaPayload
+  = lens _tdiaPayload (\ s a -> s{_tdiaPayload = a})
+
+-- | Dataset ID of the destination table.
+tdiaDataSetId :: Lens' TableDataInsertAll Text
+tdiaDataSetId
+  = lens _tdiaDataSetId
+      (\ s a -> s{_tdiaDataSetId = a})
+
+-- | Project ID of the destination table.
+tdiaProjectId :: Lens' TableDataInsertAll Text
+tdiaProjectId
+  = lens _tdiaProjectId
+      (\ s a -> s{_tdiaProjectId = a})
+
+-- | Table ID of the destination table.
+tdiaTableId :: Lens' TableDataInsertAll Text
+tdiaTableId
+  = lens _tdiaTableId (\ s a -> s{_tdiaTableId = a})
+
+instance GoogleRequest TableDataInsertAll where
+        type Rs TableDataInsertAll =
+             TableDataInsertAllResponse
+        requestClient TableDataInsertAll{..}
+          = go _tdiaProjectId _tdiaDataSetId _tdiaTableId
+              (Just AltJSON)
+              _tdiaPayload
+              bigQueryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TableDataInsertAllResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/TableData/List.hs b/gen/Network/Google/Resource/BigQuery/TableData/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/TableData/List.hs
@@ -0,0 +1,152 @@
+{-# 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.TableData.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves table data from a specified set of rows. Requires the READER
+-- dataset role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tabledata.list@.
+module Network.Google.Resource.BigQuery.TableData.List
+    (
+    -- * REST Resource
+      TableDataListResource
+
+    -- * Creating a Request
+    , tableDataList'
+    , TableDataList'
+
+    -- * Request Lenses
+    , tDataSetId
+    , tPageToken
+    , tProjectId
+    , tTableId
+    , tStartIndex
+    , tMaxResults
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tabledata.list@ method which the
+-- 'TableDataList'' request conforms to.
+type TableDataListResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   Capture "tableId" Text :>
+                     "data" :>
+                       QueryParam "pageToken" 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))
+    } 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:
+--
+-- * 'tDataSetId'
+--
+-- * 'tPageToken'
+--
+-- * 'tProjectId'
+--
+-- * 'tTableId'
+--
+-- * 'tStartIndex'
+--
+-- * 'tMaxResults'
+tableDataList'
+    :: Text -- ^ 'tDataSetId'
+    -> Text -- ^ 'tProjectId'
+    -> Text -- ^ 'tTableId'
+    -> TableDataList'
+tableDataList' pTDataSetId_ pTProjectId_ pTTableId_ =
+    TableDataList'
+    { _tDataSetId = pTDataSetId_
+    , _tPageToken = Nothing
+    , _tProjectId = pTProjectId_
+    , _tTableId = pTTableId_
+    , _tStartIndex = Nothing
+    , _tMaxResults = Nothing
+    }
+
+-- | Dataset ID of the table to read
+tDataSetId :: Lens' TableDataList' Text
+tDataSetId
+  = lens _tDataSetId (\ s a -> s{_tDataSetId = a})
+
+-- | 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.
+tPageToken :: Lens' TableDataList' (Maybe Text)
+tPageToken
+  = lens _tPageToken (\ s a -> s{_tPageToken = a})
+
+-- | Project ID of the table to read
+tProjectId :: Lens' TableDataList' Text
+tProjectId
+  = lens _tProjectId (\ s a -> s{_tProjectId = a})
+
+-- | Table ID of the table to read
+tTableId :: Lens' TableDataList' Text
+tTableId = lens _tTableId (\ s a -> s{_tTableId = a})
+
+-- | Zero-based index of the starting row to read
+tStartIndex :: Lens' TableDataList' (Maybe Word64)
+tStartIndex
+  = lens _tStartIndex (\ s a -> s{_tStartIndex = a}) .
+      mapping _Coerce
+
+-- | Maximum number of results to return
+tMaxResults :: Lens' TableDataList' (Maybe Word32)
+tMaxResults
+  = lens _tMaxResults (\ s a -> s{_tMaxResults = a}) .
+      mapping _Coerce
+
+instance GoogleRequest TableDataList' where
+        type Rs TableDataList' = TableDataList
+        requestClient TableDataList'{..}
+          = go _tProjectId _tDataSetId _tTableId _tPageToken
+              _tStartIndex
+              _tMaxResults
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TableDataListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/Delete.hs b/gen/Network/Google/Resource/BigQuery/Tables/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Tables/Delete.hs
@@ -0,0 +1,112 @@
+{-# 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.Tables.Delete
+-- Copyright   : (c) 2015 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)
+--
+-- Deletes the table specified by tableId from the dataset. If the table
+-- contains data, all the data will be deleted.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tables.delete@.
+module Network.Google.Resource.BigQuery.Tables.Delete
+    (
+    -- * REST Resource
+      TablesDeleteResource
+
+    -- * Creating a Request
+    , tablesDelete
+    , TablesDelete
+
+    -- * Request Lenses
+    , tdDataSetId
+    , tdProjectId
+    , tdTableId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tables.delete@ method which the
+-- 'TablesDelete' request conforms to.
+type TablesDeleteResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   Capture "tableId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes the table specified by tableId from the dataset. If the table
+-- contains data, all the data will be deleted.
+--
+-- /See:/ 'tablesDelete' smart constructor.
+data TablesDelete = TablesDelete
+    { _tdDataSetId :: !Text
+    , _tdProjectId :: !Text
+    , _tdTableId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TablesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdDataSetId'
+--
+-- * 'tdProjectId'
+--
+-- * 'tdTableId'
+tablesDelete
+    :: Text -- ^ 'tdDataSetId'
+    -> Text -- ^ 'tdProjectId'
+    -> Text -- ^ 'tdTableId'
+    -> TablesDelete
+tablesDelete pTdDataSetId_ pTdProjectId_ pTdTableId_ =
+    TablesDelete
+    { _tdDataSetId = pTdDataSetId_
+    , _tdProjectId = pTdProjectId_
+    , _tdTableId = pTdTableId_
+    }
+
+-- | Dataset ID of the table to delete
+tdDataSetId :: Lens' TablesDelete Text
+tdDataSetId
+  = lens _tdDataSetId (\ s a -> s{_tdDataSetId = a})
+
+-- | Project ID of the table to delete
+tdProjectId :: Lens' TablesDelete Text
+tdProjectId
+  = lens _tdProjectId (\ s a -> s{_tdProjectId = a})
+
+-- | Table ID of the table to delete
+tdTableId :: Lens' TablesDelete Text
+tdTableId
+  = lens _tdTableId (\ s a -> s{_tdTableId = a})
+
+instance GoogleRequest TablesDelete where
+        type Rs TablesDelete = ()
+        requestClient TablesDelete{..}
+          = go _tdProjectId _tdDataSetId _tdTableId
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TablesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/Get.hs b/gen/Network/Google/Resource/BigQuery/Tables/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Tables/Get.hs
@@ -0,0 +1,114 @@
+{-# 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.Tables.Get
+-- Copyright   : (c) 2015 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)
+--
+-- 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
+-- describes the structure of this table.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tables.get@.
+module Network.Google.Resource.BigQuery.Tables.Get
+    (
+    -- * REST Resource
+      TablesGetResource
+
+    -- * Creating a Request
+    , tablesGet
+    , TablesGet
+
+    -- * Request Lenses
+    , tgDataSetId
+    , tgProjectId
+    , tgTableId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tables.get@ method which the
+-- 'TablesGet' request conforms to.
+type TablesGetResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   Capture "tableId" 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
+-- describes the structure of this table.
+--
+-- /See:/ 'tablesGet' smart constructor.
+data TablesGet = TablesGet
+    { _tgDataSetId :: !Text
+    , _tgProjectId :: !Text
+    , _tgTableId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TablesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tgDataSetId'
+--
+-- * 'tgProjectId'
+--
+-- * 'tgTableId'
+tablesGet
+    :: Text -- ^ 'tgDataSetId'
+    -> Text -- ^ 'tgProjectId'
+    -> Text -- ^ 'tgTableId'
+    -> TablesGet
+tablesGet pTgDataSetId_ pTgProjectId_ pTgTableId_ =
+    TablesGet
+    { _tgDataSetId = pTgDataSetId_
+    , _tgProjectId = pTgProjectId_
+    , _tgTableId = pTgTableId_
+    }
+
+-- | Dataset ID of the requested table
+tgDataSetId :: Lens' TablesGet Text
+tgDataSetId
+  = lens _tgDataSetId (\ s a -> s{_tgDataSetId = a})
+
+-- | Project ID of the requested table
+tgProjectId :: Lens' TablesGet Text
+tgProjectId
+  = lens _tgProjectId (\ s a -> s{_tgProjectId = a})
+
+-- | Table ID of the requested table
+tgTableId :: Lens' TablesGet Text
+tgTableId
+  = lens _tgTableId (\ s a -> s{_tgTableId = a})
+
+instance GoogleRequest TablesGet where
+        type Rs TablesGet = Table
+        requestClient TablesGet{..}
+          = go _tgProjectId _tgDataSetId _tgTableId
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TablesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/Insert.hs b/gen/Network/Google/Resource/BigQuery/Tables/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Tables/Insert.hs
@@ -0,0 +1,110 @@
+{-# 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.Tables.Insert
+-- Copyright   : (c) 2015 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)
+--
+-- Creates a new, empty table in the dataset.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tables.insert@.
+module Network.Google.Resource.BigQuery.Tables.Insert
+    (
+    -- * REST Resource
+      TablesInsertResource
+
+    -- * Creating a Request
+    , tablesInsert
+    , TablesInsert
+
+    -- * Request Lenses
+    , tiPayload
+    , tiDataSetId
+    , tiProjectId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tables.insert@ method which the
+-- 'TablesInsert' request conforms to.
+type TablesInsertResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Table :> Post '[JSON] Table
+
+-- | Creates a new, empty table in the dataset.
+--
+-- /See:/ 'tablesInsert' smart constructor.
+data TablesInsert = TablesInsert
+    { _tiPayload   :: !Table
+    , _tiDataSetId :: !Text
+    , _tiProjectId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TablesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tiPayload'
+--
+-- * 'tiDataSetId'
+--
+-- * 'tiProjectId'
+tablesInsert
+    :: Table -- ^ 'tiPayload'
+    -> Text -- ^ 'tiDataSetId'
+    -> Text -- ^ 'tiProjectId'
+    -> TablesInsert
+tablesInsert pTiPayload_ pTiDataSetId_ pTiProjectId_ =
+    TablesInsert
+    { _tiPayload = pTiPayload_
+    , _tiDataSetId = pTiDataSetId_
+    , _tiProjectId = pTiProjectId_
+    }
+
+-- | Multipart request metadata.
+tiPayload :: Lens' TablesInsert Table
+tiPayload
+  = lens _tiPayload (\ s a -> s{_tiPayload = a})
+
+-- | Dataset ID of the new table
+tiDataSetId :: Lens' TablesInsert Text
+tiDataSetId
+  = lens _tiDataSetId (\ s a -> s{_tiDataSetId = a})
+
+-- | Project ID of the new table
+tiProjectId :: Lens' TablesInsert Text
+tiProjectId
+  = lens _tiProjectId (\ s a -> s{_tiProjectId = a})
+
+instance GoogleRequest TablesInsert where
+        type Rs TablesInsert = Table
+        requestClient TablesInsert{..}
+          = go _tiProjectId _tiDataSetId (Just AltJSON)
+              _tiPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TablesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/List.hs b/gen/Network/Google/Resource/BigQuery/Tables/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Tables/List.hs
@@ -0,0 +1,125 @@
+{-# 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.Tables.List
+-- Copyright   : (c) 2015 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)
+--
+-- Lists all tables in the specified dataset. Requires the READER dataset
+-- role.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tables.list@.
+module Network.Google.Resource.BigQuery.Tables.List
+    (
+    -- * REST Resource
+      TablesListResource
+
+    -- * Creating a Request
+    , tablesList
+    , TablesList
+
+    -- * Request Lenses
+    , tlDataSetId
+    , tlPageToken
+    , tlProjectId
+    , tlMaxResults
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tables.list@ method which the
+-- 'TablesList' request conforms to.
+type TablesListResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] TableList
+
+-- | Lists all tables in the specified dataset. Requires the READER dataset
+-- role.
+--
+-- /See:/ 'tablesList' smart constructor.
+data TablesList = TablesList
+    { _tlDataSetId  :: !Text
+    , _tlPageToken  :: !(Maybe Text)
+    , _tlProjectId  :: !Text
+    , _tlMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TablesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tlDataSetId'
+--
+-- * 'tlPageToken'
+--
+-- * 'tlProjectId'
+--
+-- * 'tlMaxResults'
+tablesList
+    :: Text -- ^ 'tlDataSetId'
+    -> Text -- ^ 'tlProjectId'
+    -> TablesList
+tablesList pTlDataSetId_ pTlProjectId_ =
+    TablesList
+    { _tlDataSetId = pTlDataSetId_
+    , _tlPageToken = Nothing
+    , _tlProjectId = pTlProjectId_
+    , _tlMaxResults = Nothing
+    }
+
+-- | Dataset ID of the tables to list
+tlDataSetId :: Lens' TablesList Text
+tlDataSetId
+  = lens _tlDataSetId (\ s a -> s{_tlDataSetId = a})
+
+-- | Page token, returned by a previous call, to request the next page of
+-- results
+tlPageToken :: Lens' TablesList (Maybe Text)
+tlPageToken
+  = lens _tlPageToken (\ s a -> s{_tlPageToken = a})
+
+-- | Project ID of the tables to list
+tlProjectId :: Lens' TablesList Text
+tlProjectId
+  = lens _tlProjectId (\ s a -> s{_tlProjectId = a})
+
+-- | Maximum number of results to return
+tlMaxResults :: Lens' TablesList (Maybe Word32)
+tlMaxResults
+  = lens _tlMaxResults (\ s a -> s{_tlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest TablesList where
+        type Rs TablesList = TableList
+        requestClient TablesList{..}
+          = go _tlProjectId _tlDataSetId _tlPageToken
+              _tlMaxResults
+              (Just AltJSON)
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TablesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/Patch.hs b/gen/Network/Google/Resource/BigQuery/Tables/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Tables/Patch.hs
@@ -0,0 +1,129 @@
+{-# 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.Tables.Patch
+-- Copyright   : (c) 2015 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)
+--
+-- Updates information in an existing table. The update method replaces the
+-- entire table resource, whereas the patch method only replaces fields
+-- that are provided in the submitted table resource. This method supports
+-- patch semantics.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tables.patch@.
+module Network.Google.Resource.BigQuery.Tables.Patch
+    (
+    -- * REST Resource
+      TablesPatchResource
+
+    -- * Creating a Request
+    , tablesPatch
+    , TablesPatch
+
+    -- * Request Lenses
+    , tpPayload
+    , tpDataSetId
+    , tpProjectId
+    , tpTableId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tables.patch@ method which the
+-- 'TablesPatch' request conforms to.
+type TablesPatchResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   Capture "tableId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Table :> Patch '[JSON] Table
+
+-- | Updates information in an existing table. The update method replaces the
+-- entire table resource, whereas the patch method only replaces fields
+-- that are provided in the submitted table resource. This method supports
+-- patch semantics.
+--
+-- /See:/ 'tablesPatch' smart constructor.
+data TablesPatch = TablesPatch
+    { _tpPayload   :: !Table
+    , _tpDataSetId :: !Text
+    , _tpProjectId :: !Text
+    , _tpTableId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TablesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpPayload'
+--
+-- * 'tpDataSetId'
+--
+-- * 'tpProjectId'
+--
+-- * 'tpTableId'
+tablesPatch
+    :: Table -- ^ 'tpPayload'
+    -> Text -- ^ 'tpDataSetId'
+    -> Text -- ^ 'tpProjectId'
+    -> Text -- ^ 'tpTableId'
+    -> TablesPatch
+tablesPatch pTpPayload_ pTpDataSetId_ pTpProjectId_ pTpTableId_ =
+    TablesPatch
+    { _tpPayload = pTpPayload_
+    , _tpDataSetId = pTpDataSetId_
+    , _tpProjectId = pTpProjectId_
+    , _tpTableId = pTpTableId_
+    }
+
+-- | Multipart request metadata.
+tpPayload :: Lens' TablesPatch Table
+tpPayload
+  = lens _tpPayload (\ s a -> s{_tpPayload = a})
+
+-- | Dataset ID of the table to update
+tpDataSetId :: Lens' TablesPatch Text
+tpDataSetId
+  = lens _tpDataSetId (\ s a -> s{_tpDataSetId = a})
+
+-- | Project ID of the table to update
+tpProjectId :: Lens' TablesPatch Text
+tpProjectId
+  = lens _tpProjectId (\ s a -> s{_tpProjectId = a})
+
+-- | Table ID of the table to update
+tpTableId :: Lens' TablesPatch Text
+tpTableId
+  = lens _tpTableId (\ s a -> s{_tpTableId = a})
+
+instance GoogleRequest TablesPatch where
+        type Rs TablesPatch = Table
+        requestClient TablesPatch{..}
+          = go _tpProjectId _tpDataSetId _tpTableId
+              (Just AltJSON)
+              _tpPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TablesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/BigQuery/Tables/Update.hs b/gen/Network/Google/Resource/BigQuery/Tables/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/BigQuery/Tables/Update.hs
@@ -0,0 +1,127 @@
+{-# 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.Tables.Update
+-- Copyright   : (c) 2015 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)
+--
+-- Updates information in an existing table. The update method replaces the
+-- entire table resource, whereas the patch method only replaces fields
+-- that are provided in the submitted table resource.
+--
+-- /See:/ <https://cloud.google.com/bigquery/ BigQuery API Reference> for @bigquery.tables.update@.
+module Network.Google.Resource.BigQuery.Tables.Update
+    (
+    -- * REST Resource
+      TablesUpdateResource
+
+    -- * Creating a Request
+    , tablesUpdate
+    , TablesUpdate
+
+    -- * Request Lenses
+    , tuPayload
+    , tuDataSetId
+    , tuProjectId
+    , tuTableId
+    ) where
+
+import           Network.Google.BigQuery.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @bigquery.tables.update@ method which the
+-- 'TablesUpdate' request conforms to.
+type TablesUpdateResource =
+     "bigquery" :>
+       "v2" :>
+         "projects" :>
+           Capture "projectId" Text :>
+             "datasets" :>
+               Capture "datasetId" Text :>
+                 "tables" :>
+                   Capture "tableId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Table :> Put '[JSON] Table
+
+-- | Updates information in an existing table. The update method replaces the
+-- entire table resource, whereas the patch method only replaces fields
+-- that are provided in the submitted table resource.
+--
+-- /See:/ 'tablesUpdate' smart constructor.
+data TablesUpdate = TablesUpdate
+    { _tuPayload   :: !Table
+    , _tuDataSetId :: !Text
+    , _tuProjectId :: !Text
+    , _tuTableId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TablesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tuPayload'
+--
+-- * 'tuDataSetId'
+--
+-- * 'tuProjectId'
+--
+-- * 'tuTableId'
+tablesUpdate
+    :: Table -- ^ 'tuPayload'
+    -> Text -- ^ 'tuDataSetId'
+    -> Text -- ^ 'tuProjectId'
+    -> Text -- ^ 'tuTableId'
+    -> TablesUpdate
+tablesUpdate pTuPayload_ pTuDataSetId_ pTuProjectId_ pTuTableId_ =
+    TablesUpdate
+    { _tuPayload = pTuPayload_
+    , _tuDataSetId = pTuDataSetId_
+    , _tuProjectId = pTuProjectId_
+    , _tuTableId = pTuTableId_
+    }
+
+-- | Multipart request metadata.
+tuPayload :: Lens' TablesUpdate Table
+tuPayload
+  = lens _tuPayload (\ s a -> s{_tuPayload = a})
+
+-- | Dataset ID of the table to update
+tuDataSetId :: Lens' TablesUpdate Text
+tuDataSetId
+  = lens _tuDataSetId (\ s a -> s{_tuDataSetId = a})
+
+-- | Project ID of the table to update
+tuProjectId :: Lens' TablesUpdate Text
+tuProjectId
+  = lens _tuProjectId (\ s a -> s{_tuProjectId = a})
+
+-- | Table ID of the table to update
+tuTableId :: Lens' TablesUpdate Text
+tuTableId
+  = lens _tuTableId (\ s a -> s{_tuTableId = a})
+
+instance GoogleRequest TablesUpdate where
+        type Rs TablesUpdate = Table
+        requestClient TablesUpdate{..}
+          = go _tuProjectId _tuDataSetId _tuTableId
+              (Just AltJSON)
+              _tuPayload
+              bigQueryService
+          where go
+                  = buildClient (Proxy :: Proxy TablesUpdateResource)
+                      mempty
diff --git a/gogol-bigquery.cabal b/gogol-bigquery.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-bigquery.cabal
@@ -0,0 +1,66 @@
+name:                  gogol-bigquery
+version:               0.0.1
+synopsis:              Google BigQuery SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    A data platform for customers to create, manage, share and query data.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v2@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.BigQuery
+        , Network.Google.BigQuery.Types
+        , Network.Google.Resource.BigQuery.DataSets.Delete
+        , Network.Google.Resource.BigQuery.DataSets.Get
+        , Network.Google.Resource.BigQuery.DataSets.Insert
+        , Network.Google.Resource.BigQuery.DataSets.List
+        , Network.Google.Resource.BigQuery.DataSets.Patch
+        , Network.Google.Resource.BigQuery.DataSets.Update
+        , Network.Google.Resource.BigQuery.Jobs.Cancel
+        , Network.Google.Resource.BigQuery.Jobs.Get
+        , Network.Google.Resource.BigQuery.Jobs.GetQueryResults
+        , Network.Google.Resource.BigQuery.Jobs.Insert
+        , Network.Google.Resource.BigQuery.Jobs.List
+        , Network.Google.Resource.BigQuery.Jobs.Query
+        , Network.Google.Resource.BigQuery.Projects.List
+        , Network.Google.Resource.BigQuery.TableData.InsertAll
+        , Network.Google.Resource.BigQuery.TableData.List
+        , Network.Google.Resource.BigQuery.Tables.Delete
+        , Network.Google.Resource.BigQuery.Tables.Get
+        , Network.Google.Resource.BigQuery.Tables.Insert
+        , Network.Google.Resource.BigQuery.Tables.List
+        , Network.Google.Resource.BigQuery.Tables.Patch
+        , Network.Google.Resource.BigQuery.Tables.Update
+
+    other-modules:
+          Network.Google.BigQuery.Types.Product
+        , Network.Google.BigQuery.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
