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,44 @@
+# Amazon Glue DataBrew SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-databrew)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.DataBrew](http://hackage.haskell.org/package/amazonka-databrew/docs/Amazonka-DataBrew.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## 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
+
+`amazonka-databrew` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-databrew.cabal b/amazonka-databrew.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-databrew.cabal
@@ -0,0 +1,192 @@
+cabal-version:      2.2
+name:               amazonka-databrew
+version:            2.0
+synopsis:           Amazon Glue DataBrew SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.DataBrew.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.DataBrew" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-databrew
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.DataBrew
+    Amazonka.DataBrew.BatchDeleteRecipeVersion
+    Amazonka.DataBrew.CreateDataset
+    Amazonka.DataBrew.CreateProfileJob
+    Amazonka.DataBrew.CreateProject
+    Amazonka.DataBrew.CreateRecipe
+    Amazonka.DataBrew.CreateRecipeJob
+    Amazonka.DataBrew.CreateRuleset
+    Amazonka.DataBrew.CreateSchedule
+    Amazonka.DataBrew.DeleteDataset
+    Amazonka.DataBrew.DeleteJob
+    Amazonka.DataBrew.DeleteProject
+    Amazonka.DataBrew.DeleteRecipeVersion
+    Amazonka.DataBrew.DeleteRuleset
+    Amazonka.DataBrew.DeleteSchedule
+    Amazonka.DataBrew.DescribeDataset
+    Amazonka.DataBrew.DescribeJob
+    Amazonka.DataBrew.DescribeJobRun
+    Amazonka.DataBrew.DescribeProject
+    Amazonka.DataBrew.DescribeRecipe
+    Amazonka.DataBrew.DescribeRuleset
+    Amazonka.DataBrew.DescribeSchedule
+    Amazonka.DataBrew.Lens
+    Amazonka.DataBrew.ListDatasets
+    Amazonka.DataBrew.ListJobRuns
+    Amazonka.DataBrew.ListJobs
+    Amazonka.DataBrew.ListProjects
+    Amazonka.DataBrew.ListRecipes
+    Amazonka.DataBrew.ListRecipeVersions
+    Amazonka.DataBrew.ListRulesets
+    Amazonka.DataBrew.ListSchedules
+    Amazonka.DataBrew.ListTagsForResource
+    Amazonka.DataBrew.PublishRecipe
+    Amazonka.DataBrew.SendProjectSessionAction
+    Amazonka.DataBrew.StartJobRun
+    Amazonka.DataBrew.StartProjectSession
+    Amazonka.DataBrew.StopJobRun
+    Amazonka.DataBrew.TagResource
+    Amazonka.DataBrew.Types
+    Amazonka.DataBrew.Types.AllowedStatistics
+    Amazonka.DataBrew.Types.AnalyticsMode
+    Amazonka.DataBrew.Types.ColumnSelector
+    Amazonka.DataBrew.Types.ColumnStatisticsConfiguration
+    Amazonka.DataBrew.Types.CompressionFormat
+    Amazonka.DataBrew.Types.ConditionExpression
+    Amazonka.DataBrew.Types.CsvOptions
+    Amazonka.DataBrew.Types.CsvOutputOptions
+    Amazonka.DataBrew.Types.DatabaseInputDefinition
+    Amazonka.DataBrew.Types.DatabaseOutput
+    Amazonka.DataBrew.Types.DatabaseOutputMode
+    Amazonka.DataBrew.Types.DatabaseTableOutputOptions
+    Amazonka.DataBrew.Types.DataCatalogInputDefinition
+    Amazonka.DataBrew.Types.DataCatalogOutput
+    Amazonka.DataBrew.Types.Dataset
+    Amazonka.DataBrew.Types.DatasetParameter
+    Amazonka.DataBrew.Types.DatetimeOptions
+    Amazonka.DataBrew.Types.EncryptionMode
+    Amazonka.DataBrew.Types.EntityDetectorConfiguration
+    Amazonka.DataBrew.Types.ExcelOptions
+    Amazonka.DataBrew.Types.FilesLimit
+    Amazonka.DataBrew.Types.FilterExpression
+    Amazonka.DataBrew.Types.FormatOptions
+    Amazonka.DataBrew.Types.Input
+    Amazonka.DataBrew.Types.InputFormat
+    Amazonka.DataBrew.Types.Job
+    Amazonka.DataBrew.Types.JobRun
+    Amazonka.DataBrew.Types.JobRunState
+    Amazonka.DataBrew.Types.JobSample
+    Amazonka.DataBrew.Types.JobType
+    Amazonka.DataBrew.Types.JsonOptions
+    Amazonka.DataBrew.Types.LogSubscription
+    Amazonka.DataBrew.Types.Metadata
+    Amazonka.DataBrew.Types.Order
+    Amazonka.DataBrew.Types.OrderedBy
+    Amazonka.DataBrew.Types.Output
+    Amazonka.DataBrew.Types.OutputFormat
+    Amazonka.DataBrew.Types.OutputFormatOptions
+    Amazonka.DataBrew.Types.ParameterType
+    Amazonka.DataBrew.Types.PathOptions
+    Amazonka.DataBrew.Types.ProfileConfiguration
+    Amazonka.DataBrew.Types.Project
+    Amazonka.DataBrew.Types.Recipe
+    Amazonka.DataBrew.Types.RecipeAction
+    Amazonka.DataBrew.Types.RecipeReference
+    Amazonka.DataBrew.Types.RecipeStep
+    Amazonka.DataBrew.Types.RecipeVersionErrorDetail
+    Amazonka.DataBrew.Types.Rule
+    Amazonka.DataBrew.Types.RulesetItem
+    Amazonka.DataBrew.Types.S3Location
+    Amazonka.DataBrew.Types.S3TableOutputOptions
+    Amazonka.DataBrew.Types.Sample
+    Amazonka.DataBrew.Types.SampleMode
+    Amazonka.DataBrew.Types.SampleType
+    Amazonka.DataBrew.Types.Schedule
+    Amazonka.DataBrew.Types.SessionStatus
+    Amazonka.DataBrew.Types.Source
+    Amazonka.DataBrew.Types.StatisticOverride
+    Amazonka.DataBrew.Types.StatisticsConfiguration
+    Amazonka.DataBrew.Types.Threshold
+    Amazonka.DataBrew.Types.ThresholdType
+    Amazonka.DataBrew.Types.ThresholdUnit
+    Amazonka.DataBrew.Types.ValidationConfiguration
+    Amazonka.DataBrew.Types.ValidationMode
+    Amazonka.DataBrew.Types.ViewFrame
+    Amazonka.DataBrew.UntagResource
+    Amazonka.DataBrew.UpdateDataset
+    Amazonka.DataBrew.UpdateProfileJob
+    Amazonka.DataBrew.UpdateProject
+    Amazonka.DataBrew.UpdateRecipe
+    Amazonka.DataBrew.UpdateRecipeJob
+    Amazonka.DataBrew.UpdateRuleset
+    Amazonka.DataBrew.UpdateSchedule
+    Amazonka.DataBrew.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-databrew-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.DataBrew
+    Test.Amazonka.DataBrew.Internal
+    Test.Amazonka.Gen.DataBrew
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-databrew
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchDeleteRecipeVersion.yaml b/fixture/BatchDeleteRecipeVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteRecipeVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchDeleteRecipeVersionResponse.proto b/fixture/BatchDeleteRecipeVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteRecipeVersionResponse.proto
diff --git a/fixture/CreateDataset.yaml b/fixture/CreateDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDatasetResponse.proto b/fixture/CreateDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatasetResponse.proto
diff --git a/fixture/CreateProfileJob.yaml b/fixture/CreateProfileJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProfileJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateProfileJobResponse.proto b/fixture/CreateProfileJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProfileJobResponse.proto
diff --git a/fixture/CreateProject.yaml b/fixture/CreateProject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProject.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateProjectResponse.proto b/fixture/CreateProjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProjectResponse.proto
diff --git a/fixture/CreateRecipe.yaml b/fixture/CreateRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRecipeJob.yaml b/fixture/CreateRecipeJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecipeJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRecipeJobResponse.proto b/fixture/CreateRecipeJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecipeJobResponse.proto
diff --git a/fixture/CreateRecipeResponse.proto b/fixture/CreateRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecipeResponse.proto
diff --git a/fixture/CreateRuleset.yaml b/fixture/CreateRuleset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRuleset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRulesetResponse.proto b/fixture/CreateRulesetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRulesetResponse.proto
diff --git a/fixture/CreateSchedule.yaml b/fixture/CreateSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateScheduleResponse.proto b/fixture/CreateScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateScheduleResponse.proto
diff --git a/fixture/DeleteDataset.yaml b/fixture/DeleteDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDatasetResponse.proto b/fixture/DeleteDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatasetResponse.proto
diff --git a/fixture/DeleteJob.yaml b/fixture/DeleteJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJob.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteJobResponse.proto b/fixture/DeleteJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJobResponse.proto
diff --git a/fixture/DeleteProject.yaml b/fixture/DeleteProject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProject.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteProjectResponse.proto b/fixture/DeleteProjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProjectResponse.proto
diff --git a/fixture/DeleteRecipeVersion.yaml b/fixture/DeleteRecipeVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecipeVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteRecipeVersionResponse.proto b/fixture/DeleteRecipeVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecipeVersionResponse.proto
diff --git a/fixture/DeleteRuleset.yaml b/fixture/DeleteRuleset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRuleset.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteRulesetResponse.proto b/fixture/DeleteRulesetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRulesetResponse.proto
diff --git a/fixture/DeleteSchedule.yaml b/fixture/DeleteSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteScheduleResponse.proto b/fixture/DeleteScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteScheduleResponse.proto
diff --git a/fixture/DescribeDataset.yaml b/fixture/DescribeDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDatasetResponse.proto b/fixture/DescribeDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDatasetResponse.proto
diff --git a/fixture/DescribeJob.yaml b/fixture/DescribeJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeJobResponse.proto b/fixture/DescribeJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobResponse.proto
diff --git a/fixture/DescribeJobRun.yaml b/fixture/DescribeJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeJobRunResponse.proto b/fixture/DescribeJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobRunResponse.proto
diff --git a/fixture/DescribeProject.yaml b/fixture/DescribeProject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeProject.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeProjectResponse.proto b/fixture/DescribeProjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeProjectResponse.proto
diff --git a/fixture/DescribeRecipe.yaml b/fixture/DescribeRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeRecipeResponse.proto b/fixture/DescribeRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRecipeResponse.proto
diff --git a/fixture/DescribeRuleset.yaml b/fixture/DescribeRuleset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRuleset.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeRulesetResponse.proto b/fixture/DescribeRulesetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRulesetResponse.proto
diff --git a/fixture/DescribeSchedule.yaml b/fixture/DescribeSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeScheduleResponse.proto b/fixture/DescribeScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScheduleResponse.proto
diff --git a/fixture/ListDatasets.yaml b/fixture/ListDatasets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDatasetsResponse.proto b/fixture/ListDatasetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasetsResponse.proto
diff --git a/fixture/ListJobRuns.yaml b/fixture/ListJobRuns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobRuns.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListJobRunsResponse.proto b/fixture/ListJobRunsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobRunsResponse.proto
diff --git a/fixture/ListJobs.yaml b/fixture/ListJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListJobsResponse.proto b/fixture/ListJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobsResponse.proto
diff --git a/fixture/ListProjects.yaml b/fixture/ListProjects.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProjects.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProjectsResponse.proto b/fixture/ListProjectsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProjectsResponse.proto
diff --git a/fixture/ListRecipeVersions.yaml b/fixture/ListRecipeVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecipeVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListRecipeVersionsResponse.proto b/fixture/ListRecipeVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecipeVersionsResponse.proto
diff --git a/fixture/ListRecipes.yaml b/fixture/ListRecipes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecipes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListRecipesResponse.proto b/fixture/ListRecipesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecipesResponse.proto
diff --git a/fixture/ListRulesets.yaml b/fixture/ListRulesets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRulesets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListRulesetsResponse.proto b/fixture/ListRulesetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRulesetsResponse.proto
diff --git a/fixture/ListSchedules.yaml b/fixture/ListSchedules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSchedules.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSchedulesResponse.proto b/fixture/ListSchedulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSchedulesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/PublishRecipe.yaml b/fixture/PublishRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PublishRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PublishRecipeResponse.proto b/fixture/PublishRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PublishRecipeResponse.proto
diff --git a/fixture/SendProjectSessionAction.yaml b/fixture/SendProjectSessionAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendProjectSessionAction.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SendProjectSessionActionResponse.proto b/fixture/SendProjectSessionActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendProjectSessionActionResponse.proto
diff --git a/fixture/StartJobRun.yaml b/fixture/StartJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartJobRunResponse.proto b/fixture/StartJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobRunResponse.proto
diff --git a/fixture/StartProjectSession.yaml b/fixture/StartProjectSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartProjectSession.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartProjectSessionResponse.proto b/fixture/StartProjectSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartProjectSessionResponse.proto
diff --git a/fixture/StopJobRun.yaml b/fixture/StopJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopJobRunResponse.proto b/fixture/StopJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopJobRunResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateDataset.yaml b/fixture/UpdateDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDatasetResponse.proto b/fixture/UpdateDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDatasetResponse.proto
diff --git a/fixture/UpdateProfileJob.yaml b/fixture/UpdateProfileJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateProfileJob.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateProfileJobResponse.proto b/fixture/UpdateProfileJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateProfileJobResponse.proto
diff --git a/fixture/UpdateProject.yaml b/fixture/UpdateProject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateProject.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateProjectResponse.proto b/fixture/UpdateProjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateProjectResponse.proto
diff --git a/fixture/UpdateRecipe.yaml b/fixture/UpdateRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateRecipeJob.yaml b/fixture/UpdateRecipeJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRecipeJob.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateRecipeJobResponse.proto b/fixture/UpdateRecipeJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRecipeJobResponse.proto
diff --git a/fixture/UpdateRecipeResponse.proto b/fixture/UpdateRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRecipeResponse.proto
diff --git a/fixture/UpdateRuleset.yaml b/fixture/UpdateRuleset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRuleset.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateRulesetResponse.proto b/fixture/UpdateRulesetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRulesetResponse.proto
diff --git a/fixture/UpdateSchedule.yaml b/fixture/UpdateSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/databrew/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  databrew.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateScheduleResponse.proto b/fixture/UpdateScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateScheduleResponse.proto
diff --git a/gen/Amazonka/DataBrew.hs b/gen/Amazonka/DataBrew.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew.hs
@@ -0,0 +1,632 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.DataBrew
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Glue DataBrew is a visual, cloud-scale data-preparation service.
+-- DataBrew simplifies data preparation tasks, targeting data issues that
+-- are hard to spot and time-consuming to fix. DataBrew empowers users of
+-- all technical levels to visualize the data and perform one-click data
+-- transformations, with no coding required.
+module Amazonka.DataBrew
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchDeleteRecipeVersion
+    BatchDeleteRecipeVersion (BatchDeleteRecipeVersion'),
+    newBatchDeleteRecipeVersion,
+    BatchDeleteRecipeVersionResponse (BatchDeleteRecipeVersionResponse'),
+    newBatchDeleteRecipeVersionResponse,
+
+    -- ** CreateDataset
+    CreateDataset (CreateDataset'),
+    newCreateDataset,
+    CreateDatasetResponse (CreateDatasetResponse'),
+    newCreateDatasetResponse,
+
+    -- ** CreateProfileJob
+    CreateProfileJob (CreateProfileJob'),
+    newCreateProfileJob,
+    CreateProfileJobResponse (CreateProfileJobResponse'),
+    newCreateProfileJobResponse,
+
+    -- ** CreateProject
+    CreateProject (CreateProject'),
+    newCreateProject,
+    CreateProjectResponse (CreateProjectResponse'),
+    newCreateProjectResponse,
+
+    -- ** CreateRecipe
+    CreateRecipe (CreateRecipe'),
+    newCreateRecipe,
+    CreateRecipeResponse (CreateRecipeResponse'),
+    newCreateRecipeResponse,
+
+    -- ** CreateRecipeJob
+    CreateRecipeJob (CreateRecipeJob'),
+    newCreateRecipeJob,
+    CreateRecipeJobResponse (CreateRecipeJobResponse'),
+    newCreateRecipeJobResponse,
+
+    -- ** CreateRuleset
+    CreateRuleset (CreateRuleset'),
+    newCreateRuleset,
+    CreateRulesetResponse (CreateRulesetResponse'),
+    newCreateRulesetResponse,
+
+    -- ** CreateSchedule
+    CreateSchedule (CreateSchedule'),
+    newCreateSchedule,
+    CreateScheduleResponse (CreateScheduleResponse'),
+    newCreateScheduleResponse,
+
+    -- ** DeleteDataset
+    DeleteDataset (DeleteDataset'),
+    newDeleteDataset,
+    DeleteDatasetResponse (DeleteDatasetResponse'),
+    newDeleteDatasetResponse,
+
+    -- ** DeleteJob
+    DeleteJob (DeleteJob'),
+    newDeleteJob,
+    DeleteJobResponse (DeleteJobResponse'),
+    newDeleteJobResponse,
+
+    -- ** DeleteProject
+    DeleteProject (DeleteProject'),
+    newDeleteProject,
+    DeleteProjectResponse (DeleteProjectResponse'),
+    newDeleteProjectResponse,
+
+    -- ** DeleteRecipeVersion
+    DeleteRecipeVersion (DeleteRecipeVersion'),
+    newDeleteRecipeVersion,
+    DeleteRecipeVersionResponse (DeleteRecipeVersionResponse'),
+    newDeleteRecipeVersionResponse,
+
+    -- ** DeleteRuleset
+    DeleteRuleset (DeleteRuleset'),
+    newDeleteRuleset,
+    DeleteRulesetResponse (DeleteRulesetResponse'),
+    newDeleteRulesetResponse,
+
+    -- ** DeleteSchedule
+    DeleteSchedule (DeleteSchedule'),
+    newDeleteSchedule,
+    DeleteScheduleResponse (DeleteScheduleResponse'),
+    newDeleteScheduleResponse,
+
+    -- ** DescribeDataset
+    DescribeDataset (DescribeDataset'),
+    newDescribeDataset,
+    DescribeDatasetResponse (DescribeDatasetResponse'),
+    newDescribeDatasetResponse,
+
+    -- ** DescribeJob
+    DescribeJob (DescribeJob'),
+    newDescribeJob,
+    DescribeJobResponse (DescribeJobResponse'),
+    newDescribeJobResponse,
+
+    -- ** DescribeJobRun
+    DescribeJobRun (DescribeJobRun'),
+    newDescribeJobRun,
+    DescribeJobRunResponse (DescribeJobRunResponse'),
+    newDescribeJobRunResponse,
+
+    -- ** DescribeProject
+    DescribeProject (DescribeProject'),
+    newDescribeProject,
+    DescribeProjectResponse (DescribeProjectResponse'),
+    newDescribeProjectResponse,
+
+    -- ** DescribeRecipe
+    DescribeRecipe (DescribeRecipe'),
+    newDescribeRecipe,
+    DescribeRecipeResponse (DescribeRecipeResponse'),
+    newDescribeRecipeResponse,
+
+    -- ** DescribeRuleset
+    DescribeRuleset (DescribeRuleset'),
+    newDescribeRuleset,
+    DescribeRulesetResponse (DescribeRulesetResponse'),
+    newDescribeRulesetResponse,
+
+    -- ** DescribeSchedule
+    DescribeSchedule (DescribeSchedule'),
+    newDescribeSchedule,
+    DescribeScheduleResponse (DescribeScheduleResponse'),
+    newDescribeScheduleResponse,
+
+    -- ** ListDatasets (Paginated)
+    ListDatasets (ListDatasets'),
+    newListDatasets,
+    ListDatasetsResponse (ListDatasetsResponse'),
+    newListDatasetsResponse,
+
+    -- ** ListJobRuns (Paginated)
+    ListJobRuns (ListJobRuns'),
+    newListJobRuns,
+    ListJobRunsResponse (ListJobRunsResponse'),
+    newListJobRunsResponse,
+
+    -- ** ListJobs (Paginated)
+    ListJobs (ListJobs'),
+    newListJobs,
+    ListJobsResponse (ListJobsResponse'),
+    newListJobsResponse,
+
+    -- ** ListProjects (Paginated)
+    ListProjects (ListProjects'),
+    newListProjects,
+    ListProjectsResponse (ListProjectsResponse'),
+    newListProjectsResponse,
+
+    -- ** ListRecipeVersions (Paginated)
+    ListRecipeVersions (ListRecipeVersions'),
+    newListRecipeVersions,
+    ListRecipeVersionsResponse (ListRecipeVersionsResponse'),
+    newListRecipeVersionsResponse,
+
+    -- ** ListRecipes (Paginated)
+    ListRecipes (ListRecipes'),
+    newListRecipes,
+    ListRecipesResponse (ListRecipesResponse'),
+    newListRecipesResponse,
+
+    -- ** ListRulesets (Paginated)
+    ListRulesets (ListRulesets'),
+    newListRulesets,
+    ListRulesetsResponse (ListRulesetsResponse'),
+    newListRulesetsResponse,
+
+    -- ** ListSchedules (Paginated)
+    ListSchedules (ListSchedules'),
+    newListSchedules,
+    ListSchedulesResponse (ListSchedulesResponse'),
+    newListSchedulesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PublishRecipe
+    PublishRecipe (PublishRecipe'),
+    newPublishRecipe,
+    PublishRecipeResponse (PublishRecipeResponse'),
+    newPublishRecipeResponse,
+
+    -- ** SendProjectSessionAction
+    SendProjectSessionAction (SendProjectSessionAction'),
+    newSendProjectSessionAction,
+    SendProjectSessionActionResponse (SendProjectSessionActionResponse'),
+    newSendProjectSessionActionResponse,
+
+    -- ** StartJobRun
+    StartJobRun (StartJobRun'),
+    newStartJobRun,
+    StartJobRunResponse (StartJobRunResponse'),
+    newStartJobRunResponse,
+
+    -- ** StartProjectSession
+    StartProjectSession (StartProjectSession'),
+    newStartProjectSession,
+    StartProjectSessionResponse (StartProjectSessionResponse'),
+    newStartProjectSessionResponse,
+
+    -- ** StopJobRun
+    StopJobRun (StopJobRun'),
+    newStopJobRun,
+    StopJobRunResponse (StopJobRunResponse'),
+    newStopJobRunResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDataset
+    UpdateDataset (UpdateDataset'),
+    newUpdateDataset,
+    UpdateDatasetResponse (UpdateDatasetResponse'),
+    newUpdateDatasetResponse,
+
+    -- ** UpdateProfileJob
+    UpdateProfileJob (UpdateProfileJob'),
+    newUpdateProfileJob,
+    UpdateProfileJobResponse (UpdateProfileJobResponse'),
+    newUpdateProfileJobResponse,
+
+    -- ** UpdateProject
+    UpdateProject (UpdateProject'),
+    newUpdateProject,
+    UpdateProjectResponse (UpdateProjectResponse'),
+    newUpdateProjectResponse,
+
+    -- ** UpdateRecipe
+    UpdateRecipe (UpdateRecipe'),
+    newUpdateRecipe,
+    UpdateRecipeResponse (UpdateRecipeResponse'),
+    newUpdateRecipeResponse,
+
+    -- ** UpdateRecipeJob
+    UpdateRecipeJob (UpdateRecipeJob'),
+    newUpdateRecipeJob,
+    UpdateRecipeJobResponse (UpdateRecipeJobResponse'),
+    newUpdateRecipeJobResponse,
+
+    -- ** UpdateRuleset
+    UpdateRuleset (UpdateRuleset'),
+    newUpdateRuleset,
+    UpdateRulesetResponse (UpdateRulesetResponse'),
+    newUpdateRulesetResponse,
+
+    -- ** UpdateSchedule
+    UpdateSchedule (UpdateSchedule'),
+    newUpdateSchedule,
+    UpdateScheduleResponse (UpdateScheduleResponse'),
+    newUpdateScheduleResponse,
+
+    -- * Types
+
+    -- ** AnalyticsMode
+    AnalyticsMode (..),
+
+    -- ** CompressionFormat
+    CompressionFormat (..),
+
+    -- ** DatabaseOutputMode
+    DatabaseOutputMode (..),
+
+    -- ** EncryptionMode
+    EncryptionMode (..),
+
+    -- ** InputFormat
+    InputFormat (..),
+
+    -- ** JobRunState
+    JobRunState (..),
+
+    -- ** JobType
+    JobType (..),
+
+    -- ** LogSubscription
+    LogSubscription (..),
+
+    -- ** Order
+    Order (..),
+
+    -- ** OrderedBy
+    OrderedBy (..),
+
+    -- ** OutputFormat
+    OutputFormat (..),
+
+    -- ** ParameterType
+    ParameterType (..),
+
+    -- ** SampleMode
+    SampleMode (..),
+
+    -- ** SampleType
+    SampleType (..),
+
+    -- ** SessionStatus
+    SessionStatus (..),
+
+    -- ** Source
+    Source (..),
+
+    -- ** ThresholdType
+    ThresholdType (..),
+
+    -- ** ThresholdUnit
+    ThresholdUnit (..),
+
+    -- ** ValidationMode
+    ValidationMode (..),
+
+    -- ** AllowedStatistics
+    AllowedStatistics (AllowedStatistics'),
+    newAllowedStatistics,
+
+    -- ** ColumnSelector
+    ColumnSelector (ColumnSelector'),
+    newColumnSelector,
+
+    -- ** ColumnStatisticsConfiguration
+    ColumnStatisticsConfiguration (ColumnStatisticsConfiguration'),
+    newColumnStatisticsConfiguration,
+
+    -- ** ConditionExpression
+    ConditionExpression (ConditionExpression'),
+    newConditionExpression,
+
+    -- ** CsvOptions
+    CsvOptions (CsvOptions'),
+    newCsvOptions,
+
+    -- ** CsvOutputOptions
+    CsvOutputOptions (CsvOutputOptions'),
+    newCsvOutputOptions,
+
+    -- ** DataCatalogInputDefinition
+    DataCatalogInputDefinition (DataCatalogInputDefinition'),
+    newDataCatalogInputDefinition,
+
+    -- ** DataCatalogOutput
+    DataCatalogOutput (DataCatalogOutput'),
+    newDataCatalogOutput,
+
+    -- ** DatabaseInputDefinition
+    DatabaseInputDefinition (DatabaseInputDefinition'),
+    newDatabaseInputDefinition,
+
+    -- ** DatabaseOutput
+    DatabaseOutput (DatabaseOutput'),
+    newDatabaseOutput,
+
+    -- ** DatabaseTableOutputOptions
+    DatabaseTableOutputOptions (DatabaseTableOutputOptions'),
+    newDatabaseTableOutputOptions,
+
+    -- ** Dataset
+    Dataset (Dataset'),
+    newDataset,
+
+    -- ** DatasetParameter
+    DatasetParameter (DatasetParameter'),
+    newDatasetParameter,
+
+    -- ** DatetimeOptions
+    DatetimeOptions (DatetimeOptions'),
+    newDatetimeOptions,
+
+    -- ** EntityDetectorConfiguration
+    EntityDetectorConfiguration (EntityDetectorConfiguration'),
+    newEntityDetectorConfiguration,
+
+    -- ** ExcelOptions
+    ExcelOptions (ExcelOptions'),
+    newExcelOptions,
+
+    -- ** FilesLimit
+    FilesLimit (FilesLimit'),
+    newFilesLimit,
+
+    -- ** FilterExpression
+    FilterExpression (FilterExpression'),
+    newFilterExpression,
+
+    -- ** FormatOptions
+    FormatOptions (FormatOptions'),
+    newFormatOptions,
+
+    -- ** Input
+    Input (Input'),
+    newInput,
+
+    -- ** Job
+    Job (Job'),
+    newJob,
+
+    -- ** JobRun
+    JobRun (JobRun'),
+    newJobRun,
+
+    -- ** JobSample
+    JobSample (JobSample'),
+    newJobSample,
+
+    -- ** JsonOptions
+    JsonOptions (JsonOptions'),
+    newJsonOptions,
+
+    -- ** Metadata
+    Metadata (Metadata'),
+    newMetadata,
+
+    -- ** Output
+    Output (Output'),
+    newOutput,
+
+    -- ** OutputFormatOptions
+    OutputFormatOptions (OutputFormatOptions'),
+    newOutputFormatOptions,
+
+    -- ** PathOptions
+    PathOptions (PathOptions'),
+    newPathOptions,
+
+    -- ** ProfileConfiguration
+    ProfileConfiguration (ProfileConfiguration'),
+    newProfileConfiguration,
+
+    -- ** Project
+    Project (Project'),
+    newProject,
+
+    -- ** Recipe
+    Recipe (Recipe'),
+    newRecipe,
+
+    -- ** RecipeAction
+    RecipeAction (RecipeAction'),
+    newRecipeAction,
+
+    -- ** RecipeReference
+    RecipeReference (RecipeReference'),
+    newRecipeReference,
+
+    -- ** RecipeStep
+    RecipeStep (RecipeStep'),
+    newRecipeStep,
+
+    -- ** RecipeVersionErrorDetail
+    RecipeVersionErrorDetail (RecipeVersionErrorDetail'),
+    newRecipeVersionErrorDetail,
+
+    -- ** Rule
+    Rule (Rule'),
+    newRule,
+
+    -- ** RulesetItem
+    RulesetItem (RulesetItem'),
+    newRulesetItem,
+
+    -- ** S3Location
+    S3Location (S3Location'),
+    newS3Location,
+
+    -- ** S3TableOutputOptions
+    S3TableOutputOptions (S3TableOutputOptions'),
+    newS3TableOutputOptions,
+
+    -- ** Sample
+    Sample (Sample'),
+    newSample,
+
+    -- ** Schedule
+    Schedule (Schedule'),
+    newSchedule,
+
+    -- ** StatisticOverride
+    StatisticOverride (StatisticOverride'),
+    newStatisticOverride,
+
+    -- ** StatisticsConfiguration
+    StatisticsConfiguration (StatisticsConfiguration'),
+    newStatisticsConfiguration,
+
+    -- ** Threshold
+    Threshold (Threshold'),
+    newThreshold,
+
+    -- ** ValidationConfiguration
+    ValidationConfiguration (ValidationConfiguration'),
+    newValidationConfiguration,
+
+    -- ** ViewFrame
+    ViewFrame (ViewFrame'),
+    newViewFrame,
+  )
+where
+
+import Amazonka.DataBrew.BatchDeleteRecipeVersion
+import Amazonka.DataBrew.CreateDataset
+import Amazonka.DataBrew.CreateProfileJob
+import Amazonka.DataBrew.CreateProject
+import Amazonka.DataBrew.CreateRecipe
+import Amazonka.DataBrew.CreateRecipeJob
+import Amazonka.DataBrew.CreateRuleset
+import Amazonka.DataBrew.CreateSchedule
+import Amazonka.DataBrew.DeleteDataset
+import Amazonka.DataBrew.DeleteJob
+import Amazonka.DataBrew.DeleteProject
+import Amazonka.DataBrew.DeleteRecipeVersion
+import Amazonka.DataBrew.DeleteRuleset
+import Amazonka.DataBrew.DeleteSchedule
+import Amazonka.DataBrew.DescribeDataset
+import Amazonka.DataBrew.DescribeJob
+import Amazonka.DataBrew.DescribeJobRun
+import Amazonka.DataBrew.DescribeProject
+import Amazonka.DataBrew.DescribeRecipe
+import Amazonka.DataBrew.DescribeRuleset
+import Amazonka.DataBrew.DescribeSchedule
+import Amazonka.DataBrew.Lens
+import Amazonka.DataBrew.ListDatasets
+import Amazonka.DataBrew.ListJobRuns
+import Amazonka.DataBrew.ListJobs
+import Amazonka.DataBrew.ListProjects
+import Amazonka.DataBrew.ListRecipeVersions
+import Amazonka.DataBrew.ListRecipes
+import Amazonka.DataBrew.ListRulesets
+import Amazonka.DataBrew.ListSchedules
+import Amazonka.DataBrew.ListTagsForResource
+import Amazonka.DataBrew.PublishRecipe
+import Amazonka.DataBrew.SendProjectSessionAction
+import Amazonka.DataBrew.StartJobRun
+import Amazonka.DataBrew.StartProjectSession
+import Amazonka.DataBrew.StopJobRun
+import Amazonka.DataBrew.TagResource
+import Amazonka.DataBrew.Types
+import Amazonka.DataBrew.UntagResource
+import Amazonka.DataBrew.UpdateDataset
+import Amazonka.DataBrew.UpdateProfileJob
+import Amazonka.DataBrew.UpdateProject
+import Amazonka.DataBrew.UpdateRecipe
+import Amazonka.DataBrew.UpdateRecipeJob
+import Amazonka.DataBrew.UpdateRuleset
+import Amazonka.DataBrew.UpdateSchedule
+import Amazonka.DataBrew.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'DataBrew'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/DataBrew/BatchDeleteRecipeVersion.hs b/gen/Amazonka/DataBrew/BatchDeleteRecipeVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/BatchDeleteRecipeVersion.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.BatchDeleteRecipeVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more versions of a recipe at a time.
+--
+-- The entire request will be rejected if:
+--
+-- -   The recipe does not exist.
+--
+-- -   There is an invalid version identifier in the list of versions.
+--
+-- -   The version list is empty.
+--
+-- -   The version list size exceeds 50.
+--
+-- -   The version list contains duplicate entries.
+--
+-- The request will complete successfully, but with partial failures, if:
+--
+-- -   A version does not exist.
+--
+-- -   A version is being used by a job.
+--
+-- -   You specify @LATEST_WORKING@, but it\'s being used by a project.
+--
+-- -   The version fails to be deleted.
+--
+-- The @LATEST_WORKING@ version will only be deleted if the recipe has no
+-- other versions. If you try to delete @LATEST_WORKING@ while other
+-- versions exist (or if they can\'t be deleted), then @LATEST_WORKING@
+-- will be listed as partial failure in the response.
+module Amazonka.DataBrew.BatchDeleteRecipeVersion
+  ( -- * Creating a Request
+    BatchDeleteRecipeVersion (..),
+    newBatchDeleteRecipeVersion,
+
+    -- * Request Lenses
+    batchDeleteRecipeVersion_name,
+    batchDeleteRecipeVersion_recipeVersions,
+
+    -- * Destructuring the Response
+    BatchDeleteRecipeVersionResponse (..),
+    newBatchDeleteRecipeVersionResponse,
+
+    -- * Response Lenses
+    batchDeleteRecipeVersionResponse_errors,
+    batchDeleteRecipeVersionResponse_httpStatus,
+    batchDeleteRecipeVersionResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchDeleteRecipeVersion' smart constructor.
+data BatchDeleteRecipeVersion = BatchDeleteRecipeVersion'
+  { -- | The name of the recipe whose versions are to be deleted.
+    name :: Prelude.Text,
+    -- | An array of version identifiers, for the recipe versions to be deleted.
+    -- You can specify numeric versions (@X.Y@) or @LATEST_WORKING@.
+    -- @LATEST_PUBLISHED@ is not supported.
+    recipeVersions :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteRecipeVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'batchDeleteRecipeVersion_name' - The name of the recipe whose versions are to be deleted.
+--
+-- 'recipeVersions', 'batchDeleteRecipeVersion_recipeVersions' - An array of version identifiers, for the recipe versions to be deleted.
+-- You can specify numeric versions (@X.Y@) or @LATEST_WORKING@.
+-- @LATEST_PUBLISHED@ is not supported.
+newBatchDeleteRecipeVersion ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recipeVersions'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchDeleteRecipeVersion
+newBatchDeleteRecipeVersion pName_ pRecipeVersions_ =
+  BatchDeleteRecipeVersion'
+    { name = pName_,
+      recipeVersions =
+        Lens.coerced Lens.# pRecipeVersions_
+    }
+
+-- | The name of the recipe whose versions are to be deleted.
+batchDeleteRecipeVersion_name :: Lens.Lens' BatchDeleteRecipeVersion Prelude.Text
+batchDeleteRecipeVersion_name = Lens.lens (\BatchDeleteRecipeVersion' {name} -> name) (\s@BatchDeleteRecipeVersion' {} a -> s {name = a} :: BatchDeleteRecipeVersion)
+
+-- | An array of version identifiers, for the recipe versions to be deleted.
+-- You can specify numeric versions (@X.Y@) or @LATEST_WORKING@.
+-- @LATEST_PUBLISHED@ is not supported.
+batchDeleteRecipeVersion_recipeVersions :: Lens.Lens' BatchDeleteRecipeVersion (Prelude.NonEmpty Prelude.Text)
+batchDeleteRecipeVersion_recipeVersions = Lens.lens (\BatchDeleteRecipeVersion' {recipeVersions} -> recipeVersions) (\s@BatchDeleteRecipeVersion' {} a -> s {recipeVersions = a} :: BatchDeleteRecipeVersion) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDeleteRecipeVersion where
+  type
+    AWSResponse BatchDeleteRecipeVersion =
+      BatchDeleteRecipeVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDeleteRecipeVersionResponse'
+            Prelude.<$> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable BatchDeleteRecipeVersion where
+  hashWithSalt _salt BatchDeleteRecipeVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recipeVersions
+
+instance Prelude.NFData BatchDeleteRecipeVersion where
+  rnf BatchDeleteRecipeVersion' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recipeVersions
+
+instance Data.ToHeaders BatchDeleteRecipeVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDeleteRecipeVersion where
+  toJSON BatchDeleteRecipeVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("RecipeVersions" Data..= recipeVersions)
+          ]
+      )
+
+instance Data.ToPath BatchDeleteRecipeVersion where
+  toPath BatchDeleteRecipeVersion' {..} =
+    Prelude.mconcat
+      [ "/recipes/",
+        Data.toBS name,
+        "/batchDeleteRecipeVersion"
+      ]
+
+instance Data.ToQuery BatchDeleteRecipeVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDeleteRecipeVersionResponse' smart constructor.
+data BatchDeleteRecipeVersionResponse = BatchDeleteRecipeVersionResponse'
+  { -- | Errors, if any, that occurred while attempting to delete the recipe
+    -- versions.
+    errors :: Prelude.Maybe [RecipeVersionErrorDetail],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the recipe that was modified.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteRecipeVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchDeleteRecipeVersionResponse_errors' - Errors, if any, that occurred while attempting to delete the recipe
+-- versions.
+--
+-- 'httpStatus', 'batchDeleteRecipeVersionResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'batchDeleteRecipeVersionResponse_name' - The name of the recipe that was modified.
+newBatchDeleteRecipeVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  BatchDeleteRecipeVersionResponse
+newBatchDeleteRecipeVersionResponse
+  pHttpStatus_
+  pName_ =
+    BatchDeleteRecipeVersionResponse'
+      { errors =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_
+      }
+
+-- | Errors, if any, that occurred while attempting to delete the recipe
+-- versions.
+batchDeleteRecipeVersionResponse_errors :: Lens.Lens' BatchDeleteRecipeVersionResponse (Prelude.Maybe [RecipeVersionErrorDetail])
+batchDeleteRecipeVersionResponse_errors = Lens.lens (\BatchDeleteRecipeVersionResponse' {errors} -> errors) (\s@BatchDeleteRecipeVersionResponse' {} a -> s {errors = a} :: BatchDeleteRecipeVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchDeleteRecipeVersionResponse_httpStatus :: Lens.Lens' BatchDeleteRecipeVersionResponse Prelude.Int
+batchDeleteRecipeVersionResponse_httpStatus = Lens.lens (\BatchDeleteRecipeVersionResponse' {httpStatus} -> httpStatus) (\s@BatchDeleteRecipeVersionResponse' {} a -> s {httpStatus = a} :: BatchDeleteRecipeVersionResponse)
+
+-- | The name of the recipe that was modified.
+batchDeleteRecipeVersionResponse_name :: Lens.Lens' BatchDeleteRecipeVersionResponse Prelude.Text
+batchDeleteRecipeVersionResponse_name = Lens.lens (\BatchDeleteRecipeVersionResponse' {name} -> name) (\s@BatchDeleteRecipeVersionResponse' {} a -> s {name = a} :: BatchDeleteRecipeVersionResponse)
+
+instance
+  Prelude.NFData
+    BatchDeleteRecipeVersionResponse
+  where
+  rnf BatchDeleteRecipeVersionResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateDataset.hs b/gen/Amazonka/DataBrew/CreateDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateDataset.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new DataBrew dataset.
+module Amazonka.DataBrew.CreateDataset
+  ( -- * Creating a Request
+    CreateDataset (..),
+    newCreateDataset,
+
+    -- * Request Lenses
+    createDataset_format,
+    createDataset_formatOptions,
+    createDataset_pathOptions,
+    createDataset_tags,
+    createDataset_name,
+    createDataset_input,
+
+    -- * Destructuring the Response
+    CreateDatasetResponse (..),
+    newCreateDatasetResponse,
+
+    -- * Response Lenses
+    createDatasetResponse_httpStatus,
+    createDatasetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDataset' smart constructor.
+data CreateDataset = CreateDataset'
+  { -- | The file format of a dataset that is created from an Amazon S3 file or
+    -- folder.
+    format :: Prelude.Maybe InputFormat,
+    formatOptions :: Prelude.Maybe FormatOptions,
+    -- | A set of options that defines how DataBrew interprets an Amazon S3 path
+    -- of the dataset.
+    pathOptions :: Prelude.Maybe PathOptions,
+    -- | Metadata tags to apply to this dataset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the dataset to be created. Valid characters are alphanumeric
+    -- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text,
+    input :: Input
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'createDataset_format' - The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+--
+-- 'formatOptions', 'createDataset_formatOptions' - Undocumented member.
+--
+-- 'pathOptions', 'createDataset_pathOptions' - A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+--
+-- 'tags', 'createDataset_tags' - Metadata tags to apply to this dataset.
+--
+-- 'name', 'createDataset_name' - The name of the dataset to be created. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+--
+-- 'input', 'createDataset_input' - Undocumented member.
+newCreateDataset ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'input'
+  Input ->
+  CreateDataset
+newCreateDataset pName_ pInput_ =
+  CreateDataset'
+    { format = Prelude.Nothing,
+      formatOptions = Prelude.Nothing,
+      pathOptions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      input = pInput_
+    }
+
+-- | The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+createDataset_format :: Lens.Lens' CreateDataset (Prelude.Maybe InputFormat)
+createDataset_format = Lens.lens (\CreateDataset' {format} -> format) (\s@CreateDataset' {} a -> s {format = a} :: CreateDataset)
+
+-- | Undocumented member.
+createDataset_formatOptions :: Lens.Lens' CreateDataset (Prelude.Maybe FormatOptions)
+createDataset_formatOptions = Lens.lens (\CreateDataset' {formatOptions} -> formatOptions) (\s@CreateDataset' {} a -> s {formatOptions = a} :: CreateDataset)
+
+-- | A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+createDataset_pathOptions :: Lens.Lens' CreateDataset (Prelude.Maybe PathOptions)
+createDataset_pathOptions = Lens.lens (\CreateDataset' {pathOptions} -> pathOptions) (\s@CreateDataset' {} a -> s {pathOptions = a} :: CreateDataset)
+
+-- | Metadata tags to apply to this dataset.
+createDataset_tags :: Lens.Lens' CreateDataset (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDataset_tags = Lens.lens (\CreateDataset' {tags} -> tags) (\s@CreateDataset' {} a -> s {tags = a} :: CreateDataset) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dataset to be created. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+createDataset_name :: Lens.Lens' CreateDataset Prelude.Text
+createDataset_name = Lens.lens (\CreateDataset' {name} -> name) (\s@CreateDataset' {} a -> s {name = a} :: CreateDataset)
+
+-- | Undocumented member.
+createDataset_input :: Lens.Lens' CreateDataset Input
+createDataset_input = Lens.lens (\CreateDataset' {input} -> input) (\s@CreateDataset' {} a -> s {input = a} :: CreateDataset)
+
+instance Core.AWSRequest CreateDataset where
+  type
+    AWSResponse CreateDataset =
+      CreateDatasetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDatasetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateDataset where
+  hashWithSalt _salt CreateDataset' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` formatOptions
+      `Prelude.hashWithSalt` pathOptions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` input
+
+instance Prelude.NFData CreateDataset where
+  rnf CreateDataset' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf formatOptions
+      `Prelude.seq` Prelude.rnf pathOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf input
+
+instance Data.ToHeaders CreateDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDataset where
+  toJSON CreateDataset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("FormatOptions" Data..=) Prelude.<$> formatOptions,
+            ("PathOptions" Data..=) Prelude.<$> pathOptions,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Input" Data..= input)
+          ]
+      )
+
+instance Data.ToPath CreateDataset where
+  toPath = Prelude.const "/datasets"
+
+instance Data.ToQuery CreateDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDatasetResponse' smart constructor.
+data CreateDatasetResponse = CreateDatasetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the dataset that you created.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createDatasetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createDatasetResponse_name' - The name of the dataset that you created.
+newCreateDatasetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateDatasetResponse
+newCreateDatasetResponse pHttpStatus_ pName_ =
+  CreateDatasetResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createDatasetResponse_httpStatus :: Lens.Lens' CreateDatasetResponse Prelude.Int
+createDatasetResponse_httpStatus = Lens.lens (\CreateDatasetResponse' {httpStatus} -> httpStatus) (\s@CreateDatasetResponse' {} a -> s {httpStatus = a} :: CreateDatasetResponse)
+
+-- | The name of the dataset that you created.
+createDatasetResponse_name :: Lens.Lens' CreateDatasetResponse Prelude.Text
+createDatasetResponse_name = Lens.lens (\CreateDatasetResponse' {name} -> name) (\s@CreateDatasetResponse' {} a -> s {name = a} :: CreateDatasetResponse)
+
+instance Prelude.NFData CreateDatasetResponse where
+  rnf CreateDatasetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateProfileJob.hs b/gen/Amazonka/DataBrew/CreateProfileJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateProfileJob.hs
@@ -0,0 +1,402 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateProfileJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new job to analyze a dataset and create its data profile.
+module Amazonka.DataBrew.CreateProfileJob
+  ( -- * Creating a Request
+    CreateProfileJob (..),
+    newCreateProfileJob,
+
+    -- * Request Lenses
+    createProfileJob_configuration,
+    createProfileJob_encryptionKeyArn,
+    createProfileJob_encryptionMode,
+    createProfileJob_jobSample,
+    createProfileJob_logSubscription,
+    createProfileJob_maxCapacity,
+    createProfileJob_maxRetries,
+    createProfileJob_tags,
+    createProfileJob_timeout,
+    createProfileJob_validationConfigurations,
+    createProfileJob_datasetName,
+    createProfileJob_name,
+    createProfileJob_outputLocation,
+    createProfileJob_roleArn,
+
+    -- * Destructuring the Response
+    CreateProfileJobResponse (..),
+    newCreateProfileJobResponse,
+
+    -- * Response Lenses
+    createProfileJobResponse_httpStatus,
+    createProfileJobResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateProfileJob' smart constructor.
+data CreateProfileJob = CreateProfileJob'
+  { -- | Configuration for profile jobs. Used to select columns, do evaluations,
+    -- and override default parameters of evaluations. When configuration is
+    -- null, the profile job will run with default settings.
+    configuration :: Prelude.Maybe ProfileConfiguration,
+    -- | The Amazon Resource Name (ARN) of an encryption key that is used to
+    -- protect the job.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The encryption mode for the job, which can be one of the following:
+    --
+    -- -   @SSE-KMS@ - @SSE-KMS@ - Server-side encryption with KMS-managed
+    --     keys.
+    --
+    -- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+    encryptionMode :: Prelude.Maybe EncryptionMode,
+    -- | Sample configuration for profile jobs only. Determines the number of
+    -- rows on which the profile job will be executed. If a JobSample value is
+    -- not provided, the default value will be used. The default value is
+    -- CUSTOM_ROWS for the mode parameter and 20000 for the size parameter.
+    jobSample :: Prelude.Maybe JobSample,
+    -- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+    -- enabled, CloudWatch writes one log stream for each job run.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | The maximum number of nodes that DataBrew can use when the job processes
+    -- data.
+    maxCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of times to retry the job after a job run fails.
+    maxRetries :: Prelude.Maybe Prelude.Natural,
+    -- | Metadata tags to apply to this job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The job\'s timeout in minutes. A job that attempts to run longer than
+    -- this timeout period ends with a status of @TIMEOUT@.
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | List of validation configurations that are applied to the profile job.
+    validationConfigurations :: Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration),
+    -- | The name of the dataset that this job is to act upon.
+    datasetName :: Prelude.Text,
+    -- | The name of the job to be created. Valid characters are alphanumeric
+    -- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text,
+    outputLocation :: S3Location,
+    -- | The Amazon Resource Name (ARN) of the Identity and Access Management
+    -- (IAM) role to be assumed when DataBrew runs the job.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProfileJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'createProfileJob_configuration' - Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+--
+-- 'encryptionKeyArn', 'createProfileJob_encryptionKeyArn' - The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+--
+-- 'encryptionMode', 'createProfileJob_encryptionMode' - The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - @SSE-KMS@ - Server-side encryption with KMS-managed
+--     keys.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+--
+-- 'jobSample', 'createProfileJob_jobSample' - Sample configuration for profile jobs only. Determines the number of
+-- rows on which the profile job will be executed. If a JobSample value is
+-- not provided, the default value will be used. The default value is
+-- CUSTOM_ROWS for the mode parameter and 20000 for the size parameter.
+--
+-- 'logSubscription', 'createProfileJob_logSubscription' - Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+--
+-- 'maxCapacity', 'createProfileJob_maxCapacity' - The maximum number of nodes that DataBrew can use when the job processes
+-- data.
+--
+-- 'maxRetries', 'createProfileJob_maxRetries' - The maximum number of times to retry the job after a job run fails.
+--
+-- 'tags', 'createProfileJob_tags' - Metadata tags to apply to this job.
+--
+-- 'timeout', 'createProfileJob_timeout' - The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+--
+-- 'validationConfigurations', 'createProfileJob_validationConfigurations' - List of validation configurations that are applied to the profile job.
+--
+-- 'datasetName', 'createProfileJob_datasetName' - The name of the dataset that this job is to act upon.
+--
+-- 'name', 'createProfileJob_name' - The name of the job to be created. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+--
+-- 'outputLocation', 'createProfileJob_outputLocation' - Undocumented member.
+--
+-- 'roleArn', 'createProfileJob_roleArn' - The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+newCreateProfileJob ::
+  -- | 'datasetName'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'outputLocation'
+  S3Location ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateProfileJob
+newCreateProfileJob
+  pDatasetName_
+  pName_
+  pOutputLocation_
+  pRoleArn_ =
+    CreateProfileJob'
+      { configuration = Prelude.Nothing,
+        encryptionKeyArn = Prelude.Nothing,
+        encryptionMode = Prelude.Nothing,
+        jobSample = Prelude.Nothing,
+        logSubscription = Prelude.Nothing,
+        maxCapacity = Prelude.Nothing,
+        maxRetries = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        timeout = Prelude.Nothing,
+        validationConfigurations = Prelude.Nothing,
+        datasetName = pDatasetName_,
+        name = pName_,
+        outputLocation = pOutputLocation_,
+        roleArn = pRoleArn_
+      }
+
+-- | Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+createProfileJob_configuration :: Lens.Lens' CreateProfileJob (Prelude.Maybe ProfileConfiguration)
+createProfileJob_configuration = Lens.lens (\CreateProfileJob' {configuration} -> configuration) (\s@CreateProfileJob' {} a -> s {configuration = a} :: CreateProfileJob)
+
+-- | The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+createProfileJob_encryptionKeyArn :: Lens.Lens' CreateProfileJob (Prelude.Maybe Prelude.Text)
+createProfileJob_encryptionKeyArn = Lens.lens (\CreateProfileJob' {encryptionKeyArn} -> encryptionKeyArn) (\s@CreateProfileJob' {} a -> s {encryptionKeyArn = a} :: CreateProfileJob)
+
+-- | The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - @SSE-KMS@ - Server-side encryption with KMS-managed
+--     keys.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+createProfileJob_encryptionMode :: Lens.Lens' CreateProfileJob (Prelude.Maybe EncryptionMode)
+createProfileJob_encryptionMode = Lens.lens (\CreateProfileJob' {encryptionMode} -> encryptionMode) (\s@CreateProfileJob' {} a -> s {encryptionMode = a} :: CreateProfileJob)
+
+-- | Sample configuration for profile jobs only. Determines the number of
+-- rows on which the profile job will be executed. If a JobSample value is
+-- not provided, the default value will be used. The default value is
+-- CUSTOM_ROWS for the mode parameter and 20000 for the size parameter.
+createProfileJob_jobSample :: Lens.Lens' CreateProfileJob (Prelude.Maybe JobSample)
+createProfileJob_jobSample = Lens.lens (\CreateProfileJob' {jobSample} -> jobSample) (\s@CreateProfileJob' {} a -> s {jobSample = a} :: CreateProfileJob)
+
+-- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+createProfileJob_logSubscription :: Lens.Lens' CreateProfileJob (Prelude.Maybe LogSubscription)
+createProfileJob_logSubscription = Lens.lens (\CreateProfileJob' {logSubscription} -> logSubscription) (\s@CreateProfileJob' {} a -> s {logSubscription = a} :: CreateProfileJob)
+
+-- | The maximum number of nodes that DataBrew can use when the job processes
+-- data.
+createProfileJob_maxCapacity :: Lens.Lens' CreateProfileJob (Prelude.Maybe Prelude.Int)
+createProfileJob_maxCapacity = Lens.lens (\CreateProfileJob' {maxCapacity} -> maxCapacity) (\s@CreateProfileJob' {} a -> s {maxCapacity = a} :: CreateProfileJob)
+
+-- | The maximum number of times to retry the job after a job run fails.
+createProfileJob_maxRetries :: Lens.Lens' CreateProfileJob (Prelude.Maybe Prelude.Natural)
+createProfileJob_maxRetries = Lens.lens (\CreateProfileJob' {maxRetries} -> maxRetries) (\s@CreateProfileJob' {} a -> s {maxRetries = a} :: CreateProfileJob)
+
+-- | Metadata tags to apply to this job.
+createProfileJob_tags :: Lens.Lens' CreateProfileJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createProfileJob_tags = Lens.lens (\CreateProfileJob' {tags} -> tags) (\s@CreateProfileJob' {} a -> s {tags = a} :: CreateProfileJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+createProfileJob_timeout :: Lens.Lens' CreateProfileJob (Prelude.Maybe Prelude.Natural)
+createProfileJob_timeout = Lens.lens (\CreateProfileJob' {timeout} -> timeout) (\s@CreateProfileJob' {} a -> s {timeout = a} :: CreateProfileJob)
+
+-- | List of validation configurations that are applied to the profile job.
+createProfileJob_validationConfigurations :: Lens.Lens' CreateProfileJob (Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration))
+createProfileJob_validationConfigurations = Lens.lens (\CreateProfileJob' {validationConfigurations} -> validationConfigurations) (\s@CreateProfileJob' {} a -> s {validationConfigurations = a} :: CreateProfileJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dataset that this job is to act upon.
+createProfileJob_datasetName :: Lens.Lens' CreateProfileJob Prelude.Text
+createProfileJob_datasetName = Lens.lens (\CreateProfileJob' {datasetName} -> datasetName) (\s@CreateProfileJob' {} a -> s {datasetName = a} :: CreateProfileJob)
+
+-- | The name of the job to be created. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+createProfileJob_name :: Lens.Lens' CreateProfileJob Prelude.Text
+createProfileJob_name = Lens.lens (\CreateProfileJob' {name} -> name) (\s@CreateProfileJob' {} a -> s {name = a} :: CreateProfileJob)
+
+-- | Undocumented member.
+createProfileJob_outputLocation :: Lens.Lens' CreateProfileJob S3Location
+createProfileJob_outputLocation = Lens.lens (\CreateProfileJob' {outputLocation} -> outputLocation) (\s@CreateProfileJob' {} a -> s {outputLocation = a} :: CreateProfileJob)
+
+-- | The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+createProfileJob_roleArn :: Lens.Lens' CreateProfileJob Prelude.Text
+createProfileJob_roleArn = Lens.lens (\CreateProfileJob' {roleArn} -> roleArn) (\s@CreateProfileJob' {} a -> s {roleArn = a} :: CreateProfileJob)
+
+instance Core.AWSRequest CreateProfileJob where
+  type
+    AWSResponse CreateProfileJob =
+      CreateProfileJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProfileJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateProfileJob where
+  hashWithSalt _salt CreateProfileJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` encryptionKeyArn
+      `Prelude.hashWithSalt` encryptionMode
+      `Prelude.hashWithSalt` jobSample
+      `Prelude.hashWithSalt` logSubscription
+      `Prelude.hashWithSalt` maxCapacity
+      `Prelude.hashWithSalt` maxRetries
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeout
+      `Prelude.hashWithSalt` validationConfigurations
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateProfileJob where
+  rnf CreateProfileJob' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf encryptionMode
+      `Prelude.seq` Prelude.rnf jobSample
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf maxCapacity
+      `Prelude.seq` Prelude.rnf maxRetries
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf validationConfigurations
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateProfileJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateProfileJob where
+  toJSON CreateProfileJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Configuration" Data..=) Prelude.<$> configuration,
+            ("EncryptionKeyArn" Data..=)
+              Prelude.<$> encryptionKeyArn,
+            ("EncryptionMode" Data..=)
+              Prelude.<$> encryptionMode,
+            ("JobSample" Data..=) Prelude.<$> jobSample,
+            ("LogSubscription" Data..=)
+              Prelude.<$> logSubscription,
+            ("MaxCapacity" Data..=) Prelude.<$> maxCapacity,
+            ("MaxRetries" Data..=) Prelude.<$> maxRetries,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Timeout" Data..=) Prelude.<$> timeout,
+            ("ValidationConfigurations" Data..=)
+              Prelude.<$> validationConfigurations,
+            Prelude.Just ("DatasetName" Data..= datasetName),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("OutputLocation" Data..= outputLocation),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateProfileJob where
+  toPath = Prelude.const "/profileJobs"
+
+instance Data.ToQuery CreateProfileJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateProfileJobResponse' smart constructor.
+data CreateProfileJobResponse = CreateProfileJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job that was created.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProfileJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createProfileJobResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createProfileJobResponse_name' - The name of the job that was created.
+newCreateProfileJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateProfileJobResponse
+newCreateProfileJobResponse pHttpStatus_ pName_ =
+  CreateProfileJobResponse'
+    { httpStatus =
+        pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createProfileJobResponse_httpStatus :: Lens.Lens' CreateProfileJobResponse Prelude.Int
+createProfileJobResponse_httpStatus = Lens.lens (\CreateProfileJobResponse' {httpStatus} -> httpStatus) (\s@CreateProfileJobResponse' {} a -> s {httpStatus = a} :: CreateProfileJobResponse)
+
+-- | The name of the job that was created.
+createProfileJobResponse_name :: Lens.Lens' CreateProfileJobResponse Prelude.Text
+createProfileJobResponse_name = Lens.lens (\CreateProfileJobResponse' {name} -> name) (\s@CreateProfileJobResponse' {} a -> s {name = a} :: CreateProfileJobResponse)
+
+instance Prelude.NFData CreateProfileJobResponse where
+  rnf CreateProfileJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateProject.hs b/gen/Amazonka/DataBrew/CreateProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateProject.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new DataBrew project.
+module Amazonka.DataBrew.CreateProject
+  ( -- * Creating a Request
+    CreateProject (..),
+    newCreateProject,
+
+    -- * Request Lenses
+    createProject_sample,
+    createProject_tags,
+    createProject_datasetName,
+    createProject_name,
+    createProject_recipeName,
+    createProject_roleArn,
+
+    -- * Destructuring the Response
+    CreateProjectResponse (..),
+    newCreateProjectResponse,
+
+    -- * Response Lenses
+    createProjectResponse_httpStatus,
+    createProjectResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateProject' smart constructor.
+data CreateProject = CreateProject'
+  { sample :: Prelude.Maybe Sample,
+    -- | Metadata tags to apply to this project.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of an existing dataset to associate this project with.
+    datasetName :: Prelude.Text,
+    -- | A unique name for the new project. Valid characters are alphanumeric
+    -- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text,
+    -- | The name of an existing recipe to associate with the project.
+    recipeName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Identity and Access Management
+    -- (IAM) role to be assumed for this request.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sample', 'createProject_sample' - Undocumented member.
+--
+-- 'tags', 'createProject_tags' - Metadata tags to apply to this project.
+--
+-- 'datasetName', 'createProject_datasetName' - The name of an existing dataset to associate this project with.
+--
+-- 'name', 'createProject_name' - A unique name for the new project. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+--
+-- 'recipeName', 'createProject_recipeName' - The name of an existing recipe to associate with the project.
+--
+-- 'roleArn', 'createProject_roleArn' - The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed for this request.
+newCreateProject ::
+  -- | 'datasetName'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recipeName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateProject
+newCreateProject
+  pDatasetName_
+  pName_
+  pRecipeName_
+  pRoleArn_ =
+    CreateProject'
+      { sample = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        datasetName = pDatasetName_,
+        name = pName_,
+        recipeName = pRecipeName_,
+        roleArn = pRoleArn_
+      }
+
+-- | Undocumented member.
+createProject_sample :: Lens.Lens' CreateProject (Prelude.Maybe Sample)
+createProject_sample = Lens.lens (\CreateProject' {sample} -> sample) (\s@CreateProject' {} a -> s {sample = a} :: CreateProject)
+
+-- | Metadata tags to apply to this project.
+createProject_tags :: Lens.Lens' CreateProject (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createProject_tags = Lens.lens (\CreateProject' {tags} -> tags) (\s@CreateProject' {} a -> s {tags = a} :: CreateProject) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of an existing dataset to associate this project with.
+createProject_datasetName :: Lens.Lens' CreateProject Prelude.Text
+createProject_datasetName = Lens.lens (\CreateProject' {datasetName} -> datasetName) (\s@CreateProject' {} a -> s {datasetName = a} :: CreateProject)
+
+-- | A unique name for the new project. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+createProject_name :: Lens.Lens' CreateProject Prelude.Text
+createProject_name = Lens.lens (\CreateProject' {name} -> name) (\s@CreateProject' {} a -> s {name = a} :: CreateProject)
+
+-- | The name of an existing recipe to associate with the project.
+createProject_recipeName :: Lens.Lens' CreateProject Prelude.Text
+createProject_recipeName = Lens.lens (\CreateProject' {recipeName} -> recipeName) (\s@CreateProject' {} a -> s {recipeName = a} :: CreateProject)
+
+-- | The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed for this request.
+createProject_roleArn :: Lens.Lens' CreateProject Prelude.Text
+createProject_roleArn = Lens.lens (\CreateProject' {roleArn} -> roleArn) (\s@CreateProject' {} a -> s {roleArn = a} :: CreateProject)
+
+instance Core.AWSRequest CreateProject where
+  type
+    AWSResponse CreateProject =
+      CreateProjectResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProjectResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateProject where
+  hashWithSalt _salt CreateProject' {..} =
+    _salt
+      `Prelude.hashWithSalt` sample
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recipeName
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateProject where
+  rnf CreateProject' {..} =
+    Prelude.rnf sample
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recipeName
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateProject where
+  toJSON CreateProject' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Sample" Data..=) Prelude.<$> sample,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("DatasetName" Data..= datasetName),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("RecipeName" Data..= recipeName),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateProject where
+  toPath = Prelude.const "/projects"
+
+instance Data.ToQuery CreateProject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateProjectResponse' smart constructor.
+data CreateProjectResponse = CreateProjectResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the project that you created.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createProjectResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createProjectResponse_name' - The name of the project that you created.
+newCreateProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateProjectResponse
+newCreateProjectResponse pHttpStatus_ pName_ =
+  CreateProjectResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createProjectResponse_httpStatus :: Lens.Lens' CreateProjectResponse Prelude.Int
+createProjectResponse_httpStatus = Lens.lens (\CreateProjectResponse' {httpStatus} -> httpStatus) (\s@CreateProjectResponse' {} a -> s {httpStatus = a} :: CreateProjectResponse)
+
+-- | The name of the project that you created.
+createProjectResponse_name :: Lens.Lens' CreateProjectResponse Prelude.Text
+createProjectResponse_name = Lens.lens (\CreateProjectResponse' {name} -> name) (\s@CreateProjectResponse' {} a -> s {name = a} :: CreateProjectResponse)
+
+instance Prelude.NFData CreateProjectResponse where
+  rnf CreateProjectResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateRecipe.hs b/gen/Amazonka/DataBrew/CreateRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateRecipe.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new DataBrew recipe.
+module Amazonka.DataBrew.CreateRecipe
+  ( -- * Creating a Request
+    CreateRecipe (..),
+    newCreateRecipe,
+
+    -- * Request Lenses
+    createRecipe_description,
+    createRecipe_tags,
+    createRecipe_name,
+    createRecipe_steps,
+
+    -- * Destructuring the Response
+    CreateRecipeResponse (..),
+    newCreateRecipeResponse,
+
+    -- * Response Lenses
+    createRecipeResponse_httpStatus,
+    createRecipeResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRecipe' smart constructor.
+data CreateRecipe = CreateRecipe'
+  { -- | A description for the recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata tags to apply to this recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique name for the recipe. Valid characters are alphanumeric (A-Z,
+    -- a-z, 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text,
+    -- | An array containing the steps to be performed by the recipe. Each recipe
+    -- step consists of one recipe action and (optionally) an array of
+    -- condition expressions.
+    steps :: [RecipeStep]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createRecipe_description' - A description for the recipe.
+--
+-- 'tags', 'createRecipe_tags' - Metadata tags to apply to this recipe.
+--
+-- 'name', 'createRecipe_name' - A unique name for the recipe. Valid characters are alphanumeric (A-Z,
+-- a-z, 0-9), hyphen (-), period (.), and space.
+--
+-- 'steps', 'createRecipe_steps' - An array containing the steps to be performed by the recipe. Each recipe
+-- step consists of one recipe action and (optionally) an array of
+-- condition expressions.
+newCreateRecipe ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateRecipe
+newCreateRecipe pName_ =
+  CreateRecipe'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      steps = Prelude.mempty
+    }
+
+-- | A description for the recipe.
+createRecipe_description :: Lens.Lens' CreateRecipe (Prelude.Maybe Prelude.Text)
+createRecipe_description = Lens.lens (\CreateRecipe' {description} -> description) (\s@CreateRecipe' {} a -> s {description = a} :: CreateRecipe)
+
+-- | Metadata tags to apply to this recipe.
+createRecipe_tags :: Lens.Lens' CreateRecipe (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRecipe_tags = Lens.lens (\CreateRecipe' {tags} -> tags) (\s@CreateRecipe' {} a -> s {tags = a} :: CreateRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique name for the recipe. Valid characters are alphanumeric (A-Z,
+-- a-z, 0-9), hyphen (-), period (.), and space.
+createRecipe_name :: Lens.Lens' CreateRecipe Prelude.Text
+createRecipe_name = Lens.lens (\CreateRecipe' {name} -> name) (\s@CreateRecipe' {} a -> s {name = a} :: CreateRecipe)
+
+-- | An array containing the steps to be performed by the recipe. Each recipe
+-- step consists of one recipe action and (optionally) an array of
+-- condition expressions.
+createRecipe_steps :: Lens.Lens' CreateRecipe [RecipeStep]
+createRecipe_steps = Lens.lens (\CreateRecipe' {steps} -> steps) (\s@CreateRecipe' {} a -> s {steps = a} :: CreateRecipe) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateRecipe where
+  type AWSResponse CreateRecipe = CreateRecipeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRecipeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateRecipe where
+  hashWithSalt _salt CreateRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` steps
+
+instance Prelude.NFData CreateRecipe where
+  rnf CreateRecipe' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf steps
+
+instance Data.ToHeaders CreateRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRecipe where
+  toJSON CreateRecipe' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Steps" Data..= steps)
+          ]
+      )
+
+instance Data.ToPath CreateRecipe where
+  toPath = Prelude.const "/recipes"
+
+instance Data.ToQuery CreateRecipe where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRecipeResponse' smart constructor.
+data CreateRecipeResponse = CreateRecipeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the recipe that you created.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createRecipeResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createRecipeResponse_name' - The name of the recipe that you created.
+newCreateRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateRecipeResponse
+newCreateRecipeResponse pHttpStatus_ pName_ =
+  CreateRecipeResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createRecipeResponse_httpStatus :: Lens.Lens' CreateRecipeResponse Prelude.Int
+createRecipeResponse_httpStatus = Lens.lens (\CreateRecipeResponse' {httpStatus} -> httpStatus) (\s@CreateRecipeResponse' {} a -> s {httpStatus = a} :: CreateRecipeResponse)
+
+-- | The name of the recipe that you created.
+createRecipeResponse_name :: Lens.Lens' CreateRecipeResponse Prelude.Text
+createRecipeResponse_name = Lens.lens (\CreateRecipeResponse' {name} -> name) (\s@CreateRecipeResponse' {} a -> s {name = a} :: CreateRecipeResponse)
+
+instance Prelude.NFData CreateRecipeResponse where
+  rnf CreateRecipeResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateRecipeJob.hs b/gen/Amazonka/DataBrew/CreateRecipeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateRecipeJob.hs
@@ -0,0 +1,400 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateRecipeJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new job to transform input data, using steps defined in an
+-- existing Glue DataBrew recipe
+module Amazonka.DataBrew.CreateRecipeJob
+  ( -- * Creating a Request
+    CreateRecipeJob (..),
+    newCreateRecipeJob,
+
+    -- * Request Lenses
+    createRecipeJob_dataCatalogOutputs,
+    createRecipeJob_databaseOutputs,
+    createRecipeJob_datasetName,
+    createRecipeJob_encryptionKeyArn,
+    createRecipeJob_encryptionMode,
+    createRecipeJob_logSubscription,
+    createRecipeJob_maxCapacity,
+    createRecipeJob_maxRetries,
+    createRecipeJob_outputs,
+    createRecipeJob_projectName,
+    createRecipeJob_recipeReference,
+    createRecipeJob_tags,
+    createRecipeJob_timeout,
+    createRecipeJob_name,
+    createRecipeJob_roleArn,
+
+    -- * Destructuring the Response
+    CreateRecipeJobResponse (..),
+    newCreateRecipeJobResponse,
+
+    -- * Response Lenses
+    createRecipeJobResponse_httpStatus,
+    createRecipeJobResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRecipeJob' smart constructor.
+data CreateRecipeJob = CreateRecipeJob'
+  { -- | One or more artifacts that represent the Glue Data Catalog output from
+    -- running the job.
+    dataCatalogOutputs :: Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput),
+    -- | Represents a list of JDBC database output objects which defines the
+    -- output destination for a DataBrew recipe job to write to.
+    databaseOutputs :: Prelude.Maybe (Prelude.NonEmpty DatabaseOutput),
+    -- | The name of the dataset that this job processes.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an encryption key that is used to
+    -- protect the job.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The encryption mode for the job, which can be one of the following:
+    --
+    -- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+    --
+    -- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+    encryptionMode :: Prelude.Maybe EncryptionMode,
+    -- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+    -- enabled, CloudWatch writes one log stream for each job run.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | The maximum number of nodes that DataBrew can consume when the job
+    -- processes data.
+    maxCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of times to retry the job after a job run fails.
+    maxRetries :: Prelude.Maybe Prelude.Natural,
+    -- | One or more artifacts that represent the output from running the job.
+    outputs :: Prelude.Maybe (Prelude.NonEmpty Output),
+    -- | Either the name of an existing project, or a combination of a recipe and
+    -- a dataset to associate with the recipe.
+    projectName :: Prelude.Maybe Prelude.Text,
+    recipeReference :: Prelude.Maybe RecipeReference,
+    -- | Metadata tags to apply to this job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The job\'s timeout in minutes. A job that attempts to run longer than
+    -- this timeout period ends with a status of @TIMEOUT@.
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | A unique name for the job. Valid characters are alphanumeric (A-Z, a-z,
+    -- 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Identity and Access Management
+    -- (IAM) role to be assumed when DataBrew runs the job.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecipeJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataCatalogOutputs', 'createRecipeJob_dataCatalogOutputs' - One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+--
+-- 'databaseOutputs', 'createRecipeJob_databaseOutputs' - Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write to.
+--
+-- 'datasetName', 'createRecipeJob_datasetName' - The name of the dataset that this job processes.
+--
+-- 'encryptionKeyArn', 'createRecipeJob_encryptionKeyArn' - The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+--
+-- 'encryptionMode', 'createRecipeJob_encryptionMode' - The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+--
+-- 'logSubscription', 'createRecipeJob_logSubscription' - Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+--
+-- 'maxCapacity', 'createRecipeJob_maxCapacity' - The maximum number of nodes that DataBrew can consume when the job
+-- processes data.
+--
+-- 'maxRetries', 'createRecipeJob_maxRetries' - The maximum number of times to retry the job after a job run fails.
+--
+-- 'outputs', 'createRecipeJob_outputs' - One or more artifacts that represent the output from running the job.
+--
+-- 'projectName', 'createRecipeJob_projectName' - Either the name of an existing project, or a combination of a recipe and
+-- a dataset to associate with the recipe.
+--
+-- 'recipeReference', 'createRecipeJob_recipeReference' - Undocumented member.
+--
+-- 'tags', 'createRecipeJob_tags' - Metadata tags to apply to this job.
+--
+-- 'timeout', 'createRecipeJob_timeout' - The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+--
+-- 'name', 'createRecipeJob_name' - A unique name for the job. Valid characters are alphanumeric (A-Z, a-z,
+-- 0-9), hyphen (-), period (.), and space.
+--
+-- 'roleArn', 'createRecipeJob_roleArn' - The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+newCreateRecipeJob ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateRecipeJob
+newCreateRecipeJob pName_ pRoleArn_ =
+  CreateRecipeJob'
+    { dataCatalogOutputs =
+        Prelude.Nothing,
+      databaseOutputs = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      encryptionKeyArn = Prelude.Nothing,
+      encryptionMode = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      maxCapacity = Prelude.Nothing,
+      maxRetries = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      projectName = Prelude.Nothing,
+      recipeReference = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeout = Prelude.Nothing,
+      name = pName_,
+      roleArn = pRoleArn_
+    }
+
+-- | One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+createRecipeJob_dataCatalogOutputs :: Lens.Lens' CreateRecipeJob (Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput))
+createRecipeJob_dataCatalogOutputs = Lens.lens (\CreateRecipeJob' {dataCatalogOutputs} -> dataCatalogOutputs) (\s@CreateRecipeJob' {} a -> s {dataCatalogOutputs = a} :: CreateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write to.
+createRecipeJob_databaseOutputs :: Lens.Lens' CreateRecipeJob (Prelude.Maybe (Prelude.NonEmpty DatabaseOutput))
+createRecipeJob_databaseOutputs = Lens.lens (\CreateRecipeJob' {databaseOutputs} -> databaseOutputs) (\s@CreateRecipeJob' {} a -> s {databaseOutputs = a} :: CreateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dataset that this job processes.
+createRecipeJob_datasetName :: Lens.Lens' CreateRecipeJob (Prelude.Maybe Prelude.Text)
+createRecipeJob_datasetName = Lens.lens (\CreateRecipeJob' {datasetName} -> datasetName) (\s@CreateRecipeJob' {} a -> s {datasetName = a} :: CreateRecipeJob)
+
+-- | The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+createRecipeJob_encryptionKeyArn :: Lens.Lens' CreateRecipeJob (Prelude.Maybe Prelude.Text)
+createRecipeJob_encryptionKeyArn = Lens.lens (\CreateRecipeJob' {encryptionKeyArn} -> encryptionKeyArn) (\s@CreateRecipeJob' {} a -> s {encryptionKeyArn = a} :: CreateRecipeJob)
+
+-- | The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+createRecipeJob_encryptionMode :: Lens.Lens' CreateRecipeJob (Prelude.Maybe EncryptionMode)
+createRecipeJob_encryptionMode = Lens.lens (\CreateRecipeJob' {encryptionMode} -> encryptionMode) (\s@CreateRecipeJob' {} a -> s {encryptionMode = a} :: CreateRecipeJob)
+
+-- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+createRecipeJob_logSubscription :: Lens.Lens' CreateRecipeJob (Prelude.Maybe LogSubscription)
+createRecipeJob_logSubscription = Lens.lens (\CreateRecipeJob' {logSubscription} -> logSubscription) (\s@CreateRecipeJob' {} a -> s {logSubscription = a} :: CreateRecipeJob)
+
+-- | The maximum number of nodes that DataBrew can consume when the job
+-- processes data.
+createRecipeJob_maxCapacity :: Lens.Lens' CreateRecipeJob (Prelude.Maybe Prelude.Int)
+createRecipeJob_maxCapacity = Lens.lens (\CreateRecipeJob' {maxCapacity} -> maxCapacity) (\s@CreateRecipeJob' {} a -> s {maxCapacity = a} :: CreateRecipeJob)
+
+-- | The maximum number of times to retry the job after a job run fails.
+createRecipeJob_maxRetries :: Lens.Lens' CreateRecipeJob (Prelude.Maybe Prelude.Natural)
+createRecipeJob_maxRetries = Lens.lens (\CreateRecipeJob' {maxRetries} -> maxRetries) (\s@CreateRecipeJob' {} a -> s {maxRetries = a} :: CreateRecipeJob)
+
+-- | One or more artifacts that represent the output from running the job.
+createRecipeJob_outputs :: Lens.Lens' CreateRecipeJob (Prelude.Maybe (Prelude.NonEmpty Output))
+createRecipeJob_outputs = Lens.lens (\CreateRecipeJob' {outputs} -> outputs) (\s@CreateRecipeJob' {} a -> s {outputs = a} :: CreateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | Either the name of an existing project, or a combination of a recipe and
+-- a dataset to associate with the recipe.
+createRecipeJob_projectName :: Lens.Lens' CreateRecipeJob (Prelude.Maybe Prelude.Text)
+createRecipeJob_projectName = Lens.lens (\CreateRecipeJob' {projectName} -> projectName) (\s@CreateRecipeJob' {} a -> s {projectName = a} :: CreateRecipeJob)
+
+-- | Undocumented member.
+createRecipeJob_recipeReference :: Lens.Lens' CreateRecipeJob (Prelude.Maybe RecipeReference)
+createRecipeJob_recipeReference = Lens.lens (\CreateRecipeJob' {recipeReference} -> recipeReference) (\s@CreateRecipeJob' {} a -> s {recipeReference = a} :: CreateRecipeJob)
+
+-- | Metadata tags to apply to this job.
+createRecipeJob_tags :: Lens.Lens' CreateRecipeJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRecipeJob_tags = Lens.lens (\CreateRecipeJob' {tags} -> tags) (\s@CreateRecipeJob' {} a -> s {tags = a} :: CreateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+createRecipeJob_timeout :: Lens.Lens' CreateRecipeJob (Prelude.Maybe Prelude.Natural)
+createRecipeJob_timeout = Lens.lens (\CreateRecipeJob' {timeout} -> timeout) (\s@CreateRecipeJob' {} a -> s {timeout = a} :: CreateRecipeJob)
+
+-- | A unique name for the job. Valid characters are alphanumeric (A-Z, a-z,
+-- 0-9), hyphen (-), period (.), and space.
+createRecipeJob_name :: Lens.Lens' CreateRecipeJob Prelude.Text
+createRecipeJob_name = Lens.lens (\CreateRecipeJob' {name} -> name) (\s@CreateRecipeJob' {} a -> s {name = a} :: CreateRecipeJob)
+
+-- | The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+createRecipeJob_roleArn :: Lens.Lens' CreateRecipeJob Prelude.Text
+createRecipeJob_roleArn = Lens.lens (\CreateRecipeJob' {roleArn} -> roleArn) (\s@CreateRecipeJob' {} a -> s {roleArn = a} :: CreateRecipeJob)
+
+instance Core.AWSRequest CreateRecipeJob where
+  type
+    AWSResponse CreateRecipeJob =
+      CreateRecipeJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRecipeJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateRecipeJob where
+  hashWithSalt _salt CreateRecipeJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataCatalogOutputs
+      `Prelude.hashWithSalt` databaseOutputs
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` encryptionKeyArn
+      `Prelude.hashWithSalt` encryptionMode
+      `Prelude.hashWithSalt` logSubscription
+      `Prelude.hashWithSalt` maxCapacity
+      `Prelude.hashWithSalt` maxRetries
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` projectName
+      `Prelude.hashWithSalt` recipeReference
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeout
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateRecipeJob where
+  rnf CreateRecipeJob' {..} =
+    Prelude.rnf dataCatalogOutputs
+      `Prelude.seq` Prelude.rnf databaseOutputs
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf encryptionMode
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf maxCapacity
+      `Prelude.seq` Prelude.rnf maxRetries
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf projectName
+      `Prelude.seq` Prelude.rnf recipeReference
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateRecipeJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRecipeJob where
+  toJSON CreateRecipeJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataCatalogOutputs" Data..=)
+              Prelude.<$> dataCatalogOutputs,
+            ("DatabaseOutputs" Data..=)
+              Prelude.<$> databaseOutputs,
+            ("DatasetName" Data..=) Prelude.<$> datasetName,
+            ("EncryptionKeyArn" Data..=)
+              Prelude.<$> encryptionKeyArn,
+            ("EncryptionMode" Data..=)
+              Prelude.<$> encryptionMode,
+            ("LogSubscription" Data..=)
+              Prelude.<$> logSubscription,
+            ("MaxCapacity" Data..=) Prelude.<$> maxCapacity,
+            ("MaxRetries" Data..=) Prelude.<$> maxRetries,
+            ("Outputs" Data..=) Prelude.<$> outputs,
+            ("ProjectName" Data..=) Prelude.<$> projectName,
+            ("RecipeReference" Data..=)
+              Prelude.<$> recipeReference,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Timeout" Data..=) Prelude.<$> timeout,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateRecipeJob where
+  toPath = Prelude.const "/recipeJobs"
+
+instance Data.ToQuery CreateRecipeJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRecipeJobResponse' smart constructor.
+data CreateRecipeJobResponse = CreateRecipeJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job that you created.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecipeJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createRecipeJobResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createRecipeJobResponse_name' - The name of the job that you created.
+newCreateRecipeJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateRecipeJobResponse
+newCreateRecipeJobResponse pHttpStatus_ pName_ =
+  CreateRecipeJobResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createRecipeJobResponse_httpStatus :: Lens.Lens' CreateRecipeJobResponse Prelude.Int
+createRecipeJobResponse_httpStatus = Lens.lens (\CreateRecipeJobResponse' {httpStatus} -> httpStatus) (\s@CreateRecipeJobResponse' {} a -> s {httpStatus = a} :: CreateRecipeJobResponse)
+
+-- | The name of the job that you created.
+createRecipeJobResponse_name :: Lens.Lens' CreateRecipeJobResponse Prelude.Text
+createRecipeJobResponse_name = Lens.lens (\CreateRecipeJobResponse' {name} -> name) (\s@CreateRecipeJobResponse' {} a -> s {name = a} :: CreateRecipeJobResponse)
+
+instance Prelude.NFData CreateRecipeJobResponse where
+  rnf CreateRecipeJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateRuleset.hs b/gen/Amazonka/DataBrew/CreateRuleset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateRuleset.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateRuleset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new ruleset that can be used in a profile job to validate the
+-- data quality of a dataset.
+module Amazonka.DataBrew.CreateRuleset
+  ( -- * Creating a Request
+    CreateRuleset (..),
+    newCreateRuleset,
+
+    -- * Request Lenses
+    createRuleset_description,
+    createRuleset_tags,
+    createRuleset_name,
+    createRuleset_targetArn,
+    createRuleset_rules,
+
+    -- * Destructuring the Response
+    CreateRulesetResponse (..),
+    newCreateRulesetResponse,
+
+    -- * Response Lenses
+    createRulesetResponse_httpStatus,
+    createRulesetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRuleset' smart constructor.
+data CreateRuleset = CreateRuleset'
+  { -- | The description of the ruleset.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata tags to apply to the ruleset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the ruleset to be created. Valid characters are alphanumeric
+    -- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+    -- is associated with.
+    targetArn :: Prelude.Text,
+    -- | A list of rules that are defined with the ruleset. A rule includes one
+    -- or more checks to be validated on a DataBrew dataset.
+    rules :: Prelude.NonEmpty Rule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRuleset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createRuleset_description' - The description of the ruleset.
+--
+-- 'tags', 'createRuleset_tags' - Metadata tags to apply to the ruleset.
+--
+-- 'name', 'createRuleset_name' - The name of the ruleset to be created. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+--
+-- 'targetArn', 'createRuleset_targetArn' - The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+-- is associated with.
+--
+-- 'rules', 'createRuleset_rules' - A list of rules that are defined with the ruleset. A rule includes one
+-- or more checks to be validated on a DataBrew dataset.
+newCreateRuleset ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'targetArn'
+  Prelude.Text ->
+  -- | 'rules'
+  Prelude.NonEmpty Rule ->
+  CreateRuleset
+newCreateRuleset pName_ pTargetArn_ pRules_ =
+  CreateRuleset'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      targetArn = pTargetArn_,
+      rules = Lens.coerced Lens.# pRules_
+    }
+
+-- | The description of the ruleset.
+createRuleset_description :: Lens.Lens' CreateRuleset (Prelude.Maybe Prelude.Text)
+createRuleset_description = Lens.lens (\CreateRuleset' {description} -> description) (\s@CreateRuleset' {} a -> s {description = a} :: CreateRuleset)
+
+-- | Metadata tags to apply to the ruleset.
+createRuleset_tags :: Lens.Lens' CreateRuleset (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRuleset_tags = Lens.lens (\CreateRuleset' {tags} -> tags) (\s@CreateRuleset' {} a -> s {tags = a} :: CreateRuleset) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the ruleset to be created. Valid characters are alphanumeric
+-- (A-Z, a-z, 0-9), hyphen (-), period (.), and space.
+createRuleset_name :: Lens.Lens' CreateRuleset Prelude.Text
+createRuleset_name = Lens.lens (\CreateRuleset' {name} -> name) (\s@CreateRuleset' {} a -> s {name = a} :: CreateRuleset)
+
+-- | The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+-- is associated with.
+createRuleset_targetArn :: Lens.Lens' CreateRuleset Prelude.Text
+createRuleset_targetArn = Lens.lens (\CreateRuleset' {targetArn} -> targetArn) (\s@CreateRuleset' {} a -> s {targetArn = a} :: CreateRuleset)
+
+-- | A list of rules that are defined with the ruleset. A rule includes one
+-- or more checks to be validated on a DataBrew dataset.
+createRuleset_rules :: Lens.Lens' CreateRuleset (Prelude.NonEmpty Rule)
+createRuleset_rules = Lens.lens (\CreateRuleset' {rules} -> rules) (\s@CreateRuleset' {} a -> s {rules = a} :: CreateRuleset) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateRuleset where
+  type
+    AWSResponse CreateRuleset =
+      CreateRulesetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRulesetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateRuleset where
+  hashWithSalt _salt CreateRuleset' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` targetArn
+      `Prelude.hashWithSalt` rules
+
+instance Prelude.NFData CreateRuleset where
+  rnf CreateRuleset' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf rules
+
+instance Data.ToHeaders CreateRuleset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRuleset where
+  toJSON CreateRuleset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("TargetArn" Data..= targetArn),
+            Prelude.Just ("Rules" Data..= rules)
+          ]
+      )
+
+instance Data.ToPath CreateRuleset where
+  toPath = Prelude.const "/rulesets"
+
+instance Data.ToQuery CreateRuleset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRulesetResponse' smart constructor.
+data CreateRulesetResponse = CreateRulesetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the created ruleset.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRulesetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createRulesetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createRulesetResponse_name' - The unique name of the created ruleset.
+newCreateRulesetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateRulesetResponse
+newCreateRulesetResponse pHttpStatus_ pName_ =
+  CreateRulesetResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createRulesetResponse_httpStatus :: Lens.Lens' CreateRulesetResponse Prelude.Int
+createRulesetResponse_httpStatus = Lens.lens (\CreateRulesetResponse' {httpStatus} -> httpStatus) (\s@CreateRulesetResponse' {} a -> s {httpStatus = a} :: CreateRulesetResponse)
+
+-- | The unique name of the created ruleset.
+createRulesetResponse_name :: Lens.Lens' CreateRulesetResponse Prelude.Text
+createRulesetResponse_name = Lens.lens (\CreateRulesetResponse' {name} -> name) (\s@CreateRulesetResponse' {} a -> s {name = a} :: CreateRulesetResponse)
+
+instance Prelude.NFData CreateRulesetResponse where
+  rnf CreateRulesetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/CreateSchedule.hs b/gen/Amazonka/DataBrew/CreateSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/CreateSchedule.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.CreateSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new schedule for one or more DataBrew jobs. Jobs can be run at
+-- a specific date and time, or at regular intervals.
+module Amazonka.DataBrew.CreateSchedule
+  ( -- * Creating a Request
+    CreateSchedule (..),
+    newCreateSchedule,
+
+    -- * Request Lenses
+    createSchedule_jobNames,
+    createSchedule_tags,
+    createSchedule_cronExpression,
+    createSchedule_name,
+
+    -- * Destructuring the Response
+    CreateScheduleResponse (..),
+    newCreateScheduleResponse,
+
+    -- * Response Lenses
+    createScheduleResponse_httpStatus,
+    createScheduleResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSchedule' smart constructor.
+data CreateSchedule = CreateSchedule'
+  { -- | The name or names of one or more jobs to be run.
+    jobNames :: Prelude.Maybe [Prelude.Text],
+    -- | Metadata tags to apply to this schedule.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date or dates and time or times when the jobs are to be run. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+    -- in the /Glue DataBrew Developer Guide/.
+    cronExpression :: Prelude.Text,
+    -- | A unique name for the schedule. Valid characters are alphanumeric (A-Z,
+    -- a-z, 0-9), hyphen (-), period (.), and space.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobNames', 'createSchedule_jobNames' - The name or names of one or more jobs to be run.
+--
+-- 'tags', 'createSchedule_tags' - Metadata tags to apply to this schedule.
+--
+-- 'cronExpression', 'createSchedule_cronExpression' - The date or dates and time or times when the jobs are to be run. For
+-- more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+--
+-- 'name', 'createSchedule_name' - A unique name for the schedule. Valid characters are alphanumeric (A-Z,
+-- a-z, 0-9), hyphen (-), period (.), and space.
+newCreateSchedule ::
+  -- | 'cronExpression'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateSchedule
+newCreateSchedule pCronExpression_ pName_ =
+  CreateSchedule'
+    { jobNames = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      cronExpression = pCronExpression_,
+      name = pName_
+    }
+
+-- | The name or names of one or more jobs to be run.
+createSchedule_jobNames :: Lens.Lens' CreateSchedule (Prelude.Maybe [Prelude.Text])
+createSchedule_jobNames = Lens.lens (\CreateSchedule' {jobNames} -> jobNames) (\s@CreateSchedule' {} a -> s {jobNames = a} :: CreateSchedule) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata tags to apply to this schedule.
+createSchedule_tags :: Lens.Lens' CreateSchedule (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSchedule_tags = Lens.lens (\CreateSchedule' {tags} -> tags) (\s@CreateSchedule' {} a -> s {tags = a} :: CreateSchedule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date or dates and time or times when the jobs are to be run. For
+-- more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+createSchedule_cronExpression :: Lens.Lens' CreateSchedule Prelude.Text
+createSchedule_cronExpression = Lens.lens (\CreateSchedule' {cronExpression} -> cronExpression) (\s@CreateSchedule' {} a -> s {cronExpression = a} :: CreateSchedule)
+
+-- | A unique name for the schedule. Valid characters are alphanumeric (A-Z,
+-- a-z, 0-9), hyphen (-), period (.), and space.
+createSchedule_name :: Lens.Lens' CreateSchedule Prelude.Text
+createSchedule_name = Lens.lens (\CreateSchedule' {name} -> name) (\s@CreateSchedule' {} a -> s {name = a} :: CreateSchedule)
+
+instance Core.AWSRequest CreateSchedule where
+  type
+    AWSResponse CreateSchedule =
+      CreateScheduleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateScheduleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable CreateSchedule where
+  hashWithSalt _salt CreateSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobNames
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` cronExpression
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateSchedule where
+  rnf CreateSchedule' {..} =
+    Prelude.rnf jobNames
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSchedule where
+  toJSON CreateSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("JobNames" Data..=) Prelude.<$> jobNames,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("CronExpression" Data..= cronExpression),
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateSchedule where
+  toPath = Prelude.const "/schedules"
+
+instance Data.ToQuery CreateSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateScheduleResponse' smart constructor.
+data CreateScheduleResponse = CreateScheduleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the schedule that was created.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createScheduleResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createScheduleResponse_name' - The name of the schedule that was created.
+newCreateScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateScheduleResponse
+newCreateScheduleResponse pHttpStatus_ pName_ =
+  CreateScheduleResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+createScheduleResponse_httpStatus :: Lens.Lens' CreateScheduleResponse Prelude.Int
+createScheduleResponse_httpStatus = Lens.lens (\CreateScheduleResponse' {httpStatus} -> httpStatus) (\s@CreateScheduleResponse' {} a -> s {httpStatus = a} :: CreateScheduleResponse)
+
+-- | The name of the schedule that was created.
+createScheduleResponse_name :: Lens.Lens' CreateScheduleResponse Prelude.Text
+createScheduleResponse_name = Lens.lens (\CreateScheduleResponse' {name} -> name) (\s@CreateScheduleResponse' {} a -> s {name = a} :: CreateScheduleResponse)
+
+instance Prelude.NFData CreateScheduleResponse where
+  rnf CreateScheduleResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DeleteDataset.hs b/gen/Amazonka/DataBrew/DeleteDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DeleteDataset.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DeleteDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a dataset from DataBrew.
+module Amazonka.DataBrew.DeleteDataset
+  ( -- * Creating a Request
+    DeleteDataset (..),
+    newDeleteDataset,
+
+    -- * Request Lenses
+    deleteDataset_name,
+
+    -- * Destructuring the Response
+    DeleteDatasetResponse (..),
+    newDeleteDatasetResponse,
+
+    -- * Response Lenses
+    deleteDatasetResponse_httpStatus,
+    deleteDatasetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDataset' smart constructor.
+data DeleteDataset = DeleteDataset'
+  { -- | The name of the dataset to be deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteDataset_name' - The name of the dataset to be deleted.
+newDeleteDataset ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteDataset
+newDeleteDataset pName_ =
+  DeleteDataset' {name = pName_}
+
+-- | The name of the dataset to be deleted.
+deleteDataset_name :: Lens.Lens' DeleteDataset Prelude.Text
+deleteDataset_name = Lens.lens (\DeleteDataset' {name} -> name) (\s@DeleteDataset' {} a -> s {name = a} :: DeleteDataset)
+
+instance Core.AWSRequest DeleteDataset where
+  type
+    AWSResponse DeleteDataset =
+      DeleteDatasetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDatasetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DeleteDataset where
+  hashWithSalt _salt DeleteDataset' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteDataset where
+  rnf DeleteDataset' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDataset where
+  toPath DeleteDataset' {..} =
+    Prelude.mconcat ["/datasets/", Data.toBS name]
+
+instance Data.ToQuery DeleteDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDatasetResponse' smart constructor.
+data DeleteDatasetResponse = DeleteDatasetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the dataset that you deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteDatasetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteDatasetResponse_name' - The name of the dataset that you deleted.
+newDeleteDatasetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DeleteDatasetResponse
+newDeleteDatasetResponse pHttpStatus_ pName_ =
+  DeleteDatasetResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+deleteDatasetResponse_httpStatus :: Lens.Lens' DeleteDatasetResponse Prelude.Int
+deleteDatasetResponse_httpStatus = Lens.lens (\DeleteDatasetResponse' {httpStatus} -> httpStatus) (\s@DeleteDatasetResponse' {} a -> s {httpStatus = a} :: DeleteDatasetResponse)
+
+-- | The name of the dataset that you deleted.
+deleteDatasetResponse_name :: Lens.Lens' DeleteDatasetResponse Prelude.Text
+deleteDatasetResponse_name = Lens.lens (\DeleteDatasetResponse' {name} -> name) (\s@DeleteDatasetResponse' {} a -> s {name = a} :: DeleteDatasetResponse)
+
+instance Prelude.NFData DeleteDatasetResponse where
+  rnf DeleteDatasetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DeleteJob.hs b/gen/Amazonka/DataBrew/DeleteJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DeleteJob.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DeleteJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified DataBrew job.
+module Amazonka.DataBrew.DeleteJob
+  ( -- * Creating a Request
+    DeleteJob (..),
+    newDeleteJob,
+
+    -- * Request Lenses
+    deleteJob_name,
+
+    -- * Destructuring the Response
+    DeleteJobResponse (..),
+    newDeleteJobResponse,
+
+    -- * Response Lenses
+    deleteJobResponse_httpStatus,
+    deleteJobResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteJob' smart constructor.
+data DeleteJob = DeleteJob'
+  { -- | The name of the job to be deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteJob_name' - The name of the job to be deleted.
+newDeleteJob ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteJob
+newDeleteJob pName_ = DeleteJob' {name = pName_}
+
+-- | The name of the job to be deleted.
+deleteJob_name :: Lens.Lens' DeleteJob Prelude.Text
+deleteJob_name = Lens.lens (\DeleteJob' {name} -> name) (\s@DeleteJob' {} a -> s {name = a} :: DeleteJob)
+
+instance Core.AWSRequest DeleteJob where
+  type AWSResponse DeleteJob = DeleteJobResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DeleteJob where
+  hashWithSalt _salt DeleteJob' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteJob where
+  rnf DeleteJob' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteJob where
+  toPath DeleteJob' {..} =
+    Prelude.mconcat ["/jobs/", Data.toBS name]
+
+instance Data.ToQuery DeleteJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteJobResponse' smart constructor.
+data DeleteJobResponse = DeleteJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job that you deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteJobResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteJobResponse_name' - The name of the job that you deleted.
+newDeleteJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DeleteJobResponse
+newDeleteJobResponse pHttpStatus_ pName_ =
+  DeleteJobResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+deleteJobResponse_httpStatus :: Lens.Lens' DeleteJobResponse Prelude.Int
+deleteJobResponse_httpStatus = Lens.lens (\DeleteJobResponse' {httpStatus} -> httpStatus) (\s@DeleteJobResponse' {} a -> s {httpStatus = a} :: DeleteJobResponse)
+
+-- | The name of the job that you deleted.
+deleteJobResponse_name :: Lens.Lens' DeleteJobResponse Prelude.Text
+deleteJobResponse_name = Lens.lens (\DeleteJobResponse' {name} -> name) (\s@DeleteJobResponse' {} a -> s {name = a} :: DeleteJobResponse)
+
+instance Prelude.NFData DeleteJobResponse where
+  rnf DeleteJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DeleteProject.hs b/gen/Amazonka/DataBrew/DeleteProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DeleteProject.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DeleteProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an existing DataBrew project.
+module Amazonka.DataBrew.DeleteProject
+  ( -- * Creating a Request
+    DeleteProject (..),
+    newDeleteProject,
+
+    -- * Request Lenses
+    deleteProject_name,
+
+    -- * Destructuring the Response
+    DeleteProjectResponse (..),
+    newDeleteProjectResponse,
+
+    -- * Response Lenses
+    deleteProjectResponse_httpStatus,
+    deleteProjectResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProject' smart constructor.
+data DeleteProject = DeleteProject'
+  { -- | The name of the project to be deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteProject_name' - The name of the project to be deleted.
+newDeleteProject ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteProject
+newDeleteProject pName_ =
+  DeleteProject' {name = pName_}
+
+-- | The name of the project to be deleted.
+deleteProject_name :: Lens.Lens' DeleteProject Prelude.Text
+deleteProject_name = Lens.lens (\DeleteProject' {name} -> name) (\s@DeleteProject' {} a -> s {name = a} :: DeleteProject)
+
+instance Core.AWSRequest DeleteProject where
+  type
+    AWSResponse DeleteProject =
+      DeleteProjectResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteProjectResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DeleteProject where
+  hashWithSalt _salt DeleteProject' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteProject where
+  rnf DeleteProject' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteProject where
+  toPath DeleteProject' {..} =
+    Prelude.mconcat ["/projects/", Data.toBS name]
+
+instance Data.ToQuery DeleteProject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProjectResponse' smart constructor.
+data DeleteProjectResponse = DeleteProjectResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the project that you deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteProjectResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteProjectResponse_name' - The name of the project that you deleted.
+newDeleteProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DeleteProjectResponse
+newDeleteProjectResponse pHttpStatus_ pName_ =
+  DeleteProjectResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+deleteProjectResponse_httpStatus :: Lens.Lens' DeleteProjectResponse Prelude.Int
+deleteProjectResponse_httpStatus = Lens.lens (\DeleteProjectResponse' {httpStatus} -> httpStatus) (\s@DeleteProjectResponse' {} a -> s {httpStatus = a} :: DeleteProjectResponse)
+
+-- | The name of the project that you deleted.
+deleteProjectResponse_name :: Lens.Lens' DeleteProjectResponse Prelude.Text
+deleteProjectResponse_name = Lens.lens (\DeleteProjectResponse' {name} -> name) (\s@DeleteProjectResponse' {} a -> s {name = a} :: DeleteProjectResponse)
+
+instance Prelude.NFData DeleteProjectResponse where
+  rnf DeleteProjectResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DeleteRecipeVersion.hs b/gen/Amazonka/DataBrew/DeleteRecipeVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DeleteRecipeVersion.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DeleteRecipeVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a single version of a DataBrew recipe.
+module Amazonka.DataBrew.DeleteRecipeVersion
+  ( -- * Creating a Request
+    DeleteRecipeVersion (..),
+    newDeleteRecipeVersion,
+
+    -- * Request Lenses
+    deleteRecipeVersion_name,
+    deleteRecipeVersion_recipeVersion,
+
+    -- * Destructuring the Response
+    DeleteRecipeVersionResponse (..),
+    newDeleteRecipeVersionResponse,
+
+    -- * Response Lenses
+    deleteRecipeVersionResponse_httpStatus,
+    deleteRecipeVersionResponse_name,
+    deleteRecipeVersionResponse_recipeVersion,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRecipeVersion' smart constructor.
+data DeleteRecipeVersion = DeleteRecipeVersion'
+  { -- | The name of the recipe.
+    name :: Prelude.Text,
+    -- | The version of the recipe to be deleted. You can specify a numeric
+    -- versions (@X.Y@) or @LATEST_WORKING@. @LATEST_PUBLISHED@ is not
+    -- supported.
+    recipeVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecipeVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteRecipeVersion_name' - The name of the recipe.
+--
+-- 'recipeVersion', 'deleteRecipeVersion_recipeVersion' - The version of the recipe to be deleted. You can specify a numeric
+-- versions (@X.Y@) or @LATEST_WORKING@. @LATEST_PUBLISHED@ is not
+-- supported.
+newDeleteRecipeVersion ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recipeVersion'
+  Prelude.Text ->
+  DeleteRecipeVersion
+newDeleteRecipeVersion pName_ pRecipeVersion_ =
+  DeleteRecipeVersion'
+    { name = pName_,
+      recipeVersion = pRecipeVersion_
+    }
+
+-- | The name of the recipe.
+deleteRecipeVersion_name :: Lens.Lens' DeleteRecipeVersion Prelude.Text
+deleteRecipeVersion_name = Lens.lens (\DeleteRecipeVersion' {name} -> name) (\s@DeleteRecipeVersion' {} a -> s {name = a} :: DeleteRecipeVersion)
+
+-- | The version of the recipe to be deleted. You can specify a numeric
+-- versions (@X.Y@) or @LATEST_WORKING@. @LATEST_PUBLISHED@ is not
+-- supported.
+deleteRecipeVersion_recipeVersion :: Lens.Lens' DeleteRecipeVersion Prelude.Text
+deleteRecipeVersion_recipeVersion = Lens.lens (\DeleteRecipeVersion' {recipeVersion} -> recipeVersion) (\s@DeleteRecipeVersion' {} a -> s {recipeVersion = a} :: DeleteRecipeVersion)
+
+instance Core.AWSRequest DeleteRecipeVersion where
+  type
+    AWSResponse DeleteRecipeVersion =
+      DeleteRecipeVersionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteRecipeVersionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+            Prelude.<*> (x Data..:> "RecipeVersion")
+      )
+
+instance Prelude.Hashable DeleteRecipeVersion where
+  hashWithSalt _salt DeleteRecipeVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recipeVersion
+
+instance Prelude.NFData DeleteRecipeVersion where
+  rnf DeleteRecipeVersion' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recipeVersion
+
+instance Data.ToHeaders DeleteRecipeVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRecipeVersion where
+  toPath DeleteRecipeVersion' {..} =
+    Prelude.mconcat
+      [ "/recipes/",
+        Data.toBS name,
+        "/recipeVersion/",
+        Data.toBS recipeVersion
+      ]
+
+instance Data.ToQuery DeleteRecipeVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRecipeVersionResponse' smart constructor.
+data DeleteRecipeVersionResponse = DeleteRecipeVersionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the recipe that was deleted.
+    name :: Prelude.Text,
+    -- | The version of the recipe that was deleted.
+    recipeVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecipeVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteRecipeVersionResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteRecipeVersionResponse_name' - The name of the recipe that was deleted.
+--
+-- 'recipeVersion', 'deleteRecipeVersionResponse_recipeVersion' - The version of the recipe that was deleted.
+newDeleteRecipeVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recipeVersion'
+  Prelude.Text ->
+  DeleteRecipeVersionResponse
+newDeleteRecipeVersionResponse
+  pHttpStatus_
+  pName_
+  pRecipeVersion_ =
+    DeleteRecipeVersionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        recipeVersion = pRecipeVersion_
+      }
+
+-- | The response's http status code.
+deleteRecipeVersionResponse_httpStatus :: Lens.Lens' DeleteRecipeVersionResponse Prelude.Int
+deleteRecipeVersionResponse_httpStatus = Lens.lens (\DeleteRecipeVersionResponse' {httpStatus} -> httpStatus) (\s@DeleteRecipeVersionResponse' {} a -> s {httpStatus = a} :: DeleteRecipeVersionResponse)
+
+-- | The name of the recipe that was deleted.
+deleteRecipeVersionResponse_name :: Lens.Lens' DeleteRecipeVersionResponse Prelude.Text
+deleteRecipeVersionResponse_name = Lens.lens (\DeleteRecipeVersionResponse' {name} -> name) (\s@DeleteRecipeVersionResponse' {} a -> s {name = a} :: DeleteRecipeVersionResponse)
+
+-- | The version of the recipe that was deleted.
+deleteRecipeVersionResponse_recipeVersion :: Lens.Lens' DeleteRecipeVersionResponse Prelude.Text
+deleteRecipeVersionResponse_recipeVersion = Lens.lens (\DeleteRecipeVersionResponse' {recipeVersion} -> recipeVersion) (\s@DeleteRecipeVersionResponse' {} a -> s {recipeVersion = a} :: DeleteRecipeVersionResponse)
+
+instance Prelude.NFData DeleteRecipeVersionResponse where
+  rnf DeleteRecipeVersionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recipeVersion
diff --git a/gen/Amazonka/DataBrew/DeleteRuleset.hs b/gen/Amazonka/DataBrew/DeleteRuleset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DeleteRuleset.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DeleteRuleset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a ruleset.
+module Amazonka.DataBrew.DeleteRuleset
+  ( -- * Creating a Request
+    DeleteRuleset (..),
+    newDeleteRuleset,
+
+    -- * Request Lenses
+    deleteRuleset_name,
+
+    -- * Destructuring the Response
+    DeleteRulesetResponse (..),
+    newDeleteRulesetResponse,
+
+    -- * Response Lenses
+    deleteRulesetResponse_httpStatus,
+    deleteRulesetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRuleset' smart constructor.
+data DeleteRuleset = DeleteRuleset'
+  { -- | The name of the ruleset to be deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRuleset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteRuleset_name' - The name of the ruleset to be deleted.
+newDeleteRuleset ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteRuleset
+newDeleteRuleset pName_ =
+  DeleteRuleset' {name = pName_}
+
+-- | The name of the ruleset to be deleted.
+deleteRuleset_name :: Lens.Lens' DeleteRuleset Prelude.Text
+deleteRuleset_name = Lens.lens (\DeleteRuleset' {name} -> name) (\s@DeleteRuleset' {} a -> s {name = a} :: DeleteRuleset)
+
+instance Core.AWSRequest DeleteRuleset where
+  type
+    AWSResponse DeleteRuleset =
+      DeleteRulesetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteRulesetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DeleteRuleset where
+  hashWithSalt _salt DeleteRuleset' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteRuleset where
+  rnf DeleteRuleset' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteRuleset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRuleset where
+  toPath DeleteRuleset' {..} =
+    Prelude.mconcat ["/rulesets/", Data.toBS name]
+
+instance Data.ToQuery DeleteRuleset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRulesetResponse' smart constructor.
+data DeleteRulesetResponse = DeleteRulesetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the deleted ruleset.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRulesetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteRulesetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteRulesetResponse_name' - The name of the deleted ruleset.
+newDeleteRulesetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DeleteRulesetResponse
+newDeleteRulesetResponse pHttpStatus_ pName_ =
+  DeleteRulesetResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+deleteRulesetResponse_httpStatus :: Lens.Lens' DeleteRulesetResponse Prelude.Int
+deleteRulesetResponse_httpStatus = Lens.lens (\DeleteRulesetResponse' {httpStatus} -> httpStatus) (\s@DeleteRulesetResponse' {} a -> s {httpStatus = a} :: DeleteRulesetResponse)
+
+-- | The name of the deleted ruleset.
+deleteRulesetResponse_name :: Lens.Lens' DeleteRulesetResponse Prelude.Text
+deleteRulesetResponse_name = Lens.lens (\DeleteRulesetResponse' {name} -> name) (\s@DeleteRulesetResponse' {} a -> s {name = a} :: DeleteRulesetResponse)
+
+instance Prelude.NFData DeleteRulesetResponse where
+  rnf DeleteRulesetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DeleteSchedule.hs b/gen/Amazonka/DataBrew/DeleteSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DeleteSchedule.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DeleteSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified DataBrew schedule.
+module Amazonka.DataBrew.DeleteSchedule
+  ( -- * Creating a Request
+    DeleteSchedule (..),
+    newDeleteSchedule,
+
+    -- * Request Lenses
+    deleteSchedule_name,
+
+    -- * Destructuring the Response
+    DeleteScheduleResponse (..),
+    newDeleteScheduleResponse,
+
+    -- * Response Lenses
+    deleteScheduleResponse_httpStatus,
+    deleteScheduleResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSchedule' smart constructor.
+data DeleteSchedule = DeleteSchedule'
+  { -- | The name of the schedule to be deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteSchedule_name' - The name of the schedule to be deleted.
+newDeleteSchedule ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteSchedule
+newDeleteSchedule pName_ =
+  DeleteSchedule' {name = pName_}
+
+-- | The name of the schedule to be deleted.
+deleteSchedule_name :: Lens.Lens' DeleteSchedule Prelude.Text
+deleteSchedule_name = Lens.lens (\DeleteSchedule' {name} -> name) (\s@DeleteSchedule' {} a -> s {name = a} :: DeleteSchedule)
+
+instance Core.AWSRequest DeleteSchedule where
+  type
+    AWSResponse DeleteSchedule =
+      DeleteScheduleResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteScheduleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DeleteSchedule where
+  hashWithSalt _salt DeleteSchedule' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteSchedule where
+  rnf DeleteSchedule' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteSchedule where
+  toPath DeleteSchedule' {..} =
+    Prelude.mconcat ["/schedules/", Data.toBS name]
+
+instance Data.ToQuery DeleteSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteScheduleResponse' smart constructor.
+data DeleteScheduleResponse = DeleteScheduleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the schedule that was deleted.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteScheduleResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteScheduleResponse_name' - The name of the schedule that was deleted.
+newDeleteScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DeleteScheduleResponse
+newDeleteScheduleResponse pHttpStatus_ pName_ =
+  DeleteScheduleResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+deleteScheduleResponse_httpStatus :: Lens.Lens' DeleteScheduleResponse Prelude.Int
+deleteScheduleResponse_httpStatus = Lens.lens (\DeleteScheduleResponse' {httpStatus} -> httpStatus) (\s@DeleteScheduleResponse' {} a -> s {httpStatus = a} :: DeleteScheduleResponse)
+
+-- | The name of the schedule that was deleted.
+deleteScheduleResponse_name :: Lens.Lens' DeleteScheduleResponse Prelude.Text
+deleteScheduleResponse_name = Lens.lens (\DeleteScheduleResponse' {name} -> name) (\s@DeleteScheduleResponse' {} a -> s {name = a} :: DeleteScheduleResponse)
+
+instance Prelude.NFData DeleteScheduleResponse where
+  rnf DeleteScheduleResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DescribeDataset.hs b/gen/Amazonka/DataBrew/DescribeDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeDataset.hs
@@ -0,0 +1,304 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the definition of a specific DataBrew dataset.
+module Amazonka.DataBrew.DescribeDataset
+  ( -- * Creating a Request
+    DescribeDataset (..),
+    newDescribeDataset,
+
+    -- * Request Lenses
+    describeDataset_name,
+
+    -- * Destructuring the Response
+    DescribeDatasetResponse (..),
+    newDescribeDatasetResponse,
+
+    -- * Response Lenses
+    describeDatasetResponse_createDate,
+    describeDatasetResponse_createdBy,
+    describeDatasetResponse_format,
+    describeDatasetResponse_formatOptions,
+    describeDatasetResponse_lastModifiedBy,
+    describeDatasetResponse_lastModifiedDate,
+    describeDatasetResponse_pathOptions,
+    describeDatasetResponse_resourceArn,
+    describeDatasetResponse_source,
+    describeDatasetResponse_tags,
+    describeDatasetResponse_httpStatus,
+    describeDatasetResponse_name,
+    describeDatasetResponse_input,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDataset' smart constructor.
+data DescribeDataset = DescribeDataset'
+  { -- | The name of the dataset to be described.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeDataset_name' - The name of the dataset to be described.
+newDescribeDataset ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeDataset
+newDescribeDataset pName_ =
+  DescribeDataset' {name = pName_}
+
+-- | The name of the dataset to be described.
+describeDataset_name :: Lens.Lens' DescribeDataset Prelude.Text
+describeDataset_name = Lens.lens (\DescribeDataset' {name} -> name) (\s@DescribeDataset' {} a -> s {name = a} :: DescribeDataset)
+
+instance Core.AWSRequest DescribeDataset where
+  type
+    AWSResponse DescribeDataset =
+      DescribeDatasetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDatasetResponse'
+            Prelude.<$> (x Data..?> "CreateDate")
+            Prelude.<*> (x Data..?> "CreatedBy")
+            Prelude.<*> (x Data..?> "Format")
+            Prelude.<*> (x Data..?> "FormatOptions")
+            Prelude.<*> (x Data..?> "LastModifiedBy")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (x Data..?> "PathOptions")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Source")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+            Prelude.<*> (x Data..:> "Input")
+      )
+
+instance Prelude.Hashable DescribeDataset where
+  hashWithSalt _salt DescribeDataset' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeDataset where
+  rnf DescribeDataset' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DescribeDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeDataset where
+  toPath DescribeDataset' {..} =
+    Prelude.mconcat ["/datasets/", Data.toBS name]
+
+instance Data.ToQuery DescribeDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDatasetResponse' smart constructor.
+data DescribeDatasetResponse = DescribeDatasetResponse'
+  { -- | The date and time that the dataset was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier (user name) of the user who created the dataset.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The file format of a dataset that is created from an Amazon S3 file or
+    -- folder.
+    format :: Prelude.Maybe InputFormat,
+    formatOptions :: Prelude.Maybe FormatOptions,
+    -- | The identifier (user name) of the user who last modified the dataset.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the dataset was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | A set of options that defines how DataBrew interprets an Amazon S3 path
+    -- of the dataset.
+    pathOptions :: Prelude.Maybe PathOptions,
+    -- | The Amazon Resource Name (ARN) of the dataset.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The location of the data for this dataset, Amazon S3 or the Glue Data
+    -- Catalog.
+    source :: Prelude.Maybe Source,
+    -- | Metadata tags associated with this dataset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the dataset.
+    name :: Prelude.Text,
+    input :: Input
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'describeDatasetResponse_createDate' - The date and time that the dataset was created.
+--
+-- 'createdBy', 'describeDatasetResponse_createdBy' - The identifier (user name) of the user who created the dataset.
+--
+-- 'format', 'describeDatasetResponse_format' - The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+--
+-- 'formatOptions', 'describeDatasetResponse_formatOptions' - Undocumented member.
+--
+-- 'lastModifiedBy', 'describeDatasetResponse_lastModifiedBy' - The identifier (user name) of the user who last modified the dataset.
+--
+-- 'lastModifiedDate', 'describeDatasetResponse_lastModifiedDate' - The date and time that the dataset was last modified.
+--
+-- 'pathOptions', 'describeDatasetResponse_pathOptions' - A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+--
+-- 'resourceArn', 'describeDatasetResponse_resourceArn' - The Amazon Resource Name (ARN) of the dataset.
+--
+-- 'source', 'describeDatasetResponse_source' - The location of the data for this dataset, Amazon S3 or the Glue Data
+-- Catalog.
+--
+-- 'tags', 'describeDatasetResponse_tags' - Metadata tags associated with this dataset.
+--
+-- 'httpStatus', 'describeDatasetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeDatasetResponse_name' - The name of the dataset.
+--
+-- 'input', 'describeDatasetResponse_input' - Undocumented member.
+newDescribeDatasetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'input'
+  Input ->
+  DescribeDatasetResponse
+newDescribeDatasetResponse
+  pHttpStatus_
+  pName_
+  pInput_ =
+    DescribeDatasetResponse'
+      { createDate =
+          Prelude.Nothing,
+        createdBy = Prelude.Nothing,
+        format = Prelude.Nothing,
+        formatOptions = Prelude.Nothing,
+        lastModifiedBy = Prelude.Nothing,
+        lastModifiedDate = Prelude.Nothing,
+        pathOptions = Prelude.Nothing,
+        resourceArn = Prelude.Nothing,
+        source = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_,
+        input = pInput_
+      }
+
+-- | The date and time that the dataset was created.
+describeDatasetResponse_createDate :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetResponse_createDate = Lens.lens (\DescribeDatasetResponse' {createDate} -> createDate) (\s@DescribeDatasetResponse' {} a -> s {createDate = a} :: DescribeDatasetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier (user name) of the user who created the dataset.
+describeDatasetResponse_createdBy :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_createdBy = Lens.lens (\DescribeDatasetResponse' {createdBy} -> createdBy) (\s@DescribeDatasetResponse' {} a -> s {createdBy = a} :: DescribeDatasetResponse)
+
+-- | The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+describeDatasetResponse_format :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe InputFormat)
+describeDatasetResponse_format = Lens.lens (\DescribeDatasetResponse' {format} -> format) (\s@DescribeDatasetResponse' {} a -> s {format = a} :: DescribeDatasetResponse)
+
+-- | Undocumented member.
+describeDatasetResponse_formatOptions :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe FormatOptions)
+describeDatasetResponse_formatOptions = Lens.lens (\DescribeDatasetResponse' {formatOptions} -> formatOptions) (\s@DescribeDatasetResponse' {} a -> s {formatOptions = a} :: DescribeDatasetResponse)
+
+-- | The identifier (user name) of the user who last modified the dataset.
+describeDatasetResponse_lastModifiedBy :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_lastModifiedBy = Lens.lens (\DescribeDatasetResponse' {lastModifiedBy} -> lastModifiedBy) (\s@DescribeDatasetResponse' {} a -> s {lastModifiedBy = a} :: DescribeDatasetResponse)
+
+-- | The date and time that the dataset was last modified.
+describeDatasetResponse_lastModifiedDate :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetResponse_lastModifiedDate = Lens.lens (\DescribeDatasetResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeDatasetResponse' {} a -> s {lastModifiedDate = a} :: DescribeDatasetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+describeDatasetResponse_pathOptions :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe PathOptions)
+describeDatasetResponse_pathOptions = Lens.lens (\DescribeDatasetResponse' {pathOptions} -> pathOptions) (\s@DescribeDatasetResponse' {} a -> s {pathOptions = a} :: DescribeDatasetResponse)
+
+-- | The Amazon Resource Name (ARN) of the dataset.
+describeDatasetResponse_resourceArn :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_resourceArn = Lens.lens (\DescribeDatasetResponse' {resourceArn} -> resourceArn) (\s@DescribeDatasetResponse' {} a -> s {resourceArn = a} :: DescribeDatasetResponse)
+
+-- | The location of the data for this dataset, Amazon S3 or the Glue Data
+-- Catalog.
+describeDatasetResponse_source :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Source)
+describeDatasetResponse_source = Lens.lens (\DescribeDatasetResponse' {source} -> source) (\s@DescribeDatasetResponse' {} a -> s {source = a} :: DescribeDatasetResponse)
+
+-- | Metadata tags associated with this dataset.
+describeDatasetResponse_tags :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeDatasetResponse_tags = Lens.lens (\DescribeDatasetResponse' {tags} -> tags) (\s@DescribeDatasetResponse' {} a -> s {tags = a} :: DescribeDatasetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeDatasetResponse_httpStatus :: Lens.Lens' DescribeDatasetResponse Prelude.Int
+describeDatasetResponse_httpStatus = Lens.lens (\DescribeDatasetResponse' {httpStatus} -> httpStatus) (\s@DescribeDatasetResponse' {} a -> s {httpStatus = a} :: DescribeDatasetResponse)
+
+-- | The name of the dataset.
+describeDatasetResponse_name :: Lens.Lens' DescribeDatasetResponse Prelude.Text
+describeDatasetResponse_name = Lens.lens (\DescribeDatasetResponse' {name} -> name) (\s@DescribeDatasetResponse' {} a -> s {name = a} :: DescribeDatasetResponse)
+
+-- | Undocumented member.
+describeDatasetResponse_input :: Lens.Lens' DescribeDatasetResponse Input
+describeDatasetResponse_input = Lens.lens (\DescribeDatasetResponse' {input} -> input) (\s@DescribeDatasetResponse' {} a -> s {input = a} :: DescribeDatasetResponse)
+
+instance Prelude.NFData DescribeDatasetResponse where
+  rnf DescribeDatasetResponse' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf formatOptions
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf pathOptions
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf input
diff --git a/gen/Amazonka/DataBrew/DescribeJob.hs b/gen/Amazonka/DataBrew/DescribeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeJob.hs
@@ -0,0 +1,489 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the definition of a specific DataBrew job.
+module Amazonka.DataBrew.DescribeJob
+  ( -- * Creating a Request
+    DescribeJob (..),
+    newDescribeJob,
+
+    -- * Request Lenses
+    describeJob_name,
+
+    -- * Destructuring the Response
+    DescribeJobResponse (..),
+    newDescribeJobResponse,
+
+    -- * Response Lenses
+    describeJobResponse_createDate,
+    describeJobResponse_createdBy,
+    describeJobResponse_dataCatalogOutputs,
+    describeJobResponse_databaseOutputs,
+    describeJobResponse_datasetName,
+    describeJobResponse_encryptionKeyArn,
+    describeJobResponse_encryptionMode,
+    describeJobResponse_jobSample,
+    describeJobResponse_lastModifiedBy,
+    describeJobResponse_lastModifiedDate,
+    describeJobResponse_logSubscription,
+    describeJobResponse_maxCapacity,
+    describeJobResponse_maxRetries,
+    describeJobResponse_outputs,
+    describeJobResponse_profileConfiguration,
+    describeJobResponse_projectName,
+    describeJobResponse_recipeReference,
+    describeJobResponse_resourceArn,
+    describeJobResponse_roleArn,
+    describeJobResponse_tags,
+    describeJobResponse_timeout,
+    describeJobResponse_type,
+    describeJobResponse_validationConfigurations,
+    describeJobResponse_httpStatus,
+    describeJobResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeJob' smart constructor.
+data DescribeJob = DescribeJob'
+  { -- | The name of the job to be described.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeJob_name' - The name of the job to be described.
+newDescribeJob ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeJob
+newDescribeJob pName_ = DescribeJob' {name = pName_}
+
+-- | The name of the job to be described.
+describeJob_name :: Lens.Lens' DescribeJob Prelude.Text
+describeJob_name = Lens.lens (\DescribeJob' {name} -> name) (\s@DescribeJob' {} a -> s {name = a} :: DescribeJob)
+
+instance Core.AWSRequest DescribeJob where
+  type AWSResponse DescribeJob = DescribeJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeJobResponse'
+            Prelude.<$> (x Data..?> "CreateDate")
+            Prelude.<*> (x Data..?> "CreatedBy")
+            Prelude.<*> (x Data..?> "DataCatalogOutputs")
+            Prelude.<*> (x Data..?> "DatabaseOutputs")
+            Prelude.<*> (x Data..?> "DatasetName")
+            Prelude.<*> (x Data..?> "EncryptionKeyArn")
+            Prelude.<*> (x Data..?> "EncryptionMode")
+            Prelude.<*> (x Data..?> "JobSample")
+            Prelude.<*> (x Data..?> "LastModifiedBy")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (x Data..?> "LogSubscription")
+            Prelude.<*> (x Data..?> "MaxCapacity")
+            Prelude.<*> (x Data..?> "MaxRetries")
+            Prelude.<*> (x Data..?> "Outputs")
+            Prelude.<*> (x Data..?> "ProfileConfiguration")
+            Prelude.<*> (x Data..?> "ProjectName")
+            Prelude.<*> (x Data..?> "RecipeReference")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Timeout")
+            Prelude.<*> (x Data..?> "Type")
+            Prelude.<*> (x Data..?> "ValidationConfigurations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DescribeJob where
+  hashWithSalt _salt DescribeJob' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeJob where
+  rnf DescribeJob' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DescribeJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeJob where
+  toPath DescribeJob' {..} =
+    Prelude.mconcat ["/jobs/", Data.toBS name]
+
+instance Data.ToQuery DescribeJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeJobResponse' smart constructor.
+data DescribeJobResponse = DescribeJobResponse'
+  { -- | The date and time that the job was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier (user name) of the user associated with the creation of
+    -- the job.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | One or more artifacts that represent the Glue Data Catalog output from
+    -- running the job.
+    dataCatalogOutputs :: Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput),
+    -- | Represents a list of JDBC database output objects which defines the
+    -- output destination for a DataBrew recipe job to write into.
+    databaseOutputs :: Prelude.Maybe (Prelude.NonEmpty DatabaseOutput),
+    -- | The dataset that the job acts upon.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an encryption key that is used to
+    -- protect the job.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The encryption mode for the job, which can be one of the following:
+    --
+    -- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+    --
+    -- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+    encryptionMode :: Prelude.Maybe EncryptionMode,
+    -- | Sample configuration for profile jobs only. Determines the number of
+    -- rows on which the profile job will be executed.
+    jobSample :: Prelude.Maybe JobSample,
+    -- | The identifier (user name) of the user who last modified the job.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the job was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | Indicates whether Amazon CloudWatch logging is enabled for this job.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | The maximum number of compute nodes that DataBrew can consume when the
+    -- job processes data.
+    maxCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of times to retry the job after a job run fails.
+    maxRetries :: Prelude.Maybe Prelude.Natural,
+    -- | One or more artifacts that represent the output from running the job.
+    outputs :: Prelude.Maybe (Prelude.NonEmpty Output),
+    -- | Configuration for profile jobs. Used to select columns, do evaluations,
+    -- and override default parameters of evaluations. When configuration is
+    -- null, the profile job will run with default settings.
+    profileConfiguration :: Prelude.Maybe ProfileConfiguration,
+    -- | The DataBrew project associated with this job.
+    projectName :: Prelude.Maybe Prelude.Text,
+    recipeReference :: Prelude.Maybe RecipeReference,
+    -- | The Amazon Resource Name (ARN) of the job.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Identity and Access Management (IAM) role to be assumed
+    -- when DataBrew runs the job.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | Metadata tags associated with this job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The job\'s timeout in minutes. A job that attempts to run longer than
+    -- this timeout period ends with a status of @TIMEOUT@.
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | The job type, which must be one of the following:
+    --
+    -- -   @PROFILE@ - The job analyzes the dataset to determine its size, data
+    --     types, data distribution, and more.
+    --
+    -- -   @RECIPE@ - The job applies one or more transformations to a dataset.
+    type' :: Prelude.Maybe JobType,
+    -- | List of validation configurations that are applied to the profile job.
+    validationConfigurations :: Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'describeJobResponse_createDate' - The date and time that the job was created.
+--
+-- 'createdBy', 'describeJobResponse_createdBy' - The identifier (user name) of the user associated with the creation of
+-- the job.
+--
+-- 'dataCatalogOutputs', 'describeJobResponse_dataCatalogOutputs' - One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+--
+-- 'databaseOutputs', 'describeJobResponse_databaseOutputs' - Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+--
+-- 'datasetName', 'describeJobResponse_datasetName' - The dataset that the job acts upon.
+--
+-- 'encryptionKeyArn', 'describeJobResponse_encryptionKeyArn' - The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+--
+-- 'encryptionMode', 'describeJobResponse_encryptionMode' - The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+--
+-- 'jobSample', 'describeJobResponse_jobSample' - Sample configuration for profile jobs only. Determines the number of
+-- rows on which the profile job will be executed.
+--
+-- 'lastModifiedBy', 'describeJobResponse_lastModifiedBy' - The identifier (user name) of the user who last modified the job.
+--
+-- 'lastModifiedDate', 'describeJobResponse_lastModifiedDate' - The date and time that the job was last modified.
+--
+-- 'logSubscription', 'describeJobResponse_logSubscription' - Indicates whether Amazon CloudWatch logging is enabled for this job.
+--
+-- 'maxCapacity', 'describeJobResponse_maxCapacity' - The maximum number of compute nodes that DataBrew can consume when the
+-- job processes data.
+--
+-- 'maxRetries', 'describeJobResponse_maxRetries' - The maximum number of times to retry the job after a job run fails.
+--
+-- 'outputs', 'describeJobResponse_outputs' - One or more artifacts that represent the output from running the job.
+--
+-- 'profileConfiguration', 'describeJobResponse_profileConfiguration' - Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+--
+-- 'projectName', 'describeJobResponse_projectName' - The DataBrew project associated with this job.
+--
+-- 'recipeReference', 'describeJobResponse_recipeReference' - Undocumented member.
+--
+-- 'resourceArn', 'describeJobResponse_resourceArn' - The Amazon Resource Name (ARN) of the job.
+--
+-- 'roleArn', 'describeJobResponse_roleArn' - The ARN of the Identity and Access Management (IAM) role to be assumed
+-- when DataBrew runs the job.
+--
+-- 'tags', 'describeJobResponse_tags' - Metadata tags associated with this job.
+--
+-- 'timeout', 'describeJobResponse_timeout' - The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+--
+-- 'type'', 'describeJobResponse_type' - The job type, which must be one of the following:
+--
+-- -   @PROFILE@ - The job analyzes the dataset to determine its size, data
+--     types, data distribution, and more.
+--
+-- -   @RECIPE@ - The job applies one or more transformations to a dataset.
+--
+-- 'validationConfigurations', 'describeJobResponse_validationConfigurations' - List of validation configurations that are applied to the profile job.
+--
+-- 'httpStatus', 'describeJobResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeJobResponse_name' - The name of the job.
+newDescribeJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DescribeJobResponse
+newDescribeJobResponse pHttpStatus_ pName_ =
+  DescribeJobResponse'
+    { createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      dataCatalogOutputs = Prelude.Nothing,
+      databaseOutputs = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      encryptionKeyArn = Prelude.Nothing,
+      encryptionMode = Prelude.Nothing,
+      jobSample = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      maxCapacity = Prelude.Nothing,
+      maxRetries = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      profileConfiguration = Prelude.Nothing,
+      projectName = Prelude.Nothing,
+      recipeReference = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeout = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validationConfigurations = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The date and time that the job was created.
+describeJobResponse_createDate :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeJobResponse_createDate = Lens.lens (\DescribeJobResponse' {createDate} -> createDate) (\s@DescribeJobResponse' {} a -> s {createDate = a} :: DescribeJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier (user name) of the user associated with the creation of
+-- the job.
+describeJobResponse_createdBy :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_createdBy = Lens.lens (\DescribeJobResponse' {createdBy} -> createdBy) (\s@DescribeJobResponse' {} a -> s {createdBy = a} :: DescribeJobResponse)
+
+-- | One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+describeJobResponse_dataCatalogOutputs :: Lens.Lens' DescribeJobResponse (Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput))
+describeJobResponse_dataCatalogOutputs = Lens.lens (\DescribeJobResponse' {dataCatalogOutputs} -> dataCatalogOutputs) (\s@DescribeJobResponse' {} a -> s {dataCatalogOutputs = a} :: DescribeJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+describeJobResponse_databaseOutputs :: Lens.Lens' DescribeJobResponse (Prelude.Maybe (Prelude.NonEmpty DatabaseOutput))
+describeJobResponse_databaseOutputs = Lens.lens (\DescribeJobResponse' {databaseOutputs} -> databaseOutputs) (\s@DescribeJobResponse' {} a -> s {databaseOutputs = a} :: DescribeJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The dataset that the job acts upon.
+describeJobResponse_datasetName :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_datasetName = Lens.lens (\DescribeJobResponse' {datasetName} -> datasetName) (\s@DescribeJobResponse' {} a -> s {datasetName = a} :: DescribeJobResponse)
+
+-- | The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+describeJobResponse_encryptionKeyArn :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_encryptionKeyArn = Lens.lens (\DescribeJobResponse' {encryptionKeyArn} -> encryptionKeyArn) (\s@DescribeJobResponse' {} a -> s {encryptionKeyArn = a} :: DescribeJobResponse)
+
+-- | The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+describeJobResponse_encryptionMode :: Lens.Lens' DescribeJobResponse (Prelude.Maybe EncryptionMode)
+describeJobResponse_encryptionMode = Lens.lens (\DescribeJobResponse' {encryptionMode} -> encryptionMode) (\s@DescribeJobResponse' {} a -> s {encryptionMode = a} :: DescribeJobResponse)
+
+-- | Sample configuration for profile jobs only. Determines the number of
+-- rows on which the profile job will be executed.
+describeJobResponse_jobSample :: Lens.Lens' DescribeJobResponse (Prelude.Maybe JobSample)
+describeJobResponse_jobSample = Lens.lens (\DescribeJobResponse' {jobSample} -> jobSample) (\s@DescribeJobResponse' {} a -> s {jobSample = a} :: DescribeJobResponse)
+
+-- | The identifier (user name) of the user who last modified the job.
+describeJobResponse_lastModifiedBy :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_lastModifiedBy = Lens.lens (\DescribeJobResponse' {lastModifiedBy} -> lastModifiedBy) (\s@DescribeJobResponse' {} a -> s {lastModifiedBy = a} :: DescribeJobResponse)
+
+-- | The date and time that the job was last modified.
+describeJobResponse_lastModifiedDate :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeJobResponse_lastModifiedDate = Lens.lens (\DescribeJobResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeJobResponse' {} a -> s {lastModifiedDate = a} :: DescribeJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether Amazon CloudWatch logging is enabled for this job.
+describeJobResponse_logSubscription :: Lens.Lens' DescribeJobResponse (Prelude.Maybe LogSubscription)
+describeJobResponse_logSubscription = Lens.lens (\DescribeJobResponse' {logSubscription} -> logSubscription) (\s@DescribeJobResponse' {} a -> s {logSubscription = a} :: DescribeJobResponse)
+
+-- | The maximum number of compute nodes that DataBrew can consume when the
+-- job processes data.
+describeJobResponse_maxCapacity :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Int)
+describeJobResponse_maxCapacity = Lens.lens (\DescribeJobResponse' {maxCapacity} -> maxCapacity) (\s@DescribeJobResponse' {} a -> s {maxCapacity = a} :: DescribeJobResponse)
+
+-- | The maximum number of times to retry the job after a job run fails.
+describeJobResponse_maxRetries :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Natural)
+describeJobResponse_maxRetries = Lens.lens (\DescribeJobResponse' {maxRetries} -> maxRetries) (\s@DescribeJobResponse' {} a -> s {maxRetries = a} :: DescribeJobResponse)
+
+-- | One or more artifacts that represent the output from running the job.
+describeJobResponse_outputs :: Lens.Lens' DescribeJobResponse (Prelude.Maybe (Prelude.NonEmpty Output))
+describeJobResponse_outputs = Lens.lens (\DescribeJobResponse' {outputs} -> outputs) (\s@DescribeJobResponse' {} a -> s {outputs = a} :: DescribeJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+describeJobResponse_profileConfiguration :: Lens.Lens' DescribeJobResponse (Prelude.Maybe ProfileConfiguration)
+describeJobResponse_profileConfiguration = Lens.lens (\DescribeJobResponse' {profileConfiguration} -> profileConfiguration) (\s@DescribeJobResponse' {} a -> s {profileConfiguration = a} :: DescribeJobResponse)
+
+-- | The DataBrew project associated with this job.
+describeJobResponse_projectName :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_projectName = Lens.lens (\DescribeJobResponse' {projectName} -> projectName) (\s@DescribeJobResponse' {} a -> s {projectName = a} :: DescribeJobResponse)
+
+-- | Undocumented member.
+describeJobResponse_recipeReference :: Lens.Lens' DescribeJobResponse (Prelude.Maybe RecipeReference)
+describeJobResponse_recipeReference = Lens.lens (\DescribeJobResponse' {recipeReference} -> recipeReference) (\s@DescribeJobResponse' {} a -> s {recipeReference = a} :: DescribeJobResponse)
+
+-- | The Amazon Resource Name (ARN) of the job.
+describeJobResponse_resourceArn :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_resourceArn = Lens.lens (\DescribeJobResponse' {resourceArn} -> resourceArn) (\s@DescribeJobResponse' {} a -> s {resourceArn = a} :: DescribeJobResponse)
+
+-- | The ARN of the Identity and Access Management (IAM) role to be assumed
+-- when DataBrew runs the job.
+describeJobResponse_roleArn :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Text)
+describeJobResponse_roleArn = Lens.lens (\DescribeJobResponse' {roleArn} -> roleArn) (\s@DescribeJobResponse' {} a -> s {roleArn = a} :: DescribeJobResponse)
+
+-- | Metadata tags associated with this job.
+describeJobResponse_tags :: Lens.Lens' DescribeJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeJobResponse_tags = Lens.lens (\DescribeJobResponse' {tags} -> tags) (\s@DescribeJobResponse' {} a -> s {tags = a} :: DescribeJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+describeJobResponse_timeout :: Lens.Lens' DescribeJobResponse (Prelude.Maybe Prelude.Natural)
+describeJobResponse_timeout = Lens.lens (\DescribeJobResponse' {timeout} -> timeout) (\s@DescribeJobResponse' {} a -> s {timeout = a} :: DescribeJobResponse)
+
+-- | The job type, which must be one of the following:
+--
+-- -   @PROFILE@ - The job analyzes the dataset to determine its size, data
+--     types, data distribution, and more.
+--
+-- -   @RECIPE@ - The job applies one or more transformations to a dataset.
+describeJobResponse_type :: Lens.Lens' DescribeJobResponse (Prelude.Maybe JobType)
+describeJobResponse_type = Lens.lens (\DescribeJobResponse' {type'} -> type') (\s@DescribeJobResponse' {} a -> s {type' = a} :: DescribeJobResponse)
+
+-- | List of validation configurations that are applied to the profile job.
+describeJobResponse_validationConfigurations :: Lens.Lens' DescribeJobResponse (Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration))
+describeJobResponse_validationConfigurations = Lens.lens (\DescribeJobResponse' {validationConfigurations} -> validationConfigurations) (\s@DescribeJobResponse' {} a -> s {validationConfigurations = a} :: DescribeJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeJobResponse_httpStatus :: Lens.Lens' DescribeJobResponse Prelude.Int
+describeJobResponse_httpStatus = Lens.lens (\DescribeJobResponse' {httpStatus} -> httpStatus) (\s@DescribeJobResponse' {} a -> s {httpStatus = a} :: DescribeJobResponse)
+
+-- | The name of the job.
+describeJobResponse_name :: Lens.Lens' DescribeJobResponse Prelude.Text
+describeJobResponse_name = Lens.lens (\DescribeJobResponse' {name} -> name) (\s@DescribeJobResponse' {} a -> s {name = a} :: DescribeJobResponse)
+
+instance Prelude.NFData DescribeJobResponse where
+  rnf DescribeJobResponse' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf dataCatalogOutputs
+      `Prelude.seq` Prelude.rnf databaseOutputs
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf encryptionMode
+      `Prelude.seq` Prelude.rnf jobSample
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf maxCapacity
+      `Prelude.seq` Prelude.rnf maxRetries
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf profileConfiguration
+      `Prelude.seq` Prelude.rnf projectName
+      `Prelude.seq` Prelude.rnf recipeReference
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf
+        validationConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DescribeJobRun.hs b/gen/Amazonka/DataBrew/DescribeJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeJobRun.hs
@@ -0,0 +1,424 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeJobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Represents one run of a DataBrew job.
+module Amazonka.DataBrew.DescribeJobRun
+  ( -- * Creating a Request
+    DescribeJobRun (..),
+    newDescribeJobRun,
+
+    -- * Request Lenses
+    describeJobRun_name,
+    describeJobRun_runId,
+
+    -- * Destructuring the Response
+    DescribeJobRunResponse (..),
+    newDescribeJobRunResponse,
+
+    -- * Response Lenses
+    describeJobRunResponse_attempt,
+    describeJobRunResponse_completedOn,
+    describeJobRunResponse_dataCatalogOutputs,
+    describeJobRunResponse_databaseOutputs,
+    describeJobRunResponse_datasetName,
+    describeJobRunResponse_errorMessage,
+    describeJobRunResponse_executionTime,
+    describeJobRunResponse_jobSample,
+    describeJobRunResponse_logGroupName,
+    describeJobRunResponse_logSubscription,
+    describeJobRunResponse_outputs,
+    describeJobRunResponse_profileConfiguration,
+    describeJobRunResponse_recipeReference,
+    describeJobRunResponse_runId,
+    describeJobRunResponse_startedBy,
+    describeJobRunResponse_startedOn,
+    describeJobRunResponse_state,
+    describeJobRunResponse_validationConfigurations,
+    describeJobRunResponse_httpStatus,
+    describeJobRunResponse_jobName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeJobRun' smart constructor.
+data DescribeJobRun = DescribeJobRun'
+  { -- | The name of the job being processed during this run.
+    name :: Prelude.Text,
+    -- | The unique identifier of the job run.
+    runId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeJobRun_name' - The name of the job being processed during this run.
+--
+-- 'runId', 'describeJobRun_runId' - The unique identifier of the job run.
+newDescribeJobRun ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'runId'
+  Prelude.Text ->
+  DescribeJobRun
+newDescribeJobRun pName_ pRunId_ =
+  DescribeJobRun' {name = pName_, runId = pRunId_}
+
+-- | The name of the job being processed during this run.
+describeJobRun_name :: Lens.Lens' DescribeJobRun Prelude.Text
+describeJobRun_name = Lens.lens (\DescribeJobRun' {name} -> name) (\s@DescribeJobRun' {} a -> s {name = a} :: DescribeJobRun)
+
+-- | The unique identifier of the job run.
+describeJobRun_runId :: Lens.Lens' DescribeJobRun Prelude.Text
+describeJobRun_runId = Lens.lens (\DescribeJobRun' {runId} -> runId) (\s@DescribeJobRun' {} a -> s {runId = a} :: DescribeJobRun)
+
+instance Core.AWSRequest DescribeJobRun where
+  type
+    AWSResponse DescribeJobRun =
+      DescribeJobRunResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeJobRunResponse'
+            Prelude.<$> (x Data..?> "Attempt")
+            Prelude.<*> (x Data..?> "CompletedOn")
+            Prelude.<*> (x Data..?> "DataCatalogOutputs")
+            Prelude.<*> (x Data..?> "DatabaseOutputs")
+            Prelude.<*> (x Data..?> "DatasetName")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "ExecutionTime")
+            Prelude.<*> (x Data..?> "JobSample")
+            Prelude.<*> (x Data..?> "LogGroupName")
+            Prelude.<*> (x Data..?> "LogSubscription")
+            Prelude.<*> (x Data..?> "Outputs")
+            Prelude.<*> (x Data..?> "ProfileConfiguration")
+            Prelude.<*> (x Data..?> "RecipeReference")
+            Prelude.<*> (x Data..?> "RunId")
+            Prelude.<*> (x Data..?> "StartedBy")
+            Prelude.<*> (x Data..?> "StartedOn")
+            Prelude.<*> (x Data..?> "State")
+            Prelude.<*> (x Data..?> "ValidationConfigurations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "JobName")
+      )
+
+instance Prelude.Hashable DescribeJobRun where
+  hashWithSalt _salt DescribeJobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` runId
+
+instance Prelude.NFData DescribeJobRun where
+  rnf DescribeJobRun' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf runId
+
+instance Data.ToHeaders DescribeJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeJobRun where
+  toPath DescribeJobRun' {..} =
+    Prelude.mconcat
+      [ "/jobs/",
+        Data.toBS name,
+        "/jobRun/",
+        Data.toBS runId
+      ]
+
+instance Data.ToQuery DescribeJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeJobRunResponse' smart constructor.
+data DescribeJobRunResponse = DescribeJobRunResponse'
+  { -- | The number of times that DataBrew has attempted to run the job.
+    attempt :: Prelude.Maybe Prelude.Int,
+    -- | The date and time when the job completed processing.
+    completedOn :: Prelude.Maybe Data.POSIX,
+    -- | One or more artifacts that represent the Glue Data Catalog output from
+    -- running the job.
+    dataCatalogOutputs :: Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput),
+    -- | Represents a list of JDBC database output objects which defines the
+    -- output destination for a DataBrew recipe job to write into.
+    databaseOutputs :: Prelude.Maybe (Prelude.NonEmpty DatabaseOutput),
+    -- | The name of the dataset for the job to process.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | A message indicating an error (if any) that was encountered when the job
+    -- ran.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time, in seconds, during which the job run consumed
+    -- resources.
+    executionTime :: Prelude.Maybe Prelude.Int,
+    -- | Sample configuration for profile jobs only. Determines the number of
+    -- rows on which the profile job will be executed. If a JobSample value is
+    -- not provided, the default value will be used. The default value is
+    -- CUSTOM_ROWS for the mode parameter and 20000 for the size parameter.
+    jobSample :: Prelude.Maybe JobSample,
+    -- | The name of an Amazon CloudWatch log group, where the job writes
+    -- diagnostic messages when it runs.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of Amazon CloudWatch logging for the job run.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | One or more output artifacts from a job run.
+    outputs :: Prelude.Maybe (Prelude.NonEmpty Output),
+    -- | Configuration for profile jobs. Used to select columns, do evaluations,
+    -- and override default parameters of evaluations. When configuration is
+    -- null, the profile job will run with default settings.
+    profileConfiguration :: Prelude.Maybe ProfileConfiguration,
+    recipeReference :: Prelude.Maybe RecipeReference,
+    -- | The unique identifier of the job run.
+    runId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who started the job run.
+    startedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the job run began.
+    startedOn :: Prelude.Maybe Data.POSIX,
+    -- | The current state of the job run entity itself.
+    state :: Prelude.Maybe JobRunState,
+    -- | List of validation configurations that are applied to the profile job.
+    validationConfigurations :: Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job being processed during this run.
+    jobName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attempt', 'describeJobRunResponse_attempt' - The number of times that DataBrew has attempted to run the job.
+--
+-- 'completedOn', 'describeJobRunResponse_completedOn' - The date and time when the job completed processing.
+--
+-- 'dataCatalogOutputs', 'describeJobRunResponse_dataCatalogOutputs' - One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+--
+-- 'databaseOutputs', 'describeJobRunResponse_databaseOutputs' - Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+--
+-- 'datasetName', 'describeJobRunResponse_datasetName' - The name of the dataset for the job to process.
+--
+-- 'errorMessage', 'describeJobRunResponse_errorMessage' - A message indicating an error (if any) that was encountered when the job
+-- ran.
+--
+-- 'executionTime', 'describeJobRunResponse_executionTime' - The amount of time, in seconds, during which the job run consumed
+-- resources.
+--
+-- 'jobSample', 'describeJobRunResponse_jobSample' - Sample configuration for profile jobs only. Determines the number of
+-- rows on which the profile job will be executed. If a JobSample value is
+-- not provided, the default value will be used. The default value is
+-- CUSTOM_ROWS for the mode parameter and 20000 for the size parameter.
+--
+-- 'logGroupName', 'describeJobRunResponse_logGroupName' - The name of an Amazon CloudWatch log group, where the job writes
+-- diagnostic messages when it runs.
+--
+-- 'logSubscription', 'describeJobRunResponse_logSubscription' - The current status of Amazon CloudWatch logging for the job run.
+--
+-- 'outputs', 'describeJobRunResponse_outputs' - One or more output artifacts from a job run.
+--
+-- 'profileConfiguration', 'describeJobRunResponse_profileConfiguration' - Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+--
+-- 'recipeReference', 'describeJobRunResponse_recipeReference' - Undocumented member.
+--
+-- 'runId', 'describeJobRunResponse_runId' - The unique identifier of the job run.
+--
+-- 'startedBy', 'describeJobRunResponse_startedBy' - The Amazon Resource Name (ARN) of the user who started the job run.
+--
+-- 'startedOn', 'describeJobRunResponse_startedOn' - The date and time when the job run began.
+--
+-- 'state', 'describeJobRunResponse_state' - The current state of the job run entity itself.
+--
+-- 'validationConfigurations', 'describeJobRunResponse_validationConfigurations' - List of validation configurations that are applied to the profile job.
+--
+-- 'httpStatus', 'describeJobRunResponse_httpStatus' - The response's http status code.
+--
+-- 'jobName', 'describeJobRunResponse_jobName' - The name of the job being processed during this run.
+newDescribeJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'jobName'
+  Prelude.Text ->
+  DescribeJobRunResponse
+newDescribeJobRunResponse pHttpStatus_ pJobName_ =
+  DescribeJobRunResponse'
+    { attempt = Prelude.Nothing,
+      completedOn = Prelude.Nothing,
+      dataCatalogOutputs = Prelude.Nothing,
+      databaseOutputs = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      executionTime = Prelude.Nothing,
+      jobSample = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      profileConfiguration = Prelude.Nothing,
+      recipeReference = Prelude.Nothing,
+      runId = Prelude.Nothing,
+      startedBy = Prelude.Nothing,
+      startedOn = Prelude.Nothing,
+      state = Prelude.Nothing,
+      validationConfigurations = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      jobName = pJobName_
+    }
+
+-- | The number of times that DataBrew has attempted to run the job.
+describeJobRunResponse_attempt :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Int)
+describeJobRunResponse_attempt = Lens.lens (\DescribeJobRunResponse' {attempt} -> attempt) (\s@DescribeJobRunResponse' {} a -> s {attempt = a} :: DescribeJobRunResponse)
+
+-- | The date and time when the job completed processing.
+describeJobRunResponse_completedOn :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.UTCTime)
+describeJobRunResponse_completedOn = Lens.lens (\DescribeJobRunResponse' {completedOn} -> completedOn) (\s@DescribeJobRunResponse' {} a -> s {completedOn = a} :: DescribeJobRunResponse) Prelude.. Lens.mapping Data._Time
+
+-- | One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+describeJobRunResponse_dataCatalogOutputs :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput))
+describeJobRunResponse_dataCatalogOutputs = Lens.lens (\DescribeJobRunResponse' {dataCatalogOutputs} -> dataCatalogOutputs) (\s@DescribeJobRunResponse' {} a -> s {dataCatalogOutputs = a} :: DescribeJobRunResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+describeJobRunResponse_databaseOutputs :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe (Prelude.NonEmpty DatabaseOutput))
+describeJobRunResponse_databaseOutputs = Lens.lens (\DescribeJobRunResponse' {databaseOutputs} -> databaseOutputs) (\s@DescribeJobRunResponse' {} a -> s {databaseOutputs = a} :: DescribeJobRunResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dataset for the job to process.
+describeJobRunResponse_datasetName :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Text)
+describeJobRunResponse_datasetName = Lens.lens (\DescribeJobRunResponse' {datasetName} -> datasetName) (\s@DescribeJobRunResponse' {} a -> s {datasetName = a} :: DescribeJobRunResponse)
+
+-- | A message indicating an error (if any) that was encountered when the job
+-- ran.
+describeJobRunResponse_errorMessage :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Text)
+describeJobRunResponse_errorMessage = Lens.lens (\DescribeJobRunResponse' {errorMessage} -> errorMessage) (\s@DescribeJobRunResponse' {} a -> s {errorMessage = a} :: DescribeJobRunResponse)
+
+-- | The amount of time, in seconds, during which the job run consumed
+-- resources.
+describeJobRunResponse_executionTime :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Int)
+describeJobRunResponse_executionTime = Lens.lens (\DescribeJobRunResponse' {executionTime} -> executionTime) (\s@DescribeJobRunResponse' {} a -> s {executionTime = a} :: DescribeJobRunResponse)
+
+-- | Sample configuration for profile jobs only. Determines the number of
+-- rows on which the profile job will be executed. If a JobSample value is
+-- not provided, the default value will be used. The default value is
+-- CUSTOM_ROWS for the mode parameter and 20000 for the size parameter.
+describeJobRunResponse_jobSample :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe JobSample)
+describeJobRunResponse_jobSample = Lens.lens (\DescribeJobRunResponse' {jobSample} -> jobSample) (\s@DescribeJobRunResponse' {} a -> s {jobSample = a} :: DescribeJobRunResponse)
+
+-- | The name of an Amazon CloudWatch log group, where the job writes
+-- diagnostic messages when it runs.
+describeJobRunResponse_logGroupName :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Text)
+describeJobRunResponse_logGroupName = Lens.lens (\DescribeJobRunResponse' {logGroupName} -> logGroupName) (\s@DescribeJobRunResponse' {} a -> s {logGroupName = a} :: DescribeJobRunResponse)
+
+-- | The current status of Amazon CloudWatch logging for the job run.
+describeJobRunResponse_logSubscription :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe LogSubscription)
+describeJobRunResponse_logSubscription = Lens.lens (\DescribeJobRunResponse' {logSubscription} -> logSubscription) (\s@DescribeJobRunResponse' {} a -> s {logSubscription = a} :: DescribeJobRunResponse)
+
+-- | One or more output artifacts from a job run.
+describeJobRunResponse_outputs :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe (Prelude.NonEmpty Output))
+describeJobRunResponse_outputs = Lens.lens (\DescribeJobRunResponse' {outputs} -> outputs) (\s@DescribeJobRunResponse' {} a -> s {outputs = a} :: DescribeJobRunResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+describeJobRunResponse_profileConfiguration :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe ProfileConfiguration)
+describeJobRunResponse_profileConfiguration = Lens.lens (\DescribeJobRunResponse' {profileConfiguration} -> profileConfiguration) (\s@DescribeJobRunResponse' {} a -> s {profileConfiguration = a} :: DescribeJobRunResponse)
+
+-- | Undocumented member.
+describeJobRunResponse_recipeReference :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe RecipeReference)
+describeJobRunResponse_recipeReference = Lens.lens (\DescribeJobRunResponse' {recipeReference} -> recipeReference) (\s@DescribeJobRunResponse' {} a -> s {recipeReference = a} :: DescribeJobRunResponse)
+
+-- | The unique identifier of the job run.
+describeJobRunResponse_runId :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Text)
+describeJobRunResponse_runId = Lens.lens (\DescribeJobRunResponse' {runId} -> runId) (\s@DescribeJobRunResponse' {} a -> s {runId = a} :: DescribeJobRunResponse)
+
+-- | The Amazon Resource Name (ARN) of the user who started the job run.
+describeJobRunResponse_startedBy :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.Text)
+describeJobRunResponse_startedBy = Lens.lens (\DescribeJobRunResponse' {startedBy} -> startedBy) (\s@DescribeJobRunResponse' {} a -> s {startedBy = a} :: DescribeJobRunResponse)
+
+-- | The date and time when the job run began.
+describeJobRunResponse_startedOn :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe Prelude.UTCTime)
+describeJobRunResponse_startedOn = Lens.lens (\DescribeJobRunResponse' {startedOn} -> startedOn) (\s@DescribeJobRunResponse' {} a -> s {startedOn = a} :: DescribeJobRunResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The current state of the job run entity itself.
+describeJobRunResponse_state :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe JobRunState)
+describeJobRunResponse_state = Lens.lens (\DescribeJobRunResponse' {state} -> state) (\s@DescribeJobRunResponse' {} a -> s {state = a} :: DescribeJobRunResponse)
+
+-- | List of validation configurations that are applied to the profile job.
+describeJobRunResponse_validationConfigurations :: Lens.Lens' DescribeJobRunResponse (Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration))
+describeJobRunResponse_validationConfigurations = Lens.lens (\DescribeJobRunResponse' {validationConfigurations} -> validationConfigurations) (\s@DescribeJobRunResponse' {} a -> s {validationConfigurations = a} :: DescribeJobRunResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeJobRunResponse_httpStatus :: Lens.Lens' DescribeJobRunResponse Prelude.Int
+describeJobRunResponse_httpStatus = Lens.lens (\DescribeJobRunResponse' {httpStatus} -> httpStatus) (\s@DescribeJobRunResponse' {} a -> s {httpStatus = a} :: DescribeJobRunResponse)
+
+-- | The name of the job being processed during this run.
+describeJobRunResponse_jobName :: Lens.Lens' DescribeJobRunResponse Prelude.Text
+describeJobRunResponse_jobName = Lens.lens (\DescribeJobRunResponse' {jobName} -> jobName) (\s@DescribeJobRunResponse' {} a -> s {jobName = a} :: DescribeJobRunResponse)
+
+instance Prelude.NFData DescribeJobRunResponse where
+  rnf DescribeJobRunResponse' {..} =
+    Prelude.rnf attempt
+      `Prelude.seq` Prelude.rnf completedOn
+      `Prelude.seq` Prelude.rnf dataCatalogOutputs
+      `Prelude.seq` Prelude.rnf databaseOutputs
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf executionTime
+      `Prelude.seq` Prelude.rnf jobSample
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf profileConfiguration
+      `Prelude.seq` Prelude.rnf recipeReference
+      `Prelude.seq` Prelude.rnf runId
+      `Prelude.seq` Prelude.rnf startedBy
+      `Prelude.seq` Prelude.rnf startedOn
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf
+        validationConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobName
diff --git a/gen/Amazonka/DataBrew/DescribeProject.hs b/gen/Amazonka/DataBrew/DescribeProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeProject.hs
@@ -0,0 +1,336 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the definition of a specific DataBrew project.
+module Amazonka.DataBrew.DescribeProject
+  ( -- * Creating a Request
+    DescribeProject (..),
+    newDescribeProject,
+
+    -- * Request Lenses
+    describeProject_name,
+
+    -- * Destructuring the Response
+    DescribeProjectResponse (..),
+    newDescribeProjectResponse,
+
+    -- * Response Lenses
+    describeProjectResponse_createDate,
+    describeProjectResponse_createdBy,
+    describeProjectResponse_datasetName,
+    describeProjectResponse_lastModifiedBy,
+    describeProjectResponse_lastModifiedDate,
+    describeProjectResponse_openDate,
+    describeProjectResponse_openedBy,
+    describeProjectResponse_recipeName,
+    describeProjectResponse_resourceArn,
+    describeProjectResponse_roleArn,
+    describeProjectResponse_sample,
+    describeProjectResponse_sessionStatus,
+    describeProjectResponse_tags,
+    describeProjectResponse_httpStatus,
+    describeProjectResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeProject' smart constructor.
+data DescribeProject = DescribeProject'
+  { -- | The name of the project to be described.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeProject_name' - The name of the project to be described.
+newDescribeProject ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeProject
+newDescribeProject pName_ =
+  DescribeProject' {name = pName_}
+
+-- | The name of the project to be described.
+describeProject_name :: Lens.Lens' DescribeProject Prelude.Text
+describeProject_name = Lens.lens (\DescribeProject' {name} -> name) (\s@DescribeProject' {} a -> s {name = a} :: DescribeProject)
+
+instance Core.AWSRequest DescribeProject where
+  type
+    AWSResponse DescribeProject =
+      DescribeProjectResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeProjectResponse'
+            Prelude.<$> (x Data..?> "CreateDate")
+            Prelude.<*> (x Data..?> "CreatedBy")
+            Prelude.<*> (x Data..?> "DatasetName")
+            Prelude.<*> (x Data..?> "LastModifiedBy")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (x Data..?> "OpenDate")
+            Prelude.<*> (x Data..?> "OpenedBy")
+            Prelude.<*> (x Data..?> "RecipeName")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "Sample")
+            Prelude.<*> (x Data..?> "SessionStatus")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DescribeProject where
+  hashWithSalt _salt DescribeProject' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeProject where
+  rnf DescribeProject' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DescribeProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeProject where
+  toPath DescribeProject' {..} =
+    Prelude.mconcat ["/projects/", Data.toBS name]
+
+instance Data.ToQuery DescribeProject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeProjectResponse' smart constructor.
+data DescribeProjectResponse = DescribeProjectResponse'
+  { -- | The date and time that the project was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier (user name) of the user who created the project.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The dataset associated with the project.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The identifier (user name) of the user who last modified the project.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the project was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The date and time when the project was opened.
+    openDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier (user name) of the user that opened the project for use.
+    openedBy :: Prelude.Maybe Prelude.Text,
+    -- | The recipe associated with this job.
+    recipeName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the project.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Identity and Access Management (IAM) role to be assumed
+    -- when DataBrew runs the job.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    sample :: Prelude.Maybe Sample,
+    -- | Describes the current state of the session:
+    --
+    -- -   @PROVISIONING@ - allocating resources for the session.
+    --
+    -- -   @INITIALIZING@ - getting the session ready for first use.
+    --
+    -- -   @ASSIGNED@ - the session is ready for use.
+    sessionStatus :: Prelude.Maybe SessionStatus,
+    -- | Metadata tags associated with this project.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the project.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'describeProjectResponse_createDate' - The date and time that the project was created.
+--
+-- 'createdBy', 'describeProjectResponse_createdBy' - The identifier (user name) of the user who created the project.
+--
+-- 'datasetName', 'describeProjectResponse_datasetName' - The dataset associated with the project.
+--
+-- 'lastModifiedBy', 'describeProjectResponse_lastModifiedBy' - The identifier (user name) of the user who last modified the project.
+--
+-- 'lastModifiedDate', 'describeProjectResponse_lastModifiedDate' - The date and time that the project was last modified.
+--
+-- 'openDate', 'describeProjectResponse_openDate' - The date and time when the project was opened.
+--
+-- 'openedBy', 'describeProjectResponse_openedBy' - The identifier (user name) of the user that opened the project for use.
+--
+-- 'recipeName', 'describeProjectResponse_recipeName' - The recipe associated with this job.
+--
+-- 'resourceArn', 'describeProjectResponse_resourceArn' - The Amazon Resource Name (ARN) of the project.
+--
+-- 'roleArn', 'describeProjectResponse_roleArn' - The ARN of the Identity and Access Management (IAM) role to be assumed
+-- when DataBrew runs the job.
+--
+-- 'sample', 'describeProjectResponse_sample' - Undocumented member.
+--
+-- 'sessionStatus', 'describeProjectResponse_sessionStatus' - Describes the current state of the session:
+--
+-- -   @PROVISIONING@ - allocating resources for the session.
+--
+-- -   @INITIALIZING@ - getting the session ready for first use.
+--
+-- -   @ASSIGNED@ - the session is ready for use.
+--
+-- 'tags', 'describeProjectResponse_tags' - Metadata tags associated with this project.
+--
+-- 'httpStatus', 'describeProjectResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeProjectResponse_name' - The name of the project.
+newDescribeProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DescribeProjectResponse
+newDescribeProjectResponse pHttpStatus_ pName_ =
+  DescribeProjectResponse'
+    { createDate =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      openDate = Prelude.Nothing,
+      openedBy = Prelude.Nothing,
+      recipeName = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      sample = Prelude.Nothing,
+      sessionStatus = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The date and time that the project was created.
+describeProjectResponse_createDate :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.UTCTime)
+describeProjectResponse_createDate = Lens.lens (\DescribeProjectResponse' {createDate} -> createDate) (\s@DescribeProjectResponse' {} a -> s {createDate = a} :: DescribeProjectResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier (user name) of the user who created the project.
+describeProjectResponse_createdBy :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_createdBy = Lens.lens (\DescribeProjectResponse' {createdBy} -> createdBy) (\s@DescribeProjectResponse' {} a -> s {createdBy = a} :: DescribeProjectResponse)
+
+-- | The dataset associated with the project.
+describeProjectResponse_datasetName :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_datasetName = Lens.lens (\DescribeProjectResponse' {datasetName} -> datasetName) (\s@DescribeProjectResponse' {} a -> s {datasetName = a} :: DescribeProjectResponse)
+
+-- | The identifier (user name) of the user who last modified the project.
+describeProjectResponse_lastModifiedBy :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_lastModifiedBy = Lens.lens (\DescribeProjectResponse' {lastModifiedBy} -> lastModifiedBy) (\s@DescribeProjectResponse' {} a -> s {lastModifiedBy = a} :: DescribeProjectResponse)
+
+-- | The date and time that the project was last modified.
+describeProjectResponse_lastModifiedDate :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.UTCTime)
+describeProjectResponse_lastModifiedDate = Lens.lens (\DescribeProjectResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeProjectResponse' {} a -> s {lastModifiedDate = a} :: DescribeProjectResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time when the project was opened.
+describeProjectResponse_openDate :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.UTCTime)
+describeProjectResponse_openDate = Lens.lens (\DescribeProjectResponse' {openDate} -> openDate) (\s@DescribeProjectResponse' {} a -> s {openDate = a} :: DescribeProjectResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier (user name) of the user that opened the project for use.
+describeProjectResponse_openedBy :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_openedBy = Lens.lens (\DescribeProjectResponse' {openedBy} -> openedBy) (\s@DescribeProjectResponse' {} a -> s {openedBy = a} :: DescribeProjectResponse)
+
+-- | The recipe associated with this job.
+describeProjectResponse_recipeName :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_recipeName = Lens.lens (\DescribeProjectResponse' {recipeName} -> recipeName) (\s@DescribeProjectResponse' {} a -> s {recipeName = a} :: DescribeProjectResponse)
+
+-- | The Amazon Resource Name (ARN) of the project.
+describeProjectResponse_resourceArn :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_resourceArn = Lens.lens (\DescribeProjectResponse' {resourceArn} -> resourceArn) (\s@DescribeProjectResponse' {} a -> s {resourceArn = a} :: DescribeProjectResponse)
+
+-- | The ARN of the Identity and Access Management (IAM) role to be assumed
+-- when DataBrew runs the job.
+describeProjectResponse_roleArn :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Prelude.Text)
+describeProjectResponse_roleArn = Lens.lens (\DescribeProjectResponse' {roleArn} -> roleArn) (\s@DescribeProjectResponse' {} a -> s {roleArn = a} :: DescribeProjectResponse)
+
+-- | Undocumented member.
+describeProjectResponse_sample :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe Sample)
+describeProjectResponse_sample = Lens.lens (\DescribeProjectResponse' {sample} -> sample) (\s@DescribeProjectResponse' {} a -> s {sample = a} :: DescribeProjectResponse)
+
+-- | Describes the current state of the session:
+--
+-- -   @PROVISIONING@ - allocating resources for the session.
+--
+-- -   @INITIALIZING@ - getting the session ready for first use.
+--
+-- -   @ASSIGNED@ - the session is ready for use.
+describeProjectResponse_sessionStatus :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe SessionStatus)
+describeProjectResponse_sessionStatus = Lens.lens (\DescribeProjectResponse' {sessionStatus} -> sessionStatus) (\s@DescribeProjectResponse' {} a -> s {sessionStatus = a} :: DescribeProjectResponse)
+
+-- | Metadata tags associated with this project.
+describeProjectResponse_tags :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeProjectResponse_tags = Lens.lens (\DescribeProjectResponse' {tags} -> tags) (\s@DescribeProjectResponse' {} a -> s {tags = a} :: DescribeProjectResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeProjectResponse_httpStatus :: Lens.Lens' DescribeProjectResponse Prelude.Int
+describeProjectResponse_httpStatus = Lens.lens (\DescribeProjectResponse' {httpStatus} -> httpStatus) (\s@DescribeProjectResponse' {} a -> s {httpStatus = a} :: DescribeProjectResponse)
+
+-- | The name of the project.
+describeProjectResponse_name :: Lens.Lens' DescribeProjectResponse Prelude.Text
+describeProjectResponse_name = Lens.lens (\DescribeProjectResponse' {name} -> name) (\s@DescribeProjectResponse' {} a -> s {name = a} :: DescribeProjectResponse)
+
+instance Prelude.NFData DescribeProjectResponse where
+  rnf DescribeProjectResponse' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf openDate
+      `Prelude.seq` Prelude.rnf openedBy
+      `Prelude.seq` Prelude.rnf recipeName
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sample
+      `Prelude.seq` Prelude.rnf sessionStatus
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DescribeRecipe.hs b/gen/Amazonka/DataBrew/DescribeRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeRecipe.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the definition of a specific DataBrew recipe corresponding to a
+-- particular version.
+module Amazonka.DataBrew.DescribeRecipe
+  ( -- * Creating a Request
+    DescribeRecipe (..),
+    newDescribeRecipe,
+
+    -- * Request Lenses
+    describeRecipe_recipeVersion,
+    describeRecipe_name,
+
+    -- * Destructuring the Response
+    DescribeRecipeResponse (..),
+    newDescribeRecipeResponse,
+
+    -- * Response Lenses
+    describeRecipeResponse_createDate,
+    describeRecipeResponse_createdBy,
+    describeRecipeResponse_description,
+    describeRecipeResponse_lastModifiedBy,
+    describeRecipeResponse_lastModifiedDate,
+    describeRecipeResponse_projectName,
+    describeRecipeResponse_publishedBy,
+    describeRecipeResponse_publishedDate,
+    describeRecipeResponse_recipeVersion,
+    describeRecipeResponse_resourceArn,
+    describeRecipeResponse_steps,
+    describeRecipeResponse_tags,
+    describeRecipeResponse_httpStatus,
+    describeRecipeResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRecipe' smart constructor.
+data DescribeRecipe = DescribeRecipe'
+  { -- | The recipe version identifier. If this parameter isn\'t specified, then
+    -- the latest published version is returned.
+    recipeVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recipe to be described.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recipeVersion', 'describeRecipe_recipeVersion' - The recipe version identifier. If this parameter isn\'t specified, then
+-- the latest published version is returned.
+--
+-- 'name', 'describeRecipe_name' - The name of the recipe to be described.
+newDescribeRecipe ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeRecipe
+newDescribeRecipe pName_ =
+  DescribeRecipe'
+    { recipeVersion = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The recipe version identifier. If this parameter isn\'t specified, then
+-- the latest published version is returned.
+describeRecipe_recipeVersion :: Lens.Lens' DescribeRecipe (Prelude.Maybe Prelude.Text)
+describeRecipe_recipeVersion = Lens.lens (\DescribeRecipe' {recipeVersion} -> recipeVersion) (\s@DescribeRecipe' {} a -> s {recipeVersion = a} :: DescribeRecipe)
+
+-- | The name of the recipe to be described.
+describeRecipe_name :: Lens.Lens' DescribeRecipe Prelude.Text
+describeRecipe_name = Lens.lens (\DescribeRecipe' {name} -> name) (\s@DescribeRecipe' {} a -> s {name = a} :: DescribeRecipe)
+
+instance Core.AWSRequest DescribeRecipe where
+  type
+    AWSResponse DescribeRecipe =
+      DescribeRecipeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRecipeResponse'
+            Prelude.<$> (x Data..?> "CreateDate")
+            Prelude.<*> (x Data..?> "CreatedBy")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "LastModifiedBy")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (x Data..?> "ProjectName")
+            Prelude.<*> (x Data..?> "PublishedBy")
+            Prelude.<*> (x Data..?> "PublishedDate")
+            Prelude.<*> (x Data..?> "RecipeVersion")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Steps" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DescribeRecipe where
+  hashWithSalt _salt DescribeRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` recipeVersion
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeRecipe where
+  rnf DescribeRecipe' {..} =
+    Prelude.rnf recipeVersion
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders DescribeRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeRecipe where
+  toPath DescribeRecipe' {..} =
+    Prelude.mconcat ["/recipes/", Data.toBS name]
+
+instance Data.ToQuery DescribeRecipe where
+  toQuery DescribeRecipe' {..} =
+    Prelude.mconcat
+      ["recipeVersion" Data.=: recipeVersion]
+
+-- | /See:/ 'newDescribeRecipeResponse' smart constructor.
+data DescribeRecipeResponse = DescribeRecipeResponse'
+  { -- | The date and time that the recipe was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier (user name) of the user who created the recipe.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The description of the recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier (user name) of the user who last modified the recipe.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the recipe was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The name of the project associated with this recipe.
+    projectName :: Prelude.Maybe Prelude.Text,
+    -- | The identifier (user name) of the user who last published the recipe.
+    publishedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the recipe was last published.
+    publishedDate :: Prelude.Maybe Data.POSIX,
+    -- | The recipe version identifier.
+    recipeVersion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the recipe.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | One or more steps to be performed by the recipe. Each step consists of
+    -- an action, and the conditions under which the action should succeed.
+    steps :: Prelude.Maybe [RecipeStep],
+    -- | Metadata tags associated with this project.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the recipe.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'describeRecipeResponse_createDate' - The date and time that the recipe was created.
+--
+-- 'createdBy', 'describeRecipeResponse_createdBy' - The identifier (user name) of the user who created the recipe.
+--
+-- 'description', 'describeRecipeResponse_description' - The description of the recipe.
+--
+-- 'lastModifiedBy', 'describeRecipeResponse_lastModifiedBy' - The identifier (user name) of the user who last modified the recipe.
+--
+-- 'lastModifiedDate', 'describeRecipeResponse_lastModifiedDate' - The date and time that the recipe was last modified.
+--
+-- 'projectName', 'describeRecipeResponse_projectName' - The name of the project associated with this recipe.
+--
+-- 'publishedBy', 'describeRecipeResponse_publishedBy' - The identifier (user name) of the user who last published the recipe.
+--
+-- 'publishedDate', 'describeRecipeResponse_publishedDate' - The date and time when the recipe was last published.
+--
+-- 'recipeVersion', 'describeRecipeResponse_recipeVersion' - The recipe version identifier.
+--
+-- 'resourceArn', 'describeRecipeResponse_resourceArn' - The ARN of the recipe.
+--
+-- 'steps', 'describeRecipeResponse_steps' - One or more steps to be performed by the recipe. Each step consists of
+-- an action, and the conditions under which the action should succeed.
+--
+-- 'tags', 'describeRecipeResponse_tags' - Metadata tags associated with this project.
+--
+-- 'httpStatus', 'describeRecipeResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeRecipeResponse_name' - The name of the recipe.
+newDescribeRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DescribeRecipeResponse
+newDescribeRecipeResponse pHttpStatus_ pName_ =
+  DescribeRecipeResponse'
+    { createDate =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      projectName = Prelude.Nothing,
+      publishedBy = Prelude.Nothing,
+      publishedDate = Prelude.Nothing,
+      recipeVersion = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      steps = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The date and time that the recipe was created.
+describeRecipeResponse_createDate :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.UTCTime)
+describeRecipeResponse_createDate = Lens.lens (\DescribeRecipeResponse' {createDate} -> createDate) (\s@DescribeRecipeResponse' {} a -> s {createDate = a} :: DescribeRecipeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier (user name) of the user who created the recipe.
+describeRecipeResponse_createdBy :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_createdBy = Lens.lens (\DescribeRecipeResponse' {createdBy} -> createdBy) (\s@DescribeRecipeResponse' {} a -> s {createdBy = a} :: DescribeRecipeResponse)
+
+-- | The description of the recipe.
+describeRecipeResponse_description :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_description = Lens.lens (\DescribeRecipeResponse' {description} -> description) (\s@DescribeRecipeResponse' {} a -> s {description = a} :: DescribeRecipeResponse)
+
+-- | The identifier (user name) of the user who last modified the recipe.
+describeRecipeResponse_lastModifiedBy :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_lastModifiedBy = Lens.lens (\DescribeRecipeResponse' {lastModifiedBy} -> lastModifiedBy) (\s@DescribeRecipeResponse' {} a -> s {lastModifiedBy = a} :: DescribeRecipeResponse)
+
+-- | The date and time that the recipe was last modified.
+describeRecipeResponse_lastModifiedDate :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.UTCTime)
+describeRecipeResponse_lastModifiedDate = Lens.lens (\DescribeRecipeResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeRecipeResponse' {} a -> s {lastModifiedDate = a} :: DescribeRecipeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the project associated with this recipe.
+describeRecipeResponse_projectName :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_projectName = Lens.lens (\DescribeRecipeResponse' {projectName} -> projectName) (\s@DescribeRecipeResponse' {} a -> s {projectName = a} :: DescribeRecipeResponse)
+
+-- | The identifier (user name) of the user who last published the recipe.
+describeRecipeResponse_publishedBy :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_publishedBy = Lens.lens (\DescribeRecipeResponse' {publishedBy} -> publishedBy) (\s@DescribeRecipeResponse' {} a -> s {publishedBy = a} :: DescribeRecipeResponse)
+
+-- | The date and time when the recipe was last published.
+describeRecipeResponse_publishedDate :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.UTCTime)
+describeRecipeResponse_publishedDate = Lens.lens (\DescribeRecipeResponse' {publishedDate} -> publishedDate) (\s@DescribeRecipeResponse' {} a -> s {publishedDate = a} :: DescribeRecipeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The recipe version identifier.
+describeRecipeResponse_recipeVersion :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_recipeVersion = Lens.lens (\DescribeRecipeResponse' {recipeVersion} -> recipeVersion) (\s@DescribeRecipeResponse' {} a -> s {recipeVersion = a} :: DescribeRecipeResponse)
+
+-- | The ARN of the recipe.
+describeRecipeResponse_resourceArn :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe Prelude.Text)
+describeRecipeResponse_resourceArn = Lens.lens (\DescribeRecipeResponse' {resourceArn} -> resourceArn) (\s@DescribeRecipeResponse' {} a -> s {resourceArn = a} :: DescribeRecipeResponse)
+
+-- | One or more steps to be performed by the recipe. Each step consists of
+-- an action, and the conditions under which the action should succeed.
+describeRecipeResponse_steps :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe [RecipeStep])
+describeRecipeResponse_steps = Lens.lens (\DescribeRecipeResponse' {steps} -> steps) (\s@DescribeRecipeResponse' {} a -> s {steps = a} :: DescribeRecipeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata tags associated with this project.
+describeRecipeResponse_tags :: Lens.Lens' DescribeRecipeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeRecipeResponse_tags = Lens.lens (\DescribeRecipeResponse' {tags} -> tags) (\s@DescribeRecipeResponse' {} a -> s {tags = a} :: DescribeRecipeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeRecipeResponse_httpStatus :: Lens.Lens' DescribeRecipeResponse Prelude.Int
+describeRecipeResponse_httpStatus = Lens.lens (\DescribeRecipeResponse' {httpStatus} -> httpStatus) (\s@DescribeRecipeResponse' {} a -> s {httpStatus = a} :: DescribeRecipeResponse)
+
+-- | The name of the recipe.
+describeRecipeResponse_name :: Lens.Lens' DescribeRecipeResponse Prelude.Text
+describeRecipeResponse_name = Lens.lens (\DescribeRecipeResponse' {name} -> name) (\s@DescribeRecipeResponse' {} a -> s {name = a} :: DescribeRecipeResponse)
+
+instance Prelude.NFData DescribeRecipeResponse where
+  rnf DescribeRecipeResponse' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf projectName
+      `Prelude.seq` Prelude.rnf publishedBy
+      `Prelude.seq` Prelude.rnf publishedDate
+      `Prelude.seq` Prelude.rnf recipeVersion
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf steps
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DescribeRuleset.hs b/gen/Amazonka/DataBrew/DescribeRuleset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeRuleset.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeRuleset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves detailed information about the ruleset.
+module Amazonka.DataBrew.DescribeRuleset
+  ( -- * Creating a Request
+    DescribeRuleset (..),
+    newDescribeRuleset,
+
+    -- * Request Lenses
+    describeRuleset_name,
+
+    -- * Destructuring the Response
+    DescribeRulesetResponse (..),
+    newDescribeRulesetResponse,
+
+    -- * Response Lenses
+    describeRulesetResponse_createDate,
+    describeRulesetResponse_createdBy,
+    describeRulesetResponse_description,
+    describeRulesetResponse_lastModifiedBy,
+    describeRulesetResponse_lastModifiedDate,
+    describeRulesetResponse_resourceArn,
+    describeRulesetResponse_rules,
+    describeRulesetResponse_tags,
+    describeRulesetResponse_targetArn,
+    describeRulesetResponse_httpStatus,
+    describeRulesetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRuleset' smart constructor.
+data DescribeRuleset = DescribeRuleset'
+  { -- | The name of the ruleset to be described.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRuleset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeRuleset_name' - The name of the ruleset to be described.
+newDescribeRuleset ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeRuleset
+newDescribeRuleset pName_ =
+  DescribeRuleset' {name = pName_}
+
+-- | The name of the ruleset to be described.
+describeRuleset_name :: Lens.Lens' DescribeRuleset Prelude.Text
+describeRuleset_name = Lens.lens (\DescribeRuleset' {name} -> name) (\s@DescribeRuleset' {} a -> s {name = a} :: DescribeRuleset)
+
+instance Core.AWSRequest DescribeRuleset where
+  type
+    AWSResponse DescribeRuleset =
+      DescribeRulesetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRulesetResponse'
+            Prelude.<$> (x Data..?> "CreateDate")
+            Prelude.<*> (x Data..?> "CreatedBy")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "LastModifiedBy")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Rules")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TargetArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DescribeRuleset where
+  hashWithSalt _salt DescribeRuleset' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeRuleset where
+  rnf DescribeRuleset' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DescribeRuleset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeRuleset where
+  toPath DescribeRuleset' {..} =
+    Prelude.mconcat ["/rulesets/", Data.toBS name]
+
+instance Data.ToQuery DescribeRuleset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeRulesetResponse' smart constructor.
+data DescribeRulesetResponse = DescribeRulesetResponse'
+  { -- | The date and time that the ruleset was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who created the ruleset.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The description of the ruleset.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who last modified the
+    -- ruleset.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The modification date and time of the ruleset.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) for the ruleset.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | A list of rules that are defined with the ruleset. A rule includes one
+    -- or more checks to be validated on a DataBrew dataset.
+    rules :: Prelude.Maybe (Prelude.NonEmpty Rule),
+    -- | Metadata tags that have been applied to the ruleset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+    -- is associated with.
+    targetArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the ruleset.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRulesetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'describeRulesetResponse_createDate' - The date and time that the ruleset was created.
+--
+-- 'createdBy', 'describeRulesetResponse_createdBy' - The Amazon Resource Name (ARN) of the user who created the ruleset.
+--
+-- 'description', 'describeRulesetResponse_description' - The description of the ruleset.
+--
+-- 'lastModifiedBy', 'describeRulesetResponse_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the
+-- ruleset.
+--
+-- 'lastModifiedDate', 'describeRulesetResponse_lastModifiedDate' - The modification date and time of the ruleset.
+--
+-- 'resourceArn', 'describeRulesetResponse_resourceArn' - The Amazon Resource Name (ARN) for the ruleset.
+--
+-- 'rules', 'describeRulesetResponse_rules' - A list of rules that are defined with the ruleset. A rule includes one
+-- or more checks to be validated on a DataBrew dataset.
+--
+-- 'tags', 'describeRulesetResponse_tags' - Metadata tags that have been applied to the ruleset.
+--
+-- 'targetArn', 'describeRulesetResponse_targetArn' - The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+-- is associated with.
+--
+-- 'httpStatus', 'describeRulesetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeRulesetResponse_name' - The name of the ruleset.
+newDescribeRulesetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DescribeRulesetResponse
+newDescribeRulesetResponse pHttpStatus_ pName_ =
+  DescribeRulesetResponse'
+    { createDate =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      rules = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      targetArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The date and time that the ruleset was created.
+describeRulesetResponse_createDate :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.UTCTime)
+describeRulesetResponse_createDate = Lens.lens (\DescribeRulesetResponse' {createDate} -> createDate) (\s@DescribeRulesetResponse' {} a -> s {createDate = a} :: DescribeRulesetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who created the ruleset.
+describeRulesetResponse_createdBy :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.Text)
+describeRulesetResponse_createdBy = Lens.lens (\DescribeRulesetResponse' {createdBy} -> createdBy) (\s@DescribeRulesetResponse' {} a -> s {createdBy = a} :: DescribeRulesetResponse)
+
+-- | The description of the ruleset.
+describeRulesetResponse_description :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.Text)
+describeRulesetResponse_description = Lens.lens (\DescribeRulesetResponse' {description} -> description) (\s@DescribeRulesetResponse' {} a -> s {description = a} :: DescribeRulesetResponse)
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the
+-- ruleset.
+describeRulesetResponse_lastModifiedBy :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.Text)
+describeRulesetResponse_lastModifiedBy = Lens.lens (\DescribeRulesetResponse' {lastModifiedBy} -> lastModifiedBy) (\s@DescribeRulesetResponse' {} a -> s {lastModifiedBy = a} :: DescribeRulesetResponse)
+
+-- | The modification date and time of the ruleset.
+describeRulesetResponse_lastModifiedDate :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.UTCTime)
+describeRulesetResponse_lastModifiedDate = Lens.lens (\DescribeRulesetResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeRulesetResponse' {} a -> s {lastModifiedDate = a} :: DescribeRulesetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) for the ruleset.
+describeRulesetResponse_resourceArn :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.Text)
+describeRulesetResponse_resourceArn = Lens.lens (\DescribeRulesetResponse' {resourceArn} -> resourceArn) (\s@DescribeRulesetResponse' {} a -> s {resourceArn = a} :: DescribeRulesetResponse)
+
+-- | A list of rules that are defined with the ruleset. A rule includes one
+-- or more checks to be validated on a DataBrew dataset.
+describeRulesetResponse_rules :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe (Prelude.NonEmpty Rule))
+describeRulesetResponse_rules = Lens.lens (\DescribeRulesetResponse' {rules} -> rules) (\s@DescribeRulesetResponse' {} a -> s {rules = a} :: DescribeRulesetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata tags that have been applied to the ruleset.
+describeRulesetResponse_tags :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeRulesetResponse_tags = Lens.lens (\DescribeRulesetResponse' {tags} -> tags) (\s@DescribeRulesetResponse' {} a -> s {tags = a} :: DescribeRulesetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+-- is associated with.
+describeRulesetResponse_targetArn :: Lens.Lens' DescribeRulesetResponse (Prelude.Maybe Prelude.Text)
+describeRulesetResponse_targetArn = Lens.lens (\DescribeRulesetResponse' {targetArn} -> targetArn) (\s@DescribeRulesetResponse' {} a -> s {targetArn = a} :: DescribeRulesetResponse)
+
+-- | The response's http status code.
+describeRulesetResponse_httpStatus :: Lens.Lens' DescribeRulesetResponse Prelude.Int
+describeRulesetResponse_httpStatus = Lens.lens (\DescribeRulesetResponse' {httpStatus} -> httpStatus) (\s@DescribeRulesetResponse' {} a -> s {httpStatus = a} :: DescribeRulesetResponse)
+
+-- | The name of the ruleset.
+describeRulesetResponse_name :: Lens.Lens' DescribeRulesetResponse Prelude.Text
+describeRulesetResponse_name = Lens.lens (\DescribeRulesetResponse' {name} -> name) (\s@DescribeRulesetResponse' {} a -> s {name = a} :: DescribeRulesetResponse)
+
+instance Prelude.NFData DescribeRulesetResponse where
+  rnf DescribeRulesetResponse' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf rules
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/DescribeSchedule.hs b/gen/Amazonka/DataBrew/DescribeSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/DescribeSchedule.hs
@@ -0,0 +1,265 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.DescribeSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the definition of a specific DataBrew schedule.
+module Amazonka.DataBrew.DescribeSchedule
+  ( -- * Creating a Request
+    DescribeSchedule (..),
+    newDescribeSchedule,
+
+    -- * Request Lenses
+    describeSchedule_name,
+
+    -- * Destructuring the Response
+    DescribeScheduleResponse (..),
+    newDescribeScheduleResponse,
+
+    -- * Response Lenses
+    describeScheduleResponse_createDate,
+    describeScheduleResponse_createdBy,
+    describeScheduleResponse_cronExpression,
+    describeScheduleResponse_jobNames,
+    describeScheduleResponse_lastModifiedBy,
+    describeScheduleResponse_lastModifiedDate,
+    describeScheduleResponse_resourceArn,
+    describeScheduleResponse_tags,
+    describeScheduleResponse_httpStatus,
+    describeScheduleResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSchedule' smart constructor.
+data DescribeSchedule = DescribeSchedule'
+  { -- | The name of the schedule to be described.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeSchedule_name' - The name of the schedule to be described.
+newDescribeSchedule ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeSchedule
+newDescribeSchedule pName_ =
+  DescribeSchedule' {name = pName_}
+
+-- | The name of the schedule to be described.
+describeSchedule_name :: Lens.Lens' DescribeSchedule Prelude.Text
+describeSchedule_name = Lens.lens (\DescribeSchedule' {name} -> name) (\s@DescribeSchedule' {} a -> s {name = a} :: DescribeSchedule)
+
+instance Core.AWSRequest DescribeSchedule where
+  type
+    AWSResponse DescribeSchedule =
+      DescribeScheduleResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeScheduleResponse'
+            Prelude.<$> (x Data..?> "CreateDate")
+            Prelude.<*> (x Data..?> "CreatedBy")
+            Prelude.<*> (x Data..?> "CronExpression")
+            Prelude.<*> (x Data..?> "JobNames" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "LastModifiedBy")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable DescribeSchedule where
+  hashWithSalt _salt DescribeSchedule' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeSchedule where
+  rnf DescribeSchedule' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DescribeSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeSchedule where
+  toPath DescribeSchedule' {..} =
+    Prelude.mconcat ["/schedules/", Data.toBS name]
+
+instance Data.ToQuery DescribeSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeScheduleResponse' smart constructor.
+data DescribeScheduleResponse = DescribeScheduleResponse'
+  { -- | The date and time that the schedule was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier (user name) of the user who created the schedule.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The date or dates and time or times when the jobs are to be run for the
+    -- schedule. For more information, see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+    -- in the /Glue DataBrew Developer Guide/.
+    cronExpression :: Prelude.Maybe Prelude.Text,
+    -- | The name or names of one or more jobs to be run by using the schedule.
+    jobNames :: Prelude.Maybe [Prelude.Text],
+    -- | The identifier (user name) of the user who last modified the schedule.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the schedule was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the schedule.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | Metadata tags associated with this schedule.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the schedule.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'describeScheduleResponse_createDate' - The date and time that the schedule was created.
+--
+-- 'createdBy', 'describeScheduleResponse_createdBy' - The identifier (user name) of the user who created the schedule.
+--
+-- 'cronExpression', 'describeScheduleResponse_cronExpression' - The date or dates and time or times when the jobs are to be run for the
+-- schedule. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+--
+-- 'jobNames', 'describeScheduleResponse_jobNames' - The name or names of one or more jobs to be run by using the schedule.
+--
+-- 'lastModifiedBy', 'describeScheduleResponse_lastModifiedBy' - The identifier (user name) of the user who last modified the schedule.
+--
+-- 'lastModifiedDate', 'describeScheduleResponse_lastModifiedDate' - The date and time that the schedule was last modified.
+--
+-- 'resourceArn', 'describeScheduleResponse_resourceArn' - The Amazon Resource Name (ARN) of the schedule.
+--
+-- 'tags', 'describeScheduleResponse_tags' - Metadata tags associated with this schedule.
+--
+-- 'httpStatus', 'describeScheduleResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeScheduleResponse_name' - The name of the schedule.
+newDescribeScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DescribeScheduleResponse
+newDescribeScheduleResponse pHttpStatus_ pName_ =
+  DescribeScheduleResponse'
+    { createDate =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      cronExpression = Prelude.Nothing,
+      jobNames = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The date and time that the schedule was created.
+describeScheduleResponse_createDate :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe Prelude.UTCTime)
+describeScheduleResponse_createDate = Lens.lens (\DescribeScheduleResponse' {createDate} -> createDate) (\s@DescribeScheduleResponse' {} a -> s {createDate = a} :: DescribeScheduleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier (user name) of the user who created the schedule.
+describeScheduleResponse_createdBy :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe Prelude.Text)
+describeScheduleResponse_createdBy = Lens.lens (\DescribeScheduleResponse' {createdBy} -> createdBy) (\s@DescribeScheduleResponse' {} a -> s {createdBy = a} :: DescribeScheduleResponse)
+
+-- | The date or dates and time or times when the jobs are to be run for the
+-- schedule. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+describeScheduleResponse_cronExpression :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe Prelude.Text)
+describeScheduleResponse_cronExpression = Lens.lens (\DescribeScheduleResponse' {cronExpression} -> cronExpression) (\s@DescribeScheduleResponse' {} a -> s {cronExpression = a} :: DescribeScheduleResponse)
+
+-- | The name or names of one or more jobs to be run by using the schedule.
+describeScheduleResponse_jobNames :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe [Prelude.Text])
+describeScheduleResponse_jobNames = Lens.lens (\DescribeScheduleResponse' {jobNames} -> jobNames) (\s@DescribeScheduleResponse' {} a -> s {jobNames = a} :: DescribeScheduleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier (user name) of the user who last modified the schedule.
+describeScheduleResponse_lastModifiedBy :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe Prelude.Text)
+describeScheduleResponse_lastModifiedBy = Lens.lens (\DescribeScheduleResponse' {lastModifiedBy} -> lastModifiedBy) (\s@DescribeScheduleResponse' {} a -> s {lastModifiedBy = a} :: DescribeScheduleResponse)
+
+-- | The date and time that the schedule was last modified.
+describeScheduleResponse_lastModifiedDate :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe Prelude.UTCTime)
+describeScheduleResponse_lastModifiedDate = Lens.lens (\DescribeScheduleResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeScheduleResponse' {} a -> s {lastModifiedDate = a} :: DescribeScheduleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the schedule.
+describeScheduleResponse_resourceArn :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe Prelude.Text)
+describeScheduleResponse_resourceArn = Lens.lens (\DescribeScheduleResponse' {resourceArn} -> resourceArn) (\s@DescribeScheduleResponse' {} a -> s {resourceArn = a} :: DescribeScheduleResponse)
+
+-- | Metadata tags associated with this schedule.
+describeScheduleResponse_tags :: Lens.Lens' DescribeScheduleResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeScheduleResponse_tags = Lens.lens (\DescribeScheduleResponse' {tags} -> tags) (\s@DescribeScheduleResponse' {} a -> s {tags = a} :: DescribeScheduleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeScheduleResponse_httpStatus :: Lens.Lens' DescribeScheduleResponse Prelude.Int
+describeScheduleResponse_httpStatus = Lens.lens (\DescribeScheduleResponse' {httpStatus} -> httpStatus) (\s@DescribeScheduleResponse' {} a -> s {httpStatus = a} :: DescribeScheduleResponse)
+
+-- | The name of the schedule.
+describeScheduleResponse_name :: Lens.Lens' DescribeScheduleResponse Prelude.Text
+describeScheduleResponse_name = Lens.lens (\DescribeScheduleResponse' {name} -> name) (\s@DescribeScheduleResponse' {} a -> s {name = a} :: DescribeScheduleResponse)
+
+instance Prelude.NFData DescribeScheduleResponse where
+  rnf DescribeScheduleResponse' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf jobNames
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/Lens.hs b/gen/Amazonka/DataBrew/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Lens.hs
@@ -0,0 +1,850 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Lens
+  ( -- * Operations
+
+    -- ** BatchDeleteRecipeVersion
+    batchDeleteRecipeVersion_name,
+    batchDeleteRecipeVersion_recipeVersions,
+    batchDeleteRecipeVersionResponse_errors,
+    batchDeleteRecipeVersionResponse_httpStatus,
+    batchDeleteRecipeVersionResponse_name,
+
+    -- ** CreateDataset
+    createDataset_format,
+    createDataset_formatOptions,
+    createDataset_pathOptions,
+    createDataset_tags,
+    createDataset_name,
+    createDataset_input,
+    createDatasetResponse_httpStatus,
+    createDatasetResponse_name,
+
+    -- ** CreateProfileJob
+    createProfileJob_configuration,
+    createProfileJob_encryptionKeyArn,
+    createProfileJob_encryptionMode,
+    createProfileJob_jobSample,
+    createProfileJob_logSubscription,
+    createProfileJob_maxCapacity,
+    createProfileJob_maxRetries,
+    createProfileJob_tags,
+    createProfileJob_timeout,
+    createProfileJob_validationConfigurations,
+    createProfileJob_datasetName,
+    createProfileJob_name,
+    createProfileJob_outputLocation,
+    createProfileJob_roleArn,
+    createProfileJobResponse_httpStatus,
+    createProfileJobResponse_name,
+
+    -- ** CreateProject
+    createProject_sample,
+    createProject_tags,
+    createProject_datasetName,
+    createProject_name,
+    createProject_recipeName,
+    createProject_roleArn,
+    createProjectResponse_httpStatus,
+    createProjectResponse_name,
+
+    -- ** CreateRecipe
+    createRecipe_description,
+    createRecipe_tags,
+    createRecipe_name,
+    createRecipe_steps,
+    createRecipeResponse_httpStatus,
+    createRecipeResponse_name,
+
+    -- ** CreateRecipeJob
+    createRecipeJob_dataCatalogOutputs,
+    createRecipeJob_databaseOutputs,
+    createRecipeJob_datasetName,
+    createRecipeJob_encryptionKeyArn,
+    createRecipeJob_encryptionMode,
+    createRecipeJob_logSubscription,
+    createRecipeJob_maxCapacity,
+    createRecipeJob_maxRetries,
+    createRecipeJob_outputs,
+    createRecipeJob_projectName,
+    createRecipeJob_recipeReference,
+    createRecipeJob_tags,
+    createRecipeJob_timeout,
+    createRecipeJob_name,
+    createRecipeJob_roleArn,
+    createRecipeJobResponse_httpStatus,
+    createRecipeJobResponse_name,
+
+    -- ** CreateRuleset
+    createRuleset_description,
+    createRuleset_tags,
+    createRuleset_name,
+    createRuleset_targetArn,
+    createRuleset_rules,
+    createRulesetResponse_httpStatus,
+    createRulesetResponse_name,
+
+    -- ** CreateSchedule
+    createSchedule_jobNames,
+    createSchedule_tags,
+    createSchedule_cronExpression,
+    createSchedule_name,
+    createScheduleResponse_httpStatus,
+    createScheduleResponse_name,
+
+    -- ** DeleteDataset
+    deleteDataset_name,
+    deleteDatasetResponse_httpStatus,
+    deleteDatasetResponse_name,
+
+    -- ** DeleteJob
+    deleteJob_name,
+    deleteJobResponse_httpStatus,
+    deleteJobResponse_name,
+
+    -- ** DeleteProject
+    deleteProject_name,
+    deleteProjectResponse_httpStatus,
+    deleteProjectResponse_name,
+
+    -- ** DeleteRecipeVersion
+    deleteRecipeVersion_name,
+    deleteRecipeVersion_recipeVersion,
+    deleteRecipeVersionResponse_httpStatus,
+    deleteRecipeVersionResponse_name,
+    deleteRecipeVersionResponse_recipeVersion,
+
+    -- ** DeleteRuleset
+    deleteRuleset_name,
+    deleteRulesetResponse_httpStatus,
+    deleteRulesetResponse_name,
+
+    -- ** DeleteSchedule
+    deleteSchedule_name,
+    deleteScheduleResponse_httpStatus,
+    deleteScheduleResponse_name,
+
+    -- ** DescribeDataset
+    describeDataset_name,
+    describeDatasetResponse_createDate,
+    describeDatasetResponse_createdBy,
+    describeDatasetResponse_format,
+    describeDatasetResponse_formatOptions,
+    describeDatasetResponse_lastModifiedBy,
+    describeDatasetResponse_lastModifiedDate,
+    describeDatasetResponse_pathOptions,
+    describeDatasetResponse_resourceArn,
+    describeDatasetResponse_source,
+    describeDatasetResponse_tags,
+    describeDatasetResponse_httpStatus,
+    describeDatasetResponse_name,
+    describeDatasetResponse_input,
+
+    -- ** DescribeJob
+    describeJob_name,
+    describeJobResponse_createDate,
+    describeJobResponse_createdBy,
+    describeJobResponse_dataCatalogOutputs,
+    describeJobResponse_databaseOutputs,
+    describeJobResponse_datasetName,
+    describeJobResponse_encryptionKeyArn,
+    describeJobResponse_encryptionMode,
+    describeJobResponse_jobSample,
+    describeJobResponse_lastModifiedBy,
+    describeJobResponse_lastModifiedDate,
+    describeJobResponse_logSubscription,
+    describeJobResponse_maxCapacity,
+    describeJobResponse_maxRetries,
+    describeJobResponse_outputs,
+    describeJobResponse_profileConfiguration,
+    describeJobResponse_projectName,
+    describeJobResponse_recipeReference,
+    describeJobResponse_resourceArn,
+    describeJobResponse_roleArn,
+    describeJobResponse_tags,
+    describeJobResponse_timeout,
+    describeJobResponse_type,
+    describeJobResponse_validationConfigurations,
+    describeJobResponse_httpStatus,
+    describeJobResponse_name,
+
+    -- ** DescribeJobRun
+    describeJobRun_name,
+    describeJobRun_runId,
+    describeJobRunResponse_attempt,
+    describeJobRunResponse_completedOn,
+    describeJobRunResponse_dataCatalogOutputs,
+    describeJobRunResponse_databaseOutputs,
+    describeJobRunResponse_datasetName,
+    describeJobRunResponse_errorMessage,
+    describeJobRunResponse_executionTime,
+    describeJobRunResponse_jobSample,
+    describeJobRunResponse_logGroupName,
+    describeJobRunResponse_logSubscription,
+    describeJobRunResponse_outputs,
+    describeJobRunResponse_profileConfiguration,
+    describeJobRunResponse_recipeReference,
+    describeJobRunResponse_runId,
+    describeJobRunResponse_startedBy,
+    describeJobRunResponse_startedOn,
+    describeJobRunResponse_state,
+    describeJobRunResponse_validationConfigurations,
+    describeJobRunResponse_httpStatus,
+    describeJobRunResponse_jobName,
+
+    -- ** DescribeProject
+    describeProject_name,
+    describeProjectResponse_createDate,
+    describeProjectResponse_createdBy,
+    describeProjectResponse_datasetName,
+    describeProjectResponse_lastModifiedBy,
+    describeProjectResponse_lastModifiedDate,
+    describeProjectResponse_openDate,
+    describeProjectResponse_openedBy,
+    describeProjectResponse_recipeName,
+    describeProjectResponse_resourceArn,
+    describeProjectResponse_roleArn,
+    describeProjectResponse_sample,
+    describeProjectResponse_sessionStatus,
+    describeProjectResponse_tags,
+    describeProjectResponse_httpStatus,
+    describeProjectResponse_name,
+
+    -- ** DescribeRecipe
+    describeRecipe_recipeVersion,
+    describeRecipe_name,
+    describeRecipeResponse_createDate,
+    describeRecipeResponse_createdBy,
+    describeRecipeResponse_description,
+    describeRecipeResponse_lastModifiedBy,
+    describeRecipeResponse_lastModifiedDate,
+    describeRecipeResponse_projectName,
+    describeRecipeResponse_publishedBy,
+    describeRecipeResponse_publishedDate,
+    describeRecipeResponse_recipeVersion,
+    describeRecipeResponse_resourceArn,
+    describeRecipeResponse_steps,
+    describeRecipeResponse_tags,
+    describeRecipeResponse_httpStatus,
+    describeRecipeResponse_name,
+
+    -- ** DescribeRuleset
+    describeRuleset_name,
+    describeRulesetResponse_createDate,
+    describeRulesetResponse_createdBy,
+    describeRulesetResponse_description,
+    describeRulesetResponse_lastModifiedBy,
+    describeRulesetResponse_lastModifiedDate,
+    describeRulesetResponse_resourceArn,
+    describeRulesetResponse_rules,
+    describeRulesetResponse_tags,
+    describeRulesetResponse_targetArn,
+    describeRulesetResponse_httpStatus,
+    describeRulesetResponse_name,
+
+    -- ** DescribeSchedule
+    describeSchedule_name,
+    describeScheduleResponse_createDate,
+    describeScheduleResponse_createdBy,
+    describeScheduleResponse_cronExpression,
+    describeScheduleResponse_jobNames,
+    describeScheduleResponse_lastModifiedBy,
+    describeScheduleResponse_lastModifiedDate,
+    describeScheduleResponse_resourceArn,
+    describeScheduleResponse_tags,
+    describeScheduleResponse_httpStatus,
+    describeScheduleResponse_name,
+
+    -- ** ListDatasets
+    listDatasets_maxResults,
+    listDatasets_nextToken,
+    listDatasetsResponse_nextToken,
+    listDatasetsResponse_httpStatus,
+    listDatasetsResponse_datasets,
+
+    -- ** ListJobRuns
+    listJobRuns_maxResults,
+    listJobRuns_nextToken,
+    listJobRuns_name,
+    listJobRunsResponse_nextToken,
+    listJobRunsResponse_httpStatus,
+    listJobRunsResponse_jobRuns,
+
+    -- ** ListJobs
+    listJobs_datasetName,
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobs_projectName,
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+    listJobsResponse_jobs,
+
+    -- ** ListProjects
+    listProjects_maxResults,
+    listProjects_nextToken,
+    listProjectsResponse_nextToken,
+    listProjectsResponse_httpStatus,
+    listProjectsResponse_projects,
+
+    -- ** ListRecipeVersions
+    listRecipeVersions_maxResults,
+    listRecipeVersions_nextToken,
+    listRecipeVersions_name,
+    listRecipeVersionsResponse_nextToken,
+    listRecipeVersionsResponse_httpStatus,
+    listRecipeVersionsResponse_recipes,
+
+    -- ** ListRecipes
+    listRecipes_maxResults,
+    listRecipes_nextToken,
+    listRecipes_recipeVersion,
+    listRecipesResponse_nextToken,
+    listRecipesResponse_httpStatus,
+    listRecipesResponse_recipes,
+
+    -- ** ListRulesets
+    listRulesets_maxResults,
+    listRulesets_nextToken,
+    listRulesets_targetArn,
+    listRulesetsResponse_nextToken,
+    listRulesetsResponse_httpStatus,
+    listRulesetsResponse_rulesets,
+
+    -- ** ListSchedules
+    listSchedules_jobName,
+    listSchedules_maxResults,
+    listSchedules_nextToken,
+    listSchedulesResponse_nextToken,
+    listSchedulesResponse_httpStatus,
+    listSchedulesResponse_schedules,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PublishRecipe
+    publishRecipe_description,
+    publishRecipe_name,
+    publishRecipeResponse_httpStatus,
+    publishRecipeResponse_name,
+
+    -- ** SendProjectSessionAction
+    sendProjectSessionAction_clientSessionId,
+    sendProjectSessionAction_preview,
+    sendProjectSessionAction_recipeStep,
+    sendProjectSessionAction_stepIndex,
+    sendProjectSessionAction_viewFrame,
+    sendProjectSessionAction_name,
+    sendProjectSessionActionResponse_actionId,
+    sendProjectSessionActionResponse_result,
+    sendProjectSessionActionResponse_httpStatus,
+    sendProjectSessionActionResponse_name,
+
+    -- ** StartJobRun
+    startJobRun_name,
+    startJobRunResponse_httpStatus,
+    startJobRunResponse_runId,
+
+    -- ** StartProjectSession
+    startProjectSession_assumeControl,
+    startProjectSession_name,
+    startProjectSessionResponse_clientSessionId,
+    startProjectSessionResponse_httpStatus,
+    startProjectSessionResponse_name,
+
+    -- ** StopJobRun
+    stopJobRun_name,
+    stopJobRun_runId,
+    stopJobRunResponse_httpStatus,
+    stopJobRunResponse_runId,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDataset
+    updateDataset_format,
+    updateDataset_formatOptions,
+    updateDataset_pathOptions,
+    updateDataset_name,
+    updateDataset_input,
+    updateDatasetResponse_httpStatus,
+    updateDatasetResponse_name,
+
+    -- ** UpdateProfileJob
+    updateProfileJob_configuration,
+    updateProfileJob_encryptionKeyArn,
+    updateProfileJob_encryptionMode,
+    updateProfileJob_jobSample,
+    updateProfileJob_logSubscription,
+    updateProfileJob_maxCapacity,
+    updateProfileJob_maxRetries,
+    updateProfileJob_timeout,
+    updateProfileJob_validationConfigurations,
+    updateProfileJob_name,
+    updateProfileJob_outputLocation,
+    updateProfileJob_roleArn,
+    updateProfileJobResponse_httpStatus,
+    updateProfileJobResponse_name,
+
+    -- ** UpdateProject
+    updateProject_sample,
+    updateProject_roleArn,
+    updateProject_name,
+    updateProjectResponse_lastModifiedDate,
+    updateProjectResponse_httpStatus,
+    updateProjectResponse_name,
+
+    -- ** UpdateRecipe
+    updateRecipe_description,
+    updateRecipe_steps,
+    updateRecipe_name,
+    updateRecipeResponse_httpStatus,
+    updateRecipeResponse_name,
+
+    -- ** UpdateRecipeJob
+    updateRecipeJob_dataCatalogOutputs,
+    updateRecipeJob_databaseOutputs,
+    updateRecipeJob_encryptionKeyArn,
+    updateRecipeJob_encryptionMode,
+    updateRecipeJob_logSubscription,
+    updateRecipeJob_maxCapacity,
+    updateRecipeJob_maxRetries,
+    updateRecipeJob_outputs,
+    updateRecipeJob_timeout,
+    updateRecipeJob_name,
+    updateRecipeJob_roleArn,
+    updateRecipeJobResponse_httpStatus,
+    updateRecipeJobResponse_name,
+
+    -- ** UpdateRuleset
+    updateRuleset_description,
+    updateRuleset_name,
+    updateRuleset_rules,
+    updateRulesetResponse_httpStatus,
+    updateRulesetResponse_name,
+
+    -- ** UpdateSchedule
+    updateSchedule_jobNames,
+    updateSchedule_cronExpression,
+    updateSchedule_name,
+    updateScheduleResponse_httpStatus,
+    updateScheduleResponse_name,
+
+    -- * Types
+
+    -- ** AllowedStatistics
+    allowedStatistics_statistics,
+
+    -- ** ColumnSelector
+    columnSelector_name,
+    columnSelector_regex,
+
+    -- ** ColumnStatisticsConfiguration
+    columnStatisticsConfiguration_selectors,
+    columnStatisticsConfiguration_statistics,
+
+    -- ** ConditionExpression
+    conditionExpression_value,
+    conditionExpression_condition,
+    conditionExpression_targetColumn,
+
+    -- ** CsvOptions
+    csvOptions_delimiter,
+    csvOptions_headerRow,
+
+    -- ** CsvOutputOptions
+    csvOutputOptions_delimiter,
+
+    -- ** DataCatalogInputDefinition
+    dataCatalogInputDefinition_catalogId,
+    dataCatalogInputDefinition_tempDirectory,
+    dataCatalogInputDefinition_databaseName,
+    dataCatalogInputDefinition_tableName,
+
+    -- ** DataCatalogOutput
+    dataCatalogOutput_catalogId,
+    dataCatalogOutput_databaseOptions,
+    dataCatalogOutput_overwrite,
+    dataCatalogOutput_s3Options,
+    dataCatalogOutput_databaseName,
+    dataCatalogOutput_tableName,
+
+    -- ** DatabaseInputDefinition
+    databaseInputDefinition_databaseTableName,
+    databaseInputDefinition_queryString,
+    databaseInputDefinition_tempDirectory,
+    databaseInputDefinition_glueConnectionName,
+
+    -- ** DatabaseOutput
+    databaseOutput_databaseOutputMode,
+    databaseOutput_glueConnectionName,
+    databaseOutput_databaseOptions,
+
+    -- ** DatabaseTableOutputOptions
+    databaseTableOutputOptions_tempDirectory,
+    databaseTableOutputOptions_tableName,
+
+    -- ** Dataset
+    dataset_accountId,
+    dataset_createDate,
+    dataset_createdBy,
+    dataset_format,
+    dataset_formatOptions,
+    dataset_lastModifiedBy,
+    dataset_lastModifiedDate,
+    dataset_pathOptions,
+    dataset_resourceArn,
+    dataset_source,
+    dataset_tags,
+    dataset_name,
+    dataset_input,
+
+    -- ** DatasetParameter
+    datasetParameter_createColumn,
+    datasetParameter_datetimeOptions,
+    datasetParameter_filter,
+    datasetParameter_name,
+    datasetParameter_type,
+
+    -- ** DatetimeOptions
+    datetimeOptions_localeCode,
+    datetimeOptions_timezoneOffset,
+    datetimeOptions_format,
+
+    -- ** EntityDetectorConfiguration
+    entityDetectorConfiguration_allowedStatistics,
+    entityDetectorConfiguration_entityTypes,
+
+    -- ** ExcelOptions
+    excelOptions_headerRow,
+    excelOptions_sheetIndexes,
+    excelOptions_sheetNames,
+
+    -- ** FilesLimit
+    filesLimit_order,
+    filesLimit_orderedBy,
+    filesLimit_maxFiles,
+
+    -- ** FilterExpression
+    filterExpression_expression,
+    filterExpression_valuesMap,
+
+    -- ** FormatOptions
+    formatOptions_csv,
+    formatOptions_excel,
+    formatOptions_json,
+
+    -- ** Input
+    input_dataCatalogInputDefinition,
+    input_databaseInputDefinition,
+    input_metadata,
+    input_s3InputDefinition,
+
+    -- ** Job
+    job_accountId,
+    job_createDate,
+    job_createdBy,
+    job_dataCatalogOutputs,
+    job_databaseOutputs,
+    job_datasetName,
+    job_encryptionKeyArn,
+    job_encryptionMode,
+    job_jobSample,
+    job_lastModifiedBy,
+    job_lastModifiedDate,
+    job_logSubscription,
+    job_maxCapacity,
+    job_maxRetries,
+    job_outputs,
+    job_projectName,
+    job_recipeReference,
+    job_resourceArn,
+    job_roleArn,
+    job_tags,
+    job_timeout,
+    job_type,
+    job_validationConfigurations,
+    job_name,
+
+    -- ** JobRun
+    jobRun_attempt,
+    jobRun_completedOn,
+    jobRun_dataCatalogOutputs,
+    jobRun_databaseOutputs,
+    jobRun_datasetName,
+    jobRun_errorMessage,
+    jobRun_executionTime,
+    jobRun_jobName,
+    jobRun_jobSample,
+    jobRun_logGroupName,
+    jobRun_logSubscription,
+    jobRun_outputs,
+    jobRun_recipeReference,
+    jobRun_runId,
+    jobRun_startedBy,
+    jobRun_startedOn,
+    jobRun_state,
+    jobRun_validationConfigurations,
+
+    -- ** JobSample
+    jobSample_mode,
+    jobSample_size,
+
+    -- ** JsonOptions
+    jsonOptions_multiLine,
+
+    -- ** Metadata
+    metadata_sourceArn,
+
+    -- ** Output
+    output_compressionFormat,
+    output_format,
+    output_formatOptions,
+    output_maxOutputFiles,
+    output_overwrite,
+    output_partitionColumns,
+    output_location,
+
+    -- ** OutputFormatOptions
+    outputFormatOptions_csv,
+
+    -- ** PathOptions
+    pathOptions_filesLimit,
+    pathOptions_lastModifiedDateCondition,
+    pathOptions_parameters,
+
+    -- ** ProfileConfiguration
+    profileConfiguration_columnStatisticsConfigurations,
+    profileConfiguration_datasetStatisticsConfiguration,
+    profileConfiguration_entityDetectorConfiguration,
+    profileConfiguration_profileColumns,
+
+    -- ** Project
+    project_accountId,
+    project_createDate,
+    project_createdBy,
+    project_datasetName,
+    project_lastModifiedBy,
+    project_lastModifiedDate,
+    project_openDate,
+    project_openedBy,
+    project_resourceArn,
+    project_roleArn,
+    project_sample,
+    project_tags,
+    project_name,
+    project_recipeName,
+
+    -- ** Recipe
+    recipe_createDate,
+    recipe_createdBy,
+    recipe_description,
+    recipe_lastModifiedBy,
+    recipe_lastModifiedDate,
+    recipe_projectName,
+    recipe_publishedBy,
+    recipe_publishedDate,
+    recipe_recipeVersion,
+    recipe_resourceArn,
+    recipe_steps,
+    recipe_tags,
+    recipe_name,
+
+    -- ** RecipeAction
+    recipeAction_parameters,
+    recipeAction_operation,
+
+    -- ** RecipeReference
+    recipeReference_recipeVersion,
+    recipeReference_name,
+
+    -- ** RecipeStep
+    recipeStep_conditionExpressions,
+    recipeStep_action,
+
+    -- ** RecipeVersionErrorDetail
+    recipeVersionErrorDetail_errorCode,
+    recipeVersionErrorDetail_errorMessage,
+    recipeVersionErrorDetail_recipeVersion,
+
+    -- ** Rule
+    rule_columnSelectors,
+    rule_disabled,
+    rule_substitutionMap,
+    rule_threshold,
+    rule_name,
+    rule_checkExpression,
+
+    -- ** RulesetItem
+    rulesetItem_accountId,
+    rulesetItem_createDate,
+    rulesetItem_createdBy,
+    rulesetItem_description,
+    rulesetItem_lastModifiedBy,
+    rulesetItem_lastModifiedDate,
+    rulesetItem_resourceArn,
+    rulesetItem_ruleCount,
+    rulesetItem_tags,
+    rulesetItem_name,
+    rulesetItem_targetArn,
+
+    -- ** S3Location
+    s3Location_bucketOwner,
+    s3Location_key,
+    s3Location_bucket,
+
+    -- ** S3TableOutputOptions
+    s3TableOutputOptions_location,
+
+    -- ** Sample
+    sample_size,
+    sample_type,
+
+    -- ** Schedule
+    schedule_accountId,
+    schedule_createDate,
+    schedule_createdBy,
+    schedule_cronExpression,
+    schedule_jobNames,
+    schedule_lastModifiedBy,
+    schedule_lastModifiedDate,
+    schedule_resourceArn,
+    schedule_tags,
+    schedule_name,
+
+    -- ** StatisticOverride
+    statisticOverride_statistic,
+    statisticOverride_parameters,
+
+    -- ** StatisticsConfiguration
+    statisticsConfiguration_includedStatistics,
+    statisticsConfiguration_overrides,
+
+    -- ** Threshold
+    threshold_type,
+    threshold_unit,
+    threshold_value,
+
+    -- ** ValidationConfiguration
+    validationConfiguration_validationMode,
+    validationConfiguration_rulesetArn,
+
+    -- ** ViewFrame
+    viewFrame_analytics,
+    viewFrame_columnRange,
+    viewFrame_hiddenColumns,
+    viewFrame_rowRange,
+    viewFrame_startRowIndex,
+    viewFrame_startColumnIndex,
+  )
+where
+
+import Amazonka.DataBrew.BatchDeleteRecipeVersion
+import Amazonka.DataBrew.CreateDataset
+import Amazonka.DataBrew.CreateProfileJob
+import Amazonka.DataBrew.CreateProject
+import Amazonka.DataBrew.CreateRecipe
+import Amazonka.DataBrew.CreateRecipeJob
+import Amazonka.DataBrew.CreateRuleset
+import Amazonka.DataBrew.CreateSchedule
+import Amazonka.DataBrew.DeleteDataset
+import Amazonka.DataBrew.DeleteJob
+import Amazonka.DataBrew.DeleteProject
+import Amazonka.DataBrew.DeleteRecipeVersion
+import Amazonka.DataBrew.DeleteRuleset
+import Amazonka.DataBrew.DeleteSchedule
+import Amazonka.DataBrew.DescribeDataset
+import Amazonka.DataBrew.DescribeJob
+import Amazonka.DataBrew.DescribeJobRun
+import Amazonka.DataBrew.DescribeProject
+import Amazonka.DataBrew.DescribeRecipe
+import Amazonka.DataBrew.DescribeRuleset
+import Amazonka.DataBrew.DescribeSchedule
+import Amazonka.DataBrew.ListDatasets
+import Amazonka.DataBrew.ListJobRuns
+import Amazonka.DataBrew.ListJobs
+import Amazonka.DataBrew.ListProjects
+import Amazonka.DataBrew.ListRecipeVersions
+import Amazonka.DataBrew.ListRecipes
+import Amazonka.DataBrew.ListRulesets
+import Amazonka.DataBrew.ListSchedules
+import Amazonka.DataBrew.ListTagsForResource
+import Amazonka.DataBrew.PublishRecipe
+import Amazonka.DataBrew.SendProjectSessionAction
+import Amazonka.DataBrew.StartJobRun
+import Amazonka.DataBrew.StartProjectSession
+import Amazonka.DataBrew.StopJobRun
+import Amazonka.DataBrew.TagResource
+import Amazonka.DataBrew.Types.AllowedStatistics
+import Amazonka.DataBrew.Types.ColumnSelector
+import Amazonka.DataBrew.Types.ColumnStatisticsConfiguration
+import Amazonka.DataBrew.Types.ConditionExpression
+import Amazonka.DataBrew.Types.CsvOptions
+import Amazonka.DataBrew.Types.CsvOutputOptions
+import Amazonka.DataBrew.Types.DataCatalogInputDefinition
+import Amazonka.DataBrew.Types.DataCatalogOutput
+import Amazonka.DataBrew.Types.DatabaseInputDefinition
+import Amazonka.DataBrew.Types.DatabaseOutput
+import Amazonka.DataBrew.Types.DatabaseTableOutputOptions
+import Amazonka.DataBrew.Types.Dataset
+import Amazonka.DataBrew.Types.DatasetParameter
+import Amazonka.DataBrew.Types.DatetimeOptions
+import Amazonka.DataBrew.Types.EntityDetectorConfiguration
+import Amazonka.DataBrew.Types.ExcelOptions
+import Amazonka.DataBrew.Types.FilesLimit
+import Amazonka.DataBrew.Types.FilterExpression
+import Amazonka.DataBrew.Types.FormatOptions
+import Amazonka.DataBrew.Types.Input
+import Amazonka.DataBrew.Types.Job
+import Amazonka.DataBrew.Types.JobRun
+import Amazonka.DataBrew.Types.JobSample
+import Amazonka.DataBrew.Types.JsonOptions
+import Amazonka.DataBrew.Types.Metadata
+import Amazonka.DataBrew.Types.Output
+import Amazonka.DataBrew.Types.OutputFormatOptions
+import Amazonka.DataBrew.Types.PathOptions
+import Amazonka.DataBrew.Types.ProfileConfiguration
+import Amazonka.DataBrew.Types.Project
+import Amazonka.DataBrew.Types.Recipe
+import Amazonka.DataBrew.Types.RecipeAction
+import Amazonka.DataBrew.Types.RecipeReference
+import Amazonka.DataBrew.Types.RecipeStep
+import Amazonka.DataBrew.Types.RecipeVersionErrorDetail
+import Amazonka.DataBrew.Types.Rule
+import Amazonka.DataBrew.Types.RulesetItem
+import Amazonka.DataBrew.Types.S3Location
+import Amazonka.DataBrew.Types.S3TableOutputOptions
+import Amazonka.DataBrew.Types.Sample
+import Amazonka.DataBrew.Types.Schedule
+import Amazonka.DataBrew.Types.StatisticOverride
+import Amazonka.DataBrew.Types.StatisticsConfiguration
+import Amazonka.DataBrew.Types.Threshold
+import Amazonka.DataBrew.Types.ValidationConfiguration
+import Amazonka.DataBrew.Types.ViewFrame
+import Amazonka.DataBrew.UntagResource
+import Amazonka.DataBrew.UpdateDataset
+import Amazonka.DataBrew.UpdateProfileJob
+import Amazonka.DataBrew.UpdateProject
+import Amazonka.DataBrew.UpdateRecipe
+import Amazonka.DataBrew.UpdateRecipeJob
+import Amazonka.DataBrew.UpdateRuleset
+import Amazonka.DataBrew.UpdateSchedule
diff --git a/gen/Amazonka/DataBrew/ListDatasets.hs b/gen/Amazonka/DataBrew/ListDatasets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListDatasets.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListDatasets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the DataBrew datasets.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListDatasets
+  ( -- * Creating a Request
+    ListDatasets (..),
+    newListDatasets,
+
+    -- * Request Lenses
+    listDatasets_maxResults,
+    listDatasets_nextToken,
+
+    -- * Destructuring the Response
+    ListDatasetsResponse (..),
+    newListDatasetsResponse,
+
+    -- * Response Lenses
+    listDatasetsResponse_nextToken,
+    listDatasetsResponse_httpStatus,
+    listDatasetsResponse_datasets,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDatasets' smart constructor.
+data ListDatasets = ListDatasets'
+  { -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a previous call to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listDatasets_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listDatasets_nextToken' - The token returned by a previous call to retrieve the next set of
+-- results.
+newListDatasets ::
+  ListDatasets
+newListDatasets =
+  ListDatasets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this request.
+listDatasets_maxResults :: Lens.Lens' ListDatasets (Prelude.Maybe Prelude.Natural)
+listDatasets_maxResults = Lens.lens (\ListDatasets' {maxResults} -> maxResults) (\s@ListDatasets' {} a -> s {maxResults = a} :: ListDatasets)
+
+-- | The token returned by a previous call to retrieve the next set of
+-- results.
+listDatasets_nextToken :: Lens.Lens' ListDatasets (Prelude.Maybe Prelude.Text)
+listDatasets_nextToken = Lens.lens (\ListDatasets' {nextToken} -> nextToken) (\s@ListDatasets' {} a -> s {nextToken = a} :: ListDatasets)
+
+instance Core.AWSPager ListDatasets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listDatasetsResponse_datasets) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDatasets_nextToken
+          Lens..~ rs
+          Lens.^? listDatasetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDatasets where
+  type AWSResponse ListDatasets = ListDatasetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDatasetsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Datasets" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListDatasets where
+  hashWithSalt _salt ListDatasets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDatasets where
+  rnf ListDatasets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDatasets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDatasets where
+  toPath = Prelude.const "/datasets"
+
+instance Data.ToQuery ListDatasets where
+  toQuery ListDatasets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDatasetsResponse' smart constructor.
+data ListDatasetsResponse = ListDatasetsResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of datasets that are defined.
+    datasets :: [Dataset]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listDatasetsResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listDatasetsResponse_httpStatus' - The response's http status code.
+--
+-- 'datasets', 'listDatasetsResponse_datasets' - A list of datasets that are defined.
+newListDatasetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDatasetsResponse
+newListDatasetsResponse pHttpStatus_ =
+  ListDatasetsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      datasets = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listDatasetsResponse_nextToken :: Lens.Lens' ListDatasetsResponse (Prelude.Maybe Prelude.Text)
+listDatasetsResponse_nextToken = Lens.lens (\ListDatasetsResponse' {nextToken} -> nextToken) (\s@ListDatasetsResponse' {} a -> s {nextToken = a} :: ListDatasetsResponse)
+
+-- | The response's http status code.
+listDatasetsResponse_httpStatus :: Lens.Lens' ListDatasetsResponse Prelude.Int
+listDatasetsResponse_httpStatus = Lens.lens (\ListDatasetsResponse' {httpStatus} -> httpStatus) (\s@ListDatasetsResponse' {} a -> s {httpStatus = a} :: ListDatasetsResponse)
+
+-- | A list of datasets that are defined.
+listDatasetsResponse_datasets :: Lens.Lens' ListDatasetsResponse [Dataset]
+listDatasetsResponse_datasets = Lens.lens (\ListDatasetsResponse' {datasets} -> datasets) (\s@ListDatasetsResponse' {} a -> s {datasets = a} :: ListDatasetsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListDatasetsResponse where
+  rnf ListDatasetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf datasets
diff --git a/gen/Amazonka/DataBrew/ListJobRuns.hs b/gen/Amazonka/DataBrew/ListJobRuns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListJobRuns.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListJobRuns
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the previous runs of a particular DataBrew job.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListJobRuns
+  ( -- * Creating a Request
+    ListJobRuns (..),
+    newListJobRuns,
+
+    -- * Request Lenses
+    listJobRuns_maxResults,
+    listJobRuns_nextToken,
+    listJobRuns_name,
+
+    -- * Destructuring the Response
+    ListJobRunsResponse (..),
+    newListJobRunsResponse,
+
+    -- * Response Lenses
+    listJobRunsResponse_nextToken,
+    listJobRunsResponse_httpStatus,
+    listJobRunsResponse_jobRuns,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListJobRuns' smart constructor.
+data ListJobRuns = ListJobRuns'
+  { -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a previous call to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the job.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobRuns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listJobRuns_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listJobRuns_nextToken' - The token returned by a previous call to retrieve the next set of
+-- results.
+--
+-- 'name', 'listJobRuns_name' - The name of the job.
+newListJobRuns ::
+  -- | 'name'
+  Prelude.Text ->
+  ListJobRuns
+newListJobRuns pName_ =
+  ListJobRuns'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of results to return in this request.
+listJobRuns_maxResults :: Lens.Lens' ListJobRuns (Prelude.Maybe Prelude.Natural)
+listJobRuns_maxResults = Lens.lens (\ListJobRuns' {maxResults} -> maxResults) (\s@ListJobRuns' {} a -> s {maxResults = a} :: ListJobRuns)
+
+-- | The token returned by a previous call to retrieve the next set of
+-- results.
+listJobRuns_nextToken :: Lens.Lens' ListJobRuns (Prelude.Maybe Prelude.Text)
+listJobRuns_nextToken = Lens.lens (\ListJobRuns' {nextToken} -> nextToken) (\s@ListJobRuns' {} a -> s {nextToken = a} :: ListJobRuns)
+
+-- | The name of the job.
+listJobRuns_name :: Lens.Lens' ListJobRuns Prelude.Text
+listJobRuns_name = Lens.lens (\ListJobRuns' {name} -> name) (\s@ListJobRuns' {} a -> s {name = a} :: ListJobRuns)
+
+instance Core.AWSPager ListJobRuns where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listJobRunsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listJobRunsResponse_jobRuns) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listJobRuns_nextToken
+          Lens..~ rs
+          Lens.^? listJobRunsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListJobRuns where
+  type AWSResponse ListJobRuns = ListJobRunsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListJobRunsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "JobRuns" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListJobRuns where
+  hashWithSalt _salt ListJobRuns' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListJobRuns where
+  rnf ListJobRuns' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ListJobRuns where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListJobRuns where
+  toPath ListJobRuns' {..} =
+    Prelude.mconcat
+      ["/jobs/", Data.toBS name, "/jobRuns"]
+
+instance Data.ToQuery ListJobRuns where
+  toQuery ListJobRuns' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListJobRunsResponse' smart constructor.
+data ListJobRunsResponse = ListJobRunsResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of job runs that have occurred for the specified job.
+    jobRuns :: [JobRun]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobRunsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listJobRunsResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listJobRunsResponse_httpStatus' - The response's http status code.
+--
+-- 'jobRuns', 'listJobRunsResponse_jobRuns' - A list of job runs that have occurred for the specified job.
+newListJobRunsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListJobRunsResponse
+newListJobRunsResponse pHttpStatus_ =
+  ListJobRunsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      jobRuns = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listJobRunsResponse_nextToken :: Lens.Lens' ListJobRunsResponse (Prelude.Maybe Prelude.Text)
+listJobRunsResponse_nextToken = Lens.lens (\ListJobRunsResponse' {nextToken} -> nextToken) (\s@ListJobRunsResponse' {} a -> s {nextToken = a} :: ListJobRunsResponse)
+
+-- | The response's http status code.
+listJobRunsResponse_httpStatus :: Lens.Lens' ListJobRunsResponse Prelude.Int
+listJobRunsResponse_httpStatus = Lens.lens (\ListJobRunsResponse' {httpStatus} -> httpStatus) (\s@ListJobRunsResponse' {} a -> s {httpStatus = a} :: ListJobRunsResponse)
+
+-- | A list of job runs that have occurred for the specified job.
+listJobRunsResponse_jobRuns :: Lens.Lens' ListJobRunsResponse [JobRun]
+listJobRunsResponse_jobRuns = Lens.lens (\ListJobRunsResponse' {jobRuns} -> jobRuns) (\s@ListJobRunsResponse' {} a -> s {jobRuns = a} :: ListJobRunsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListJobRunsResponse where
+  rnf ListJobRunsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobRuns
diff --git a/gen/Amazonka/DataBrew/ListJobs.hs b/gen/Amazonka/DataBrew/ListJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListJobs.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the DataBrew jobs that are defined.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListJobs
+  ( -- * Creating a Request
+    ListJobs (..),
+    newListJobs,
+
+    -- * Request Lenses
+    listJobs_datasetName,
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobs_projectName,
+
+    -- * Destructuring the Response
+    ListJobsResponse (..),
+    newListJobsResponse,
+
+    -- * Response Lenses
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+    listJobsResponse_jobs,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListJobs' smart constructor.
+data ListJobs = ListJobs'
+  { -- | The name of a dataset. Using this parameter indicates to return only
+    -- those jobs that act on the specified dataset.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token generated by DataBrew that specifies where to continue
+    -- pagination if a previous request was truncated. To get the next set of
+    -- pages, pass in the NextToken value from the response object of the
+    -- previous page call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of a project. Using this parameter indicates to return only
+    -- those jobs that are associated with the specified project.
+    projectName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetName', 'listJobs_datasetName' - The name of a dataset. Using this parameter indicates to return only
+-- those jobs that act on the specified dataset.
+--
+-- 'maxResults', 'listJobs_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listJobs_nextToken' - A token generated by DataBrew that specifies where to continue
+-- pagination if a previous request was truncated. To get the next set of
+-- pages, pass in the NextToken value from the response object of the
+-- previous page call.
+--
+-- 'projectName', 'listJobs_projectName' - The name of a project. Using this parameter indicates to return only
+-- those jobs that are associated with the specified project.
+newListJobs ::
+  ListJobs
+newListJobs =
+  ListJobs'
+    { datasetName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      projectName = Prelude.Nothing
+    }
+
+-- | The name of a dataset. Using this parameter indicates to return only
+-- those jobs that act on the specified dataset.
+listJobs_datasetName :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_datasetName = Lens.lens (\ListJobs' {datasetName} -> datasetName) (\s@ListJobs' {} a -> s {datasetName = a} :: ListJobs)
+
+-- | The maximum number of results to return in this request.
+listJobs_maxResults :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Natural)
+listJobs_maxResults = Lens.lens (\ListJobs' {maxResults} -> maxResults) (\s@ListJobs' {} a -> s {maxResults = a} :: ListJobs)
+
+-- | A token generated by DataBrew that specifies where to continue
+-- pagination if a previous request was truncated. To get the next set of
+-- pages, pass in the NextToken value from the response object of the
+-- previous page call.
+listJobs_nextToken :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_nextToken = Lens.lens (\ListJobs' {nextToken} -> nextToken) (\s@ListJobs' {} a -> s {nextToken = a} :: ListJobs)
+
+-- | The name of a project. Using this parameter indicates to return only
+-- those jobs that are associated with the specified project.
+listJobs_projectName :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_projectName = Lens.lens (\ListJobs' {projectName} -> projectName) (\s@ListJobs' {} a -> s {projectName = a} :: ListJobs)
+
+instance Core.AWSPager ListJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listJobsResponse_jobs) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listJobs_nextToken
+          Lens..~ rs
+          Lens.^? listJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListJobs where
+  type AWSResponse ListJobs = ListJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListJobsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Jobs" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListJobs where
+  hashWithSalt _salt ListJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` projectName
+
+instance Prelude.NFData ListJobs where
+  rnf ListJobs' {..} =
+    Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf projectName
+
+instance Data.ToHeaders ListJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListJobs where
+  toPath = Prelude.const "/jobs"
+
+instance Data.ToQuery ListJobs where
+  toQuery ListJobs' {..} =
+    Prelude.mconcat
+      [ "datasetName" Data.=: datasetName,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "projectName" Data.=: projectName
+      ]
+
+-- | /See:/ 'newListJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of jobs that are defined.
+    jobs :: [Job]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listJobsResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listJobsResponse_httpStatus' - The response's http status code.
+--
+-- 'jobs', 'listJobsResponse_jobs' - A list of jobs that are defined.
+newListJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListJobsResponse
+newListJobsResponse pHttpStatus_ =
+  ListJobsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      jobs = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listJobsResponse_nextToken :: Lens.Lens' ListJobsResponse (Prelude.Maybe Prelude.Text)
+listJobsResponse_nextToken = Lens.lens (\ListJobsResponse' {nextToken} -> nextToken) (\s@ListJobsResponse' {} a -> s {nextToken = a} :: ListJobsResponse)
+
+-- | The response's http status code.
+listJobsResponse_httpStatus :: Lens.Lens' ListJobsResponse Prelude.Int
+listJobsResponse_httpStatus = Lens.lens (\ListJobsResponse' {httpStatus} -> httpStatus) (\s@ListJobsResponse' {} a -> s {httpStatus = a} :: ListJobsResponse)
+
+-- | A list of jobs that are defined.
+listJobsResponse_jobs :: Lens.Lens' ListJobsResponse [Job]
+listJobsResponse_jobs = Lens.lens (\ListJobsResponse' {jobs} -> jobs) (\s@ListJobsResponse' {} a -> s {jobs = a} :: ListJobsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListJobsResponse where
+  rnf ListJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobs
diff --git a/gen/Amazonka/DataBrew/ListProjects.hs b/gen/Amazonka/DataBrew/ListProjects.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListProjects.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListProjects
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the DataBrew projects that are defined.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListProjects
+  ( -- * Creating a Request
+    ListProjects (..),
+    newListProjects,
+
+    -- * Request Lenses
+    listProjects_maxResults,
+    listProjects_nextToken,
+
+    -- * Destructuring the Response
+    ListProjectsResponse (..),
+    newListProjectsResponse,
+
+    -- * Response Lenses
+    listProjectsResponse_nextToken,
+    listProjectsResponse_httpStatus,
+    listProjectsResponse_projects,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListProjects' smart constructor.
+data ListProjects = ListProjects'
+  { -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a previous call to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProjects' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listProjects_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listProjects_nextToken' - The token returned by a previous call to retrieve the next set of
+-- results.
+newListProjects ::
+  ListProjects
+newListProjects =
+  ListProjects'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this request.
+listProjects_maxResults :: Lens.Lens' ListProjects (Prelude.Maybe Prelude.Natural)
+listProjects_maxResults = Lens.lens (\ListProjects' {maxResults} -> maxResults) (\s@ListProjects' {} a -> s {maxResults = a} :: ListProjects)
+
+-- | The token returned by a previous call to retrieve the next set of
+-- results.
+listProjects_nextToken :: Lens.Lens' ListProjects (Prelude.Maybe Prelude.Text)
+listProjects_nextToken = Lens.lens (\ListProjects' {nextToken} -> nextToken) (\s@ListProjects' {} a -> s {nextToken = a} :: ListProjects)
+
+instance Core.AWSPager ListProjects where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listProjectsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listProjectsResponse_projects) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listProjects_nextToken
+          Lens..~ rs
+          Lens.^? listProjectsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListProjects where
+  type AWSResponse ListProjects = ListProjectsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProjectsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Projects" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListProjects where
+  hashWithSalt _salt ListProjects' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListProjects where
+  rnf ListProjects' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListProjects where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProjects where
+  toPath = Prelude.const "/projects"
+
+instance Data.ToQuery ListProjects where
+  toQuery ListProjects' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListProjectsResponse' smart constructor.
+data ListProjectsResponse = ListProjectsResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of projects that are defined .
+    projects :: [Project]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProjectsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listProjectsResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listProjectsResponse_httpStatus' - The response's http status code.
+--
+-- 'projects', 'listProjectsResponse_projects' - A list of projects that are defined .
+newListProjectsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProjectsResponse
+newListProjectsResponse pHttpStatus_ =
+  ListProjectsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      projects = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listProjectsResponse_nextToken :: Lens.Lens' ListProjectsResponse (Prelude.Maybe Prelude.Text)
+listProjectsResponse_nextToken = Lens.lens (\ListProjectsResponse' {nextToken} -> nextToken) (\s@ListProjectsResponse' {} a -> s {nextToken = a} :: ListProjectsResponse)
+
+-- | The response's http status code.
+listProjectsResponse_httpStatus :: Lens.Lens' ListProjectsResponse Prelude.Int
+listProjectsResponse_httpStatus = Lens.lens (\ListProjectsResponse' {httpStatus} -> httpStatus) (\s@ListProjectsResponse' {} a -> s {httpStatus = a} :: ListProjectsResponse)
+
+-- | A list of projects that are defined .
+listProjectsResponse_projects :: Lens.Lens' ListProjectsResponse [Project]
+listProjectsResponse_projects = Lens.lens (\ListProjectsResponse' {projects} -> projects) (\s@ListProjectsResponse' {} a -> s {projects = a} :: ListProjectsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListProjectsResponse where
+  rnf ListProjectsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf projects
diff --git a/gen/Amazonka/DataBrew/ListRecipeVersions.hs b/gen/Amazonka/DataBrew/ListRecipeVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListRecipeVersions.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListRecipeVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the versions of a particular DataBrew recipe, except for
+-- @LATEST_WORKING@.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListRecipeVersions
+  ( -- * Creating a Request
+    ListRecipeVersions (..),
+    newListRecipeVersions,
+
+    -- * Request Lenses
+    listRecipeVersions_maxResults,
+    listRecipeVersions_nextToken,
+    listRecipeVersions_name,
+
+    -- * Destructuring the Response
+    ListRecipeVersionsResponse (..),
+    newListRecipeVersionsResponse,
+
+    -- * Response Lenses
+    listRecipeVersionsResponse_nextToken,
+    listRecipeVersionsResponse_httpStatus,
+    listRecipeVersionsResponse_recipes,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRecipeVersions' smart constructor.
+data ListRecipeVersions = ListRecipeVersions'
+  { -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a previous call to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recipe for which to return version information.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecipeVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listRecipeVersions_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listRecipeVersions_nextToken' - The token returned by a previous call to retrieve the next set of
+-- results.
+--
+-- 'name', 'listRecipeVersions_name' - The name of the recipe for which to return version information.
+newListRecipeVersions ::
+  -- | 'name'
+  Prelude.Text ->
+  ListRecipeVersions
+newListRecipeVersions pName_ =
+  ListRecipeVersions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of results to return in this request.
+listRecipeVersions_maxResults :: Lens.Lens' ListRecipeVersions (Prelude.Maybe Prelude.Natural)
+listRecipeVersions_maxResults = Lens.lens (\ListRecipeVersions' {maxResults} -> maxResults) (\s@ListRecipeVersions' {} a -> s {maxResults = a} :: ListRecipeVersions)
+
+-- | The token returned by a previous call to retrieve the next set of
+-- results.
+listRecipeVersions_nextToken :: Lens.Lens' ListRecipeVersions (Prelude.Maybe Prelude.Text)
+listRecipeVersions_nextToken = Lens.lens (\ListRecipeVersions' {nextToken} -> nextToken) (\s@ListRecipeVersions' {} a -> s {nextToken = a} :: ListRecipeVersions)
+
+-- | The name of the recipe for which to return version information.
+listRecipeVersions_name :: Lens.Lens' ListRecipeVersions Prelude.Text
+listRecipeVersions_name = Lens.lens (\ListRecipeVersions' {name} -> name) (\s@ListRecipeVersions' {} a -> s {name = a} :: ListRecipeVersions)
+
+instance Core.AWSPager ListRecipeVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRecipeVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listRecipeVersionsResponse_recipes) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRecipeVersions_nextToken
+          Lens..~ rs
+          Lens.^? listRecipeVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRecipeVersions where
+  type
+    AWSResponse ListRecipeVersions =
+      ListRecipeVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecipeVersionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Recipes" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListRecipeVersions where
+  hashWithSalt _salt ListRecipeVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListRecipeVersions where
+  rnf ListRecipeVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ListRecipeVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRecipeVersions where
+  toPath = Prelude.const "/recipeVersions"
+
+instance Data.ToQuery ListRecipeVersions where
+  toQuery ListRecipeVersions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "name" Data.=: name
+      ]
+
+-- | /See:/ 'newListRecipeVersionsResponse' smart constructor.
+data ListRecipeVersionsResponse = ListRecipeVersionsResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of versions for the specified recipe.
+    recipes :: [Recipe]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecipeVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listRecipeVersionsResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listRecipeVersionsResponse_httpStatus' - The response's http status code.
+--
+-- 'recipes', 'listRecipeVersionsResponse_recipes' - A list of versions for the specified recipe.
+newListRecipeVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecipeVersionsResponse
+newListRecipeVersionsResponse pHttpStatus_ =
+  ListRecipeVersionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      recipes = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listRecipeVersionsResponse_nextToken :: Lens.Lens' ListRecipeVersionsResponse (Prelude.Maybe Prelude.Text)
+listRecipeVersionsResponse_nextToken = Lens.lens (\ListRecipeVersionsResponse' {nextToken} -> nextToken) (\s@ListRecipeVersionsResponse' {} a -> s {nextToken = a} :: ListRecipeVersionsResponse)
+
+-- | The response's http status code.
+listRecipeVersionsResponse_httpStatus :: Lens.Lens' ListRecipeVersionsResponse Prelude.Int
+listRecipeVersionsResponse_httpStatus = Lens.lens (\ListRecipeVersionsResponse' {httpStatus} -> httpStatus) (\s@ListRecipeVersionsResponse' {} a -> s {httpStatus = a} :: ListRecipeVersionsResponse)
+
+-- | A list of versions for the specified recipe.
+listRecipeVersionsResponse_recipes :: Lens.Lens' ListRecipeVersionsResponse [Recipe]
+listRecipeVersionsResponse_recipes = Lens.lens (\ListRecipeVersionsResponse' {recipes} -> recipes) (\s@ListRecipeVersionsResponse' {} a -> s {recipes = a} :: ListRecipeVersionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListRecipeVersionsResponse where
+  rnf ListRecipeVersionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf recipes
diff --git a/gen/Amazonka/DataBrew/ListRecipes.hs b/gen/Amazonka/DataBrew/ListRecipes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListRecipes.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListRecipes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the DataBrew recipes that are defined.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListRecipes
+  ( -- * Creating a Request
+    ListRecipes (..),
+    newListRecipes,
+
+    -- * Request Lenses
+    listRecipes_maxResults,
+    listRecipes_nextToken,
+    listRecipes_recipeVersion,
+
+    -- * Destructuring the Response
+    ListRecipesResponse (..),
+    newListRecipesResponse,
+
+    -- * Response Lenses
+    listRecipesResponse_nextToken,
+    listRecipesResponse_httpStatus,
+    listRecipesResponse_recipes,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRecipes' smart constructor.
+data ListRecipes = ListRecipes'
+  { -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a previous call to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Return only those recipes with a version identifier of @LATEST_WORKING@
+    -- or @LATEST_PUBLISHED@. If @RecipeVersion@ is omitted, @ListRecipes@
+    -- returns all of the @LATEST_PUBLISHED@ recipe versions.
+    --
+    -- Valid values: @LATEST_WORKING@ | @LATEST_PUBLISHED@
+    recipeVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecipes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listRecipes_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listRecipes_nextToken' - The token returned by a previous call to retrieve the next set of
+-- results.
+--
+-- 'recipeVersion', 'listRecipes_recipeVersion' - Return only those recipes with a version identifier of @LATEST_WORKING@
+-- or @LATEST_PUBLISHED@. If @RecipeVersion@ is omitted, @ListRecipes@
+-- returns all of the @LATEST_PUBLISHED@ recipe versions.
+--
+-- Valid values: @LATEST_WORKING@ | @LATEST_PUBLISHED@
+newListRecipes ::
+  ListRecipes
+newListRecipes =
+  ListRecipes'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      recipeVersion = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this request.
+listRecipes_maxResults :: Lens.Lens' ListRecipes (Prelude.Maybe Prelude.Natural)
+listRecipes_maxResults = Lens.lens (\ListRecipes' {maxResults} -> maxResults) (\s@ListRecipes' {} a -> s {maxResults = a} :: ListRecipes)
+
+-- | The token returned by a previous call to retrieve the next set of
+-- results.
+listRecipes_nextToken :: Lens.Lens' ListRecipes (Prelude.Maybe Prelude.Text)
+listRecipes_nextToken = Lens.lens (\ListRecipes' {nextToken} -> nextToken) (\s@ListRecipes' {} a -> s {nextToken = a} :: ListRecipes)
+
+-- | Return only those recipes with a version identifier of @LATEST_WORKING@
+-- or @LATEST_PUBLISHED@. If @RecipeVersion@ is omitted, @ListRecipes@
+-- returns all of the @LATEST_PUBLISHED@ recipe versions.
+--
+-- Valid values: @LATEST_WORKING@ | @LATEST_PUBLISHED@
+listRecipes_recipeVersion :: Lens.Lens' ListRecipes (Prelude.Maybe Prelude.Text)
+listRecipes_recipeVersion = Lens.lens (\ListRecipes' {recipeVersion} -> recipeVersion) (\s@ListRecipes' {} a -> s {recipeVersion = a} :: ListRecipes)
+
+instance Core.AWSPager ListRecipes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRecipesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listRecipesResponse_recipes) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRecipes_nextToken
+          Lens..~ rs
+          Lens.^? listRecipesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRecipes where
+  type AWSResponse ListRecipes = ListRecipesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecipesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Recipes" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListRecipes where
+  hashWithSalt _salt ListRecipes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` recipeVersion
+
+instance Prelude.NFData ListRecipes where
+  rnf ListRecipes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recipeVersion
+
+instance Data.ToHeaders ListRecipes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRecipes where
+  toPath = Prelude.const "/recipes"
+
+instance Data.ToQuery ListRecipes where
+  toQuery ListRecipes' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "recipeVersion" Data.=: recipeVersion
+      ]
+
+-- | /See:/ 'newListRecipesResponse' smart constructor.
+data ListRecipesResponse = ListRecipesResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of recipes that are defined.
+    recipes :: [Recipe]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecipesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listRecipesResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listRecipesResponse_httpStatus' - The response's http status code.
+--
+-- 'recipes', 'listRecipesResponse_recipes' - A list of recipes that are defined.
+newListRecipesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecipesResponse
+newListRecipesResponse pHttpStatus_ =
+  ListRecipesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      recipes = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listRecipesResponse_nextToken :: Lens.Lens' ListRecipesResponse (Prelude.Maybe Prelude.Text)
+listRecipesResponse_nextToken = Lens.lens (\ListRecipesResponse' {nextToken} -> nextToken) (\s@ListRecipesResponse' {} a -> s {nextToken = a} :: ListRecipesResponse)
+
+-- | The response's http status code.
+listRecipesResponse_httpStatus :: Lens.Lens' ListRecipesResponse Prelude.Int
+listRecipesResponse_httpStatus = Lens.lens (\ListRecipesResponse' {httpStatus} -> httpStatus) (\s@ListRecipesResponse' {} a -> s {httpStatus = a} :: ListRecipesResponse)
+
+-- | A list of recipes that are defined.
+listRecipesResponse_recipes :: Lens.Lens' ListRecipesResponse [Recipe]
+listRecipesResponse_recipes = Lens.lens (\ListRecipesResponse' {recipes} -> recipes) (\s@ListRecipesResponse' {} a -> s {recipes = a} :: ListRecipesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListRecipesResponse where
+  rnf ListRecipesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf recipes
diff --git a/gen/Amazonka/DataBrew/ListRulesets.hs b/gen/Amazonka/DataBrew/ListRulesets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListRulesets.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListRulesets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all rulesets available in the current account or rulesets
+-- associated with a specific resource (dataset).
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListRulesets
+  ( -- * Creating a Request
+    ListRulesets (..),
+    newListRulesets,
+
+    -- * Request Lenses
+    listRulesets_maxResults,
+    listRulesets_nextToken,
+    listRulesets_targetArn,
+
+    -- * Destructuring the Response
+    ListRulesetsResponse (..),
+    newListRulesetsResponse,
+
+    -- * Response Lenses
+    listRulesetsResponse_nextToken,
+    listRulesetsResponse_httpStatus,
+    listRulesetsResponse_rulesets,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRulesets' smart constructor.
+data ListRulesets = ListRulesets'
+  { -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token generated by DataBrew that specifies where to continue
+    -- pagination if a previous request was truncated. To get the next set of
+    -- pages, pass in the NextToken value from the response object of the
+    -- previous page call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a resource (dataset). Using this
+    -- parameter indicates to return only those rulesets that are associated
+    -- with the specified resource.
+    targetArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRulesets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listRulesets_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listRulesets_nextToken' - A token generated by DataBrew that specifies where to continue
+-- pagination if a previous request was truncated. To get the next set of
+-- pages, pass in the NextToken value from the response object of the
+-- previous page call.
+--
+-- 'targetArn', 'listRulesets_targetArn' - The Amazon Resource Name (ARN) of a resource (dataset). Using this
+-- parameter indicates to return only those rulesets that are associated
+-- with the specified resource.
+newListRulesets ::
+  ListRulesets
+newListRulesets =
+  ListRulesets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      targetArn = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this request.
+listRulesets_maxResults :: Lens.Lens' ListRulesets (Prelude.Maybe Prelude.Natural)
+listRulesets_maxResults = Lens.lens (\ListRulesets' {maxResults} -> maxResults) (\s@ListRulesets' {} a -> s {maxResults = a} :: ListRulesets)
+
+-- | A token generated by DataBrew that specifies where to continue
+-- pagination if a previous request was truncated. To get the next set of
+-- pages, pass in the NextToken value from the response object of the
+-- previous page call.
+listRulesets_nextToken :: Lens.Lens' ListRulesets (Prelude.Maybe Prelude.Text)
+listRulesets_nextToken = Lens.lens (\ListRulesets' {nextToken} -> nextToken) (\s@ListRulesets' {} a -> s {nextToken = a} :: ListRulesets)
+
+-- | The Amazon Resource Name (ARN) of a resource (dataset). Using this
+-- parameter indicates to return only those rulesets that are associated
+-- with the specified resource.
+listRulesets_targetArn :: Lens.Lens' ListRulesets (Prelude.Maybe Prelude.Text)
+listRulesets_targetArn = Lens.lens (\ListRulesets' {targetArn} -> targetArn) (\s@ListRulesets' {} a -> s {targetArn = a} :: ListRulesets)
+
+instance Core.AWSPager ListRulesets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRulesetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listRulesetsResponse_rulesets) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRulesets_nextToken
+          Lens..~ rs
+          Lens.^? listRulesetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRulesets where
+  type AWSResponse ListRulesets = ListRulesetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRulesetsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Rulesets" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListRulesets where
+  hashWithSalt _salt ListRulesets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` targetArn
+
+instance Prelude.NFData ListRulesets where
+  rnf ListRulesets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf targetArn
+
+instance Data.ToHeaders ListRulesets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRulesets where
+  toPath = Prelude.const "/rulesets"
+
+instance Data.ToQuery ListRulesets where
+  toQuery ListRulesets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "targetArn" Data.=: targetArn
+      ]
+
+-- | /See:/ 'newListRulesetsResponse' smart constructor.
+data ListRulesetsResponse = ListRulesetsResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of RulesetItem. RulesetItem contains meta data of a ruleset.
+    rulesets :: [RulesetItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRulesetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listRulesetsResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listRulesetsResponse_httpStatus' - The response's http status code.
+--
+-- 'rulesets', 'listRulesetsResponse_rulesets' - A list of RulesetItem. RulesetItem contains meta data of a ruleset.
+newListRulesetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRulesetsResponse
+newListRulesetsResponse pHttpStatus_ =
+  ListRulesetsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      rulesets = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listRulesetsResponse_nextToken :: Lens.Lens' ListRulesetsResponse (Prelude.Maybe Prelude.Text)
+listRulesetsResponse_nextToken = Lens.lens (\ListRulesetsResponse' {nextToken} -> nextToken) (\s@ListRulesetsResponse' {} a -> s {nextToken = a} :: ListRulesetsResponse)
+
+-- | The response's http status code.
+listRulesetsResponse_httpStatus :: Lens.Lens' ListRulesetsResponse Prelude.Int
+listRulesetsResponse_httpStatus = Lens.lens (\ListRulesetsResponse' {httpStatus} -> httpStatus) (\s@ListRulesetsResponse' {} a -> s {httpStatus = a} :: ListRulesetsResponse)
+
+-- | A list of RulesetItem. RulesetItem contains meta data of a ruleset.
+listRulesetsResponse_rulesets :: Lens.Lens' ListRulesetsResponse [RulesetItem]
+listRulesetsResponse_rulesets = Lens.lens (\ListRulesetsResponse' {rulesets} -> rulesets) (\s@ListRulesetsResponse' {} a -> s {rulesets = a} :: ListRulesetsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListRulesetsResponse where
+  rnf ListRulesetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf rulesets
diff --git a/gen/Amazonka/DataBrew/ListSchedules.hs b/gen/Amazonka/DataBrew/ListSchedules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListSchedules.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListSchedules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the DataBrew schedules that are defined.
+--
+-- This operation returns paginated results.
+module Amazonka.DataBrew.ListSchedules
+  ( -- * Creating a Request
+    ListSchedules (..),
+    newListSchedules,
+
+    -- * Request Lenses
+    listSchedules_jobName,
+    listSchedules_maxResults,
+    listSchedules_nextToken,
+
+    -- * Destructuring the Response
+    ListSchedulesResponse (..),
+    newListSchedulesResponse,
+
+    -- * Response Lenses
+    listSchedulesResponse_nextToken,
+    listSchedulesResponse_httpStatus,
+    listSchedulesResponse_schedules,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSchedules' smart constructor.
+data ListSchedules = ListSchedules'
+  { -- | The name of the job that these schedules apply to.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return in this request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a previous call to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSchedules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobName', 'listSchedules_jobName' - The name of the job that these schedules apply to.
+--
+-- 'maxResults', 'listSchedules_maxResults' - The maximum number of results to return in this request.
+--
+-- 'nextToken', 'listSchedules_nextToken' - The token returned by a previous call to retrieve the next set of
+-- results.
+newListSchedules ::
+  ListSchedules
+newListSchedules =
+  ListSchedules'
+    { jobName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The name of the job that these schedules apply to.
+listSchedules_jobName :: Lens.Lens' ListSchedules (Prelude.Maybe Prelude.Text)
+listSchedules_jobName = Lens.lens (\ListSchedules' {jobName} -> jobName) (\s@ListSchedules' {} a -> s {jobName = a} :: ListSchedules)
+
+-- | The maximum number of results to return in this request.
+listSchedules_maxResults :: Lens.Lens' ListSchedules (Prelude.Maybe Prelude.Natural)
+listSchedules_maxResults = Lens.lens (\ListSchedules' {maxResults} -> maxResults) (\s@ListSchedules' {} a -> s {maxResults = a} :: ListSchedules)
+
+-- | The token returned by a previous call to retrieve the next set of
+-- results.
+listSchedules_nextToken :: Lens.Lens' ListSchedules (Prelude.Maybe Prelude.Text)
+listSchedules_nextToken = Lens.lens (\ListSchedules' {nextToken} -> nextToken) (\s@ListSchedules' {} a -> s {nextToken = a} :: ListSchedules)
+
+instance Core.AWSPager ListSchedules where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSchedulesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listSchedulesResponse_schedules) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSchedules_nextToken
+          Lens..~ rs
+          Lens.^? listSchedulesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSchedules where
+  type
+    AWSResponse ListSchedules =
+      ListSchedulesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSchedulesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Schedules" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListSchedules where
+  hashWithSalt _salt ListSchedules' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSchedules where
+  rnf ListSchedules' {..} =
+    Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSchedules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSchedules where
+  toPath = Prelude.const "/schedules"
+
+instance Data.ToQuery ListSchedules where
+  toQuery ListSchedules' {..} =
+    Prelude.mconcat
+      [ "jobName" Data.=: jobName,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListSchedulesResponse' smart constructor.
+data ListSchedulesResponse = ListSchedulesResponse'
+  { -- | A token that you can use in a subsequent call to retrieve the next set
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of schedules that are defined.
+    schedules :: [Schedule]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSchedulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listSchedulesResponse_nextToken' - A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+--
+-- 'httpStatus', 'listSchedulesResponse_httpStatus' - The response's http status code.
+--
+-- 'schedules', 'listSchedulesResponse_schedules' - A list of schedules that are defined.
+newListSchedulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSchedulesResponse
+newListSchedulesResponse pHttpStatus_ =
+  ListSchedulesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      schedules = Prelude.mempty
+    }
+
+-- | A token that you can use in a subsequent call to retrieve the next set
+-- of results.
+listSchedulesResponse_nextToken :: Lens.Lens' ListSchedulesResponse (Prelude.Maybe Prelude.Text)
+listSchedulesResponse_nextToken = Lens.lens (\ListSchedulesResponse' {nextToken} -> nextToken) (\s@ListSchedulesResponse' {} a -> s {nextToken = a} :: ListSchedulesResponse)
+
+-- | The response's http status code.
+listSchedulesResponse_httpStatus :: Lens.Lens' ListSchedulesResponse Prelude.Int
+listSchedulesResponse_httpStatus = Lens.lens (\ListSchedulesResponse' {httpStatus} -> httpStatus) (\s@ListSchedulesResponse' {} a -> s {httpStatus = a} :: ListSchedulesResponse)
+
+-- | A list of schedules that are defined.
+listSchedulesResponse_schedules :: Lens.Lens' ListSchedulesResponse [Schedule]
+listSchedulesResponse_schedules = Lens.lens (\ListSchedulesResponse' {schedules} -> schedules) (\s@ListSchedulesResponse' {} a -> s {schedules = a} :: ListSchedulesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListSchedulesResponse where
+  rnf ListSchedulesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf schedules
diff --git a/gen/Amazonka/DataBrew/ListTagsForResource.hs b/gen/Amazonka/DataBrew/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/ListTagsForResource.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the tags for a DataBrew resource.
+module Amazonka.DataBrew.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) string that uniquely identifies the
+    -- DataBrew resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) string that uniquely identifies the
+-- DataBrew resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- DataBrew resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A list of tags associated with the DataBrew resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A list of tags associated with the DataBrew resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of tags associated with the DataBrew resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataBrew/PublishRecipe.hs b/gen/Amazonka/DataBrew/PublishRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/PublishRecipe.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.PublishRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Publishes a new version of a DataBrew recipe.
+module Amazonka.DataBrew.PublishRecipe
+  ( -- * Creating a Request
+    PublishRecipe (..),
+    newPublishRecipe,
+
+    -- * Request Lenses
+    publishRecipe_description,
+    publishRecipe_name,
+
+    -- * Destructuring the Response
+    PublishRecipeResponse (..),
+    newPublishRecipeResponse,
+
+    -- * Response Lenses
+    publishRecipeResponse_httpStatus,
+    publishRecipeResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPublishRecipe' smart constructor.
+data PublishRecipe = PublishRecipe'
+  { -- | A description of the recipe to be published, for this version of the
+    -- recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recipe to be published.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PublishRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'publishRecipe_description' - A description of the recipe to be published, for this version of the
+-- recipe.
+--
+-- 'name', 'publishRecipe_name' - The name of the recipe to be published.
+newPublishRecipe ::
+  -- | 'name'
+  Prelude.Text ->
+  PublishRecipe
+newPublishRecipe pName_ =
+  PublishRecipe'
+    { description = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A description of the recipe to be published, for this version of the
+-- recipe.
+publishRecipe_description :: Lens.Lens' PublishRecipe (Prelude.Maybe Prelude.Text)
+publishRecipe_description = Lens.lens (\PublishRecipe' {description} -> description) (\s@PublishRecipe' {} a -> s {description = a} :: PublishRecipe)
+
+-- | The name of the recipe to be published.
+publishRecipe_name :: Lens.Lens' PublishRecipe Prelude.Text
+publishRecipe_name = Lens.lens (\PublishRecipe' {name} -> name) (\s@PublishRecipe' {} a -> s {name = a} :: PublishRecipe)
+
+instance Core.AWSRequest PublishRecipe where
+  type
+    AWSResponse PublishRecipe =
+      PublishRecipeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PublishRecipeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable PublishRecipe where
+  hashWithSalt _salt PublishRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData PublishRecipe where
+  rnf PublishRecipe' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders PublishRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PublishRecipe where
+  toJSON PublishRecipe' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Description" Data..=) Prelude.<$> description]
+      )
+
+instance Data.ToPath PublishRecipe where
+  toPath PublishRecipe' {..} =
+    Prelude.mconcat
+      ["/recipes/", Data.toBS name, "/publishRecipe"]
+
+instance Data.ToQuery PublishRecipe where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPublishRecipeResponse' smart constructor.
+data PublishRecipeResponse = PublishRecipeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the recipe that you published.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PublishRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'publishRecipeResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'publishRecipeResponse_name' - The name of the recipe that you published.
+newPublishRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  PublishRecipeResponse
+newPublishRecipeResponse pHttpStatus_ pName_ =
+  PublishRecipeResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+publishRecipeResponse_httpStatus :: Lens.Lens' PublishRecipeResponse Prelude.Int
+publishRecipeResponse_httpStatus = Lens.lens (\PublishRecipeResponse' {httpStatus} -> httpStatus) (\s@PublishRecipeResponse' {} a -> s {httpStatus = a} :: PublishRecipeResponse)
+
+-- | The name of the recipe that you published.
+publishRecipeResponse_name :: Lens.Lens' PublishRecipeResponse Prelude.Text
+publishRecipeResponse_name = Lens.lens (\PublishRecipeResponse' {name} -> name) (\s@PublishRecipeResponse' {} a -> s {name = a} :: PublishRecipeResponse)
+
+instance Prelude.NFData PublishRecipeResponse where
+  rnf PublishRecipeResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/SendProjectSessionAction.hs b/gen/Amazonka/DataBrew/SendProjectSessionAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/SendProjectSessionAction.hs
@@ -0,0 +1,282 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.SendProjectSessionAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Performs a recipe step within an interactive DataBrew session that\'s
+-- currently open.
+module Amazonka.DataBrew.SendProjectSessionAction
+  ( -- * Creating a Request
+    SendProjectSessionAction (..),
+    newSendProjectSessionAction,
+
+    -- * Request Lenses
+    sendProjectSessionAction_clientSessionId,
+    sendProjectSessionAction_preview,
+    sendProjectSessionAction_recipeStep,
+    sendProjectSessionAction_stepIndex,
+    sendProjectSessionAction_viewFrame,
+    sendProjectSessionAction_name,
+
+    -- * Destructuring the Response
+    SendProjectSessionActionResponse (..),
+    newSendProjectSessionActionResponse,
+
+    -- * Response Lenses
+    sendProjectSessionActionResponse_actionId,
+    sendProjectSessionActionResponse_result,
+    sendProjectSessionActionResponse_httpStatus,
+    sendProjectSessionActionResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendProjectSessionAction' smart constructor.
+data SendProjectSessionAction = SendProjectSessionAction'
+  { -- | A unique identifier for an interactive session that\'s currently open
+    -- and ready for work. The action will be performed on this session.
+    clientSessionId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | If true, the result of the recipe step will be returned, but not
+    -- applied.
+    preview :: Prelude.Maybe Prelude.Bool,
+    recipeStep :: Prelude.Maybe RecipeStep,
+    -- | The index from which to preview a step. This index is used to preview
+    -- the result of steps that have already been applied, so that the
+    -- resulting view frame is from earlier in the view frame stack.
+    stepIndex :: Prelude.Maybe Prelude.Natural,
+    viewFrame :: Prelude.Maybe ViewFrame,
+    -- | The name of the project to apply the action to.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendProjectSessionAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientSessionId', 'sendProjectSessionAction_clientSessionId' - A unique identifier for an interactive session that\'s currently open
+-- and ready for work. The action will be performed on this session.
+--
+-- 'preview', 'sendProjectSessionAction_preview' - If true, the result of the recipe step will be returned, but not
+-- applied.
+--
+-- 'recipeStep', 'sendProjectSessionAction_recipeStep' - Undocumented member.
+--
+-- 'stepIndex', 'sendProjectSessionAction_stepIndex' - The index from which to preview a step. This index is used to preview
+-- the result of steps that have already been applied, so that the
+-- resulting view frame is from earlier in the view frame stack.
+--
+-- 'viewFrame', 'sendProjectSessionAction_viewFrame' - Undocumented member.
+--
+-- 'name', 'sendProjectSessionAction_name' - The name of the project to apply the action to.
+newSendProjectSessionAction ::
+  -- | 'name'
+  Prelude.Text ->
+  SendProjectSessionAction
+newSendProjectSessionAction pName_ =
+  SendProjectSessionAction'
+    { clientSessionId =
+        Prelude.Nothing,
+      preview = Prelude.Nothing,
+      recipeStep = Prelude.Nothing,
+      stepIndex = Prelude.Nothing,
+      viewFrame = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A unique identifier for an interactive session that\'s currently open
+-- and ready for work. The action will be performed on this session.
+sendProjectSessionAction_clientSessionId :: Lens.Lens' SendProjectSessionAction (Prelude.Maybe Prelude.Text)
+sendProjectSessionAction_clientSessionId = Lens.lens (\SendProjectSessionAction' {clientSessionId} -> clientSessionId) (\s@SendProjectSessionAction' {} a -> s {clientSessionId = a} :: SendProjectSessionAction) Prelude.. Lens.mapping Data._Sensitive
+
+-- | If true, the result of the recipe step will be returned, but not
+-- applied.
+sendProjectSessionAction_preview :: Lens.Lens' SendProjectSessionAction (Prelude.Maybe Prelude.Bool)
+sendProjectSessionAction_preview = Lens.lens (\SendProjectSessionAction' {preview} -> preview) (\s@SendProjectSessionAction' {} a -> s {preview = a} :: SendProjectSessionAction)
+
+-- | Undocumented member.
+sendProjectSessionAction_recipeStep :: Lens.Lens' SendProjectSessionAction (Prelude.Maybe RecipeStep)
+sendProjectSessionAction_recipeStep = Lens.lens (\SendProjectSessionAction' {recipeStep} -> recipeStep) (\s@SendProjectSessionAction' {} a -> s {recipeStep = a} :: SendProjectSessionAction)
+
+-- | The index from which to preview a step. This index is used to preview
+-- the result of steps that have already been applied, so that the
+-- resulting view frame is from earlier in the view frame stack.
+sendProjectSessionAction_stepIndex :: Lens.Lens' SendProjectSessionAction (Prelude.Maybe Prelude.Natural)
+sendProjectSessionAction_stepIndex = Lens.lens (\SendProjectSessionAction' {stepIndex} -> stepIndex) (\s@SendProjectSessionAction' {} a -> s {stepIndex = a} :: SendProjectSessionAction)
+
+-- | Undocumented member.
+sendProjectSessionAction_viewFrame :: Lens.Lens' SendProjectSessionAction (Prelude.Maybe ViewFrame)
+sendProjectSessionAction_viewFrame = Lens.lens (\SendProjectSessionAction' {viewFrame} -> viewFrame) (\s@SendProjectSessionAction' {} a -> s {viewFrame = a} :: SendProjectSessionAction)
+
+-- | The name of the project to apply the action to.
+sendProjectSessionAction_name :: Lens.Lens' SendProjectSessionAction Prelude.Text
+sendProjectSessionAction_name = Lens.lens (\SendProjectSessionAction' {name} -> name) (\s@SendProjectSessionAction' {} a -> s {name = a} :: SendProjectSessionAction)
+
+instance Core.AWSRequest SendProjectSessionAction where
+  type
+    AWSResponse SendProjectSessionAction =
+      SendProjectSessionActionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendProjectSessionActionResponse'
+            Prelude.<$> (x Data..?> "ActionId")
+            Prelude.<*> (x Data..?> "Result")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable SendProjectSessionAction where
+  hashWithSalt _salt SendProjectSessionAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientSessionId
+      `Prelude.hashWithSalt` preview
+      `Prelude.hashWithSalt` recipeStep
+      `Prelude.hashWithSalt` stepIndex
+      `Prelude.hashWithSalt` viewFrame
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData SendProjectSessionAction where
+  rnf SendProjectSessionAction' {..} =
+    Prelude.rnf clientSessionId
+      `Prelude.seq` Prelude.rnf preview
+      `Prelude.seq` Prelude.rnf recipeStep
+      `Prelude.seq` Prelude.rnf stepIndex
+      `Prelude.seq` Prelude.rnf viewFrame
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders SendProjectSessionAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendProjectSessionAction where
+  toJSON SendProjectSessionAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientSessionId" Data..=)
+              Prelude.<$> clientSessionId,
+            ("Preview" Data..=) Prelude.<$> preview,
+            ("RecipeStep" Data..=) Prelude.<$> recipeStep,
+            ("StepIndex" Data..=) Prelude.<$> stepIndex,
+            ("ViewFrame" Data..=) Prelude.<$> viewFrame
+          ]
+      )
+
+instance Data.ToPath SendProjectSessionAction where
+  toPath SendProjectSessionAction' {..} =
+    Prelude.mconcat
+      [ "/projects/",
+        Data.toBS name,
+        "/sendProjectSessionAction"
+      ]
+
+instance Data.ToQuery SendProjectSessionAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSendProjectSessionActionResponse' smart constructor.
+data SendProjectSessionActionResponse = SendProjectSessionActionResponse'
+  { -- | A unique identifier for the action that was performed.
+    actionId :: Prelude.Maybe Prelude.Int,
+    -- | A message indicating the result of performing the action.
+    result :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the project that was affected by the action.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendProjectSessionActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionId', 'sendProjectSessionActionResponse_actionId' - A unique identifier for the action that was performed.
+--
+-- 'result', 'sendProjectSessionActionResponse_result' - A message indicating the result of performing the action.
+--
+-- 'httpStatus', 'sendProjectSessionActionResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'sendProjectSessionActionResponse_name' - The name of the project that was affected by the action.
+newSendProjectSessionActionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  SendProjectSessionActionResponse
+newSendProjectSessionActionResponse
+  pHttpStatus_
+  pName_ =
+    SendProjectSessionActionResponse'
+      { actionId =
+          Prelude.Nothing,
+        result = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_
+      }
+
+-- | A unique identifier for the action that was performed.
+sendProjectSessionActionResponse_actionId :: Lens.Lens' SendProjectSessionActionResponse (Prelude.Maybe Prelude.Int)
+sendProjectSessionActionResponse_actionId = Lens.lens (\SendProjectSessionActionResponse' {actionId} -> actionId) (\s@SendProjectSessionActionResponse' {} a -> s {actionId = a} :: SendProjectSessionActionResponse)
+
+-- | A message indicating the result of performing the action.
+sendProjectSessionActionResponse_result :: Lens.Lens' SendProjectSessionActionResponse (Prelude.Maybe Prelude.Text)
+sendProjectSessionActionResponse_result = Lens.lens (\SendProjectSessionActionResponse' {result} -> result) (\s@SendProjectSessionActionResponse' {} a -> s {result = a} :: SendProjectSessionActionResponse)
+
+-- | The response's http status code.
+sendProjectSessionActionResponse_httpStatus :: Lens.Lens' SendProjectSessionActionResponse Prelude.Int
+sendProjectSessionActionResponse_httpStatus = Lens.lens (\SendProjectSessionActionResponse' {httpStatus} -> httpStatus) (\s@SendProjectSessionActionResponse' {} a -> s {httpStatus = a} :: SendProjectSessionActionResponse)
+
+-- | The name of the project that was affected by the action.
+sendProjectSessionActionResponse_name :: Lens.Lens' SendProjectSessionActionResponse Prelude.Text
+sendProjectSessionActionResponse_name = Lens.lens (\SendProjectSessionActionResponse' {name} -> name) (\s@SendProjectSessionActionResponse' {} a -> s {name = a} :: SendProjectSessionActionResponse)
+
+instance
+  Prelude.NFData
+    SendProjectSessionActionResponse
+  where
+  rnf SendProjectSessionActionResponse' {..} =
+    Prelude.rnf actionId
+      `Prelude.seq` Prelude.rnf result
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/StartJobRun.hs b/gen/Amazonka/DataBrew/StartJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/StartJobRun.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.StartJobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Runs a DataBrew job.
+module Amazonka.DataBrew.StartJobRun
+  ( -- * Creating a Request
+    StartJobRun (..),
+    newStartJobRun,
+
+    -- * Request Lenses
+    startJobRun_name,
+
+    -- * Destructuring the Response
+    StartJobRunResponse (..),
+    newStartJobRunResponse,
+
+    -- * Response Lenses
+    startJobRunResponse_httpStatus,
+    startJobRunResponse_runId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartJobRun' smart constructor.
+data StartJobRun = StartJobRun'
+  { -- | The name of the job to be run.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'startJobRun_name' - The name of the job to be run.
+newStartJobRun ::
+  -- | 'name'
+  Prelude.Text ->
+  StartJobRun
+newStartJobRun pName_ = StartJobRun' {name = pName_}
+
+-- | The name of the job to be run.
+startJobRun_name :: Lens.Lens' StartJobRun Prelude.Text
+startJobRun_name = Lens.lens (\StartJobRun' {name} -> name) (\s@StartJobRun' {} a -> s {name = a} :: StartJobRun)
+
+instance Core.AWSRequest StartJobRun where
+  type AWSResponse StartJobRun = StartJobRunResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartJobRunResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "RunId")
+      )
+
+instance Prelude.Hashable StartJobRun where
+  hashWithSalt _salt StartJobRun' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData StartJobRun where
+  rnf StartJobRun' {..} = Prelude.rnf name
+
+instance Data.ToHeaders StartJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartJobRun where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartJobRun where
+  toPath StartJobRun' {..} =
+    Prelude.mconcat
+      ["/jobs/", Data.toBS name, "/startJobRun"]
+
+instance Data.ToQuery StartJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartJobRunResponse' smart constructor.
+data StartJobRunResponse = StartJobRunResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A system-generated identifier for this particular job run.
+    runId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startJobRunResponse_httpStatus' - The response's http status code.
+--
+-- 'runId', 'startJobRunResponse_runId' - A system-generated identifier for this particular job run.
+newStartJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'runId'
+  Prelude.Text ->
+  StartJobRunResponse
+newStartJobRunResponse pHttpStatus_ pRunId_ =
+  StartJobRunResponse'
+    { httpStatus = pHttpStatus_,
+      runId = pRunId_
+    }
+
+-- | The response's http status code.
+startJobRunResponse_httpStatus :: Lens.Lens' StartJobRunResponse Prelude.Int
+startJobRunResponse_httpStatus = Lens.lens (\StartJobRunResponse' {httpStatus} -> httpStatus) (\s@StartJobRunResponse' {} a -> s {httpStatus = a} :: StartJobRunResponse)
+
+-- | A system-generated identifier for this particular job run.
+startJobRunResponse_runId :: Lens.Lens' StartJobRunResponse Prelude.Text
+startJobRunResponse_runId = Lens.lens (\StartJobRunResponse' {runId} -> runId) (\s@StartJobRunResponse' {} a -> s {runId = a} :: StartJobRunResponse)
+
+instance Prelude.NFData StartJobRunResponse where
+  rnf StartJobRunResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf runId
diff --git a/gen/Amazonka/DataBrew/StartProjectSession.hs b/gen/Amazonka/DataBrew/StartProjectSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/StartProjectSession.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.StartProjectSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an interactive session, enabling you to manipulate data in a
+-- DataBrew project.
+module Amazonka.DataBrew.StartProjectSession
+  ( -- * Creating a Request
+    StartProjectSession (..),
+    newStartProjectSession,
+
+    -- * Request Lenses
+    startProjectSession_assumeControl,
+    startProjectSession_name,
+
+    -- * Destructuring the Response
+    StartProjectSessionResponse (..),
+    newStartProjectSessionResponse,
+
+    -- * Response Lenses
+    startProjectSessionResponse_clientSessionId,
+    startProjectSessionResponse_httpStatus,
+    startProjectSessionResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartProjectSession' smart constructor.
+data StartProjectSession = StartProjectSession'
+  { -- | A value that, if true, enables you to take control of a session, even if
+    -- a different client is currently accessing the project.
+    assumeControl :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the project to act upon.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartProjectSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assumeControl', 'startProjectSession_assumeControl' - A value that, if true, enables you to take control of a session, even if
+-- a different client is currently accessing the project.
+--
+-- 'name', 'startProjectSession_name' - The name of the project to act upon.
+newStartProjectSession ::
+  -- | 'name'
+  Prelude.Text ->
+  StartProjectSession
+newStartProjectSession pName_ =
+  StartProjectSession'
+    { assumeControl =
+        Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A value that, if true, enables you to take control of a session, even if
+-- a different client is currently accessing the project.
+startProjectSession_assumeControl :: Lens.Lens' StartProjectSession (Prelude.Maybe Prelude.Bool)
+startProjectSession_assumeControl = Lens.lens (\StartProjectSession' {assumeControl} -> assumeControl) (\s@StartProjectSession' {} a -> s {assumeControl = a} :: StartProjectSession)
+
+-- | The name of the project to act upon.
+startProjectSession_name :: Lens.Lens' StartProjectSession Prelude.Text
+startProjectSession_name = Lens.lens (\StartProjectSession' {name} -> name) (\s@StartProjectSession' {} a -> s {name = a} :: StartProjectSession)
+
+instance Core.AWSRequest StartProjectSession where
+  type
+    AWSResponse StartProjectSession =
+      StartProjectSessionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartProjectSessionResponse'
+            Prelude.<$> (x Data..?> "ClientSessionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable StartProjectSession where
+  hashWithSalt _salt StartProjectSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` assumeControl
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData StartProjectSession where
+  rnf StartProjectSession' {..} =
+    Prelude.rnf assumeControl
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders StartProjectSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartProjectSession where
+  toJSON StartProjectSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AssumeControl" Data..=)
+              Prelude.<$> assumeControl
+          ]
+      )
+
+instance Data.ToPath StartProjectSession where
+  toPath StartProjectSession' {..} =
+    Prelude.mconcat
+      [ "/projects/",
+        Data.toBS name,
+        "/startProjectSession"
+      ]
+
+instance Data.ToQuery StartProjectSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartProjectSessionResponse' smart constructor.
+data StartProjectSessionResponse = StartProjectSessionResponse'
+  { -- | A system-generated identifier for the session.
+    clientSessionId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the project to be acted upon.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartProjectSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientSessionId', 'startProjectSessionResponse_clientSessionId' - A system-generated identifier for the session.
+--
+-- 'httpStatus', 'startProjectSessionResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'startProjectSessionResponse_name' - The name of the project to be acted upon.
+newStartProjectSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  StartProjectSessionResponse
+newStartProjectSessionResponse pHttpStatus_ pName_ =
+  StartProjectSessionResponse'
+    { clientSessionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | A system-generated identifier for the session.
+startProjectSessionResponse_clientSessionId :: Lens.Lens' StartProjectSessionResponse (Prelude.Maybe Prelude.Text)
+startProjectSessionResponse_clientSessionId = Lens.lens (\StartProjectSessionResponse' {clientSessionId} -> clientSessionId) (\s@StartProjectSessionResponse' {} a -> s {clientSessionId = a} :: StartProjectSessionResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+startProjectSessionResponse_httpStatus :: Lens.Lens' StartProjectSessionResponse Prelude.Int
+startProjectSessionResponse_httpStatus = Lens.lens (\StartProjectSessionResponse' {httpStatus} -> httpStatus) (\s@StartProjectSessionResponse' {} a -> s {httpStatus = a} :: StartProjectSessionResponse)
+
+-- | The name of the project to be acted upon.
+startProjectSessionResponse_name :: Lens.Lens' StartProjectSessionResponse Prelude.Text
+startProjectSessionResponse_name = Lens.lens (\StartProjectSessionResponse' {name} -> name) (\s@StartProjectSessionResponse' {} a -> s {name = a} :: StartProjectSessionResponse)
+
+instance Prelude.NFData StartProjectSessionResponse where
+  rnf StartProjectSessionResponse' {..} =
+    Prelude.rnf clientSessionId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/StopJobRun.hs b/gen/Amazonka/DataBrew/StopJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/StopJobRun.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.StopJobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a particular run of a job.
+module Amazonka.DataBrew.StopJobRun
+  ( -- * Creating a Request
+    StopJobRun (..),
+    newStopJobRun,
+
+    -- * Request Lenses
+    stopJobRun_name,
+    stopJobRun_runId,
+
+    -- * Destructuring the Response
+    StopJobRunResponse (..),
+    newStopJobRunResponse,
+
+    -- * Response Lenses
+    stopJobRunResponse_httpStatus,
+    stopJobRunResponse_runId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopJobRun' smart constructor.
+data StopJobRun = StopJobRun'
+  { -- | The name of the job to be stopped.
+    name :: Prelude.Text,
+    -- | The ID of the job run to be stopped.
+    runId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'stopJobRun_name' - The name of the job to be stopped.
+--
+-- 'runId', 'stopJobRun_runId' - The ID of the job run to be stopped.
+newStopJobRun ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'runId'
+  Prelude.Text ->
+  StopJobRun
+newStopJobRun pName_ pRunId_ =
+  StopJobRun' {name = pName_, runId = pRunId_}
+
+-- | The name of the job to be stopped.
+stopJobRun_name :: Lens.Lens' StopJobRun Prelude.Text
+stopJobRun_name = Lens.lens (\StopJobRun' {name} -> name) (\s@StopJobRun' {} a -> s {name = a} :: StopJobRun)
+
+-- | The ID of the job run to be stopped.
+stopJobRun_runId :: Lens.Lens' StopJobRun Prelude.Text
+stopJobRun_runId = Lens.lens (\StopJobRun' {runId} -> runId) (\s@StopJobRun' {} a -> s {runId = a} :: StopJobRun)
+
+instance Core.AWSRequest StopJobRun where
+  type AWSResponse StopJobRun = StopJobRunResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopJobRunResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "RunId")
+      )
+
+instance Prelude.Hashable StopJobRun where
+  hashWithSalt _salt StopJobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` runId
+
+instance Prelude.NFData StopJobRun where
+  rnf StopJobRun' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf runId
+
+instance Data.ToHeaders StopJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopJobRun where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopJobRun where
+  toPath StopJobRun' {..} =
+    Prelude.mconcat
+      [ "/jobs/",
+        Data.toBS name,
+        "/jobRun/",
+        Data.toBS runId,
+        "/stopJobRun"
+      ]
+
+instance Data.ToQuery StopJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopJobRunResponse' smart constructor.
+data StopJobRunResponse = StopJobRunResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the job run that you stopped.
+    runId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'stopJobRunResponse_httpStatus' - The response's http status code.
+--
+-- 'runId', 'stopJobRunResponse_runId' - The ID of the job run that you stopped.
+newStopJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'runId'
+  Prelude.Text ->
+  StopJobRunResponse
+newStopJobRunResponse pHttpStatus_ pRunId_ =
+  StopJobRunResponse'
+    { httpStatus = pHttpStatus_,
+      runId = pRunId_
+    }
+
+-- | The response's http status code.
+stopJobRunResponse_httpStatus :: Lens.Lens' StopJobRunResponse Prelude.Int
+stopJobRunResponse_httpStatus = Lens.lens (\StopJobRunResponse' {httpStatus} -> httpStatus) (\s@StopJobRunResponse' {} a -> s {httpStatus = a} :: StopJobRunResponse)
+
+-- | The ID of the job run that you stopped.
+stopJobRunResponse_runId :: Lens.Lens' StopJobRunResponse Prelude.Text
+stopJobRunResponse_runId = Lens.lens (\StopJobRunResponse' {runId} -> runId) (\s@StopJobRunResponse' {} a -> s {runId = a} :: StopJobRunResponse)
+
+instance Prelude.NFData StopJobRunResponse where
+  rnf StopJobRunResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf runId
diff --git a/gen/Amazonka/DataBrew/TagResource.hs b/gen/Amazonka/DataBrew/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/TagResource.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds metadata tags to a DataBrew resource, such as a dataset, project,
+-- recipe, job, or schedule.
+module Amazonka.DataBrew.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The DataBrew resource to which tags should be added. The value for this
+    -- parameter is an Amazon Resource Name (ARN). For DataBrew, you can tag a
+    -- dataset, a job, a project, or a recipe.
+    resourceArn :: Prelude.Text,
+    -- | One or more tags to be assigned to the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The DataBrew resource to which tags should be added. The value for this
+-- parameter is an Amazon Resource Name (ARN). For DataBrew, you can tag a
+-- dataset, a job, a project, or a recipe.
+--
+-- 'tags', 'tagResource_tags' - One or more tags to be assigned to the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The DataBrew resource to which tags should be added. The value for this
+-- parameter is an Amazon Resource Name (ARN). For DataBrew, you can tag a
+-- dataset, a job, a project, or a recipe.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | One or more tags to be assigned to the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataBrew/Types.hs b/gen/Amazonka/DataBrew/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types.hs
@@ -0,0 +1,670 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ValidationException,
+
+    -- * AnalyticsMode
+    AnalyticsMode (..),
+
+    -- * CompressionFormat
+    CompressionFormat (..),
+
+    -- * DatabaseOutputMode
+    DatabaseOutputMode (..),
+
+    -- * EncryptionMode
+    EncryptionMode (..),
+
+    -- * InputFormat
+    InputFormat (..),
+
+    -- * JobRunState
+    JobRunState (..),
+
+    -- * JobType
+    JobType (..),
+
+    -- * LogSubscription
+    LogSubscription (..),
+
+    -- * Order
+    Order (..),
+
+    -- * OrderedBy
+    OrderedBy (..),
+
+    -- * OutputFormat
+    OutputFormat (..),
+
+    -- * ParameterType
+    ParameterType (..),
+
+    -- * SampleMode
+    SampleMode (..),
+
+    -- * SampleType
+    SampleType (..),
+
+    -- * SessionStatus
+    SessionStatus (..),
+
+    -- * Source
+    Source (..),
+
+    -- * ThresholdType
+    ThresholdType (..),
+
+    -- * ThresholdUnit
+    ThresholdUnit (..),
+
+    -- * ValidationMode
+    ValidationMode (..),
+
+    -- * AllowedStatistics
+    AllowedStatistics (..),
+    newAllowedStatistics,
+    allowedStatistics_statistics,
+
+    -- * ColumnSelector
+    ColumnSelector (..),
+    newColumnSelector,
+    columnSelector_name,
+    columnSelector_regex,
+
+    -- * ColumnStatisticsConfiguration
+    ColumnStatisticsConfiguration (..),
+    newColumnStatisticsConfiguration,
+    columnStatisticsConfiguration_selectors,
+    columnStatisticsConfiguration_statistics,
+
+    -- * ConditionExpression
+    ConditionExpression (..),
+    newConditionExpression,
+    conditionExpression_value,
+    conditionExpression_condition,
+    conditionExpression_targetColumn,
+
+    -- * CsvOptions
+    CsvOptions (..),
+    newCsvOptions,
+    csvOptions_delimiter,
+    csvOptions_headerRow,
+
+    -- * CsvOutputOptions
+    CsvOutputOptions (..),
+    newCsvOutputOptions,
+    csvOutputOptions_delimiter,
+
+    -- * DataCatalogInputDefinition
+    DataCatalogInputDefinition (..),
+    newDataCatalogInputDefinition,
+    dataCatalogInputDefinition_catalogId,
+    dataCatalogInputDefinition_tempDirectory,
+    dataCatalogInputDefinition_databaseName,
+    dataCatalogInputDefinition_tableName,
+
+    -- * DataCatalogOutput
+    DataCatalogOutput (..),
+    newDataCatalogOutput,
+    dataCatalogOutput_catalogId,
+    dataCatalogOutput_databaseOptions,
+    dataCatalogOutput_overwrite,
+    dataCatalogOutput_s3Options,
+    dataCatalogOutput_databaseName,
+    dataCatalogOutput_tableName,
+
+    -- * DatabaseInputDefinition
+    DatabaseInputDefinition (..),
+    newDatabaseInputDefinition,
+    databaseInputDefinition_databaseTableName,
+    databaseInputDefinition_queryString,
+    databaseInputDefinition_tempDirectory,
+    databaseInputDefinition_glueConnectionName,
+
+    -- * DatabaseOutput
+    DatabaseOutput (..),
+    newDatabaseOutput,
+    databaseOutput_databaseOutputMode,
+    databaseOutput_glueConnectionName,
+    databaseOutput_databaseOptions,
+
+    -- * DatabaseTableOutputOptions
+    DatabaseTableOutputOptions (..),
+    newDatabaseTableOutputOptions,
+    databaseTableOutputOptions_tempDirectory,
+    databaseTableOutputOptions_tableName,
+
+    -- * Dataset
+    Dataset (..),
+    newDataset,
+    dataset_accountId,
+    dataset_createDate,
+    dataset_createdBy,
+    dataset_format,
+    dataset_formatOptions,
+    dataset_lastModifiedBy,
+    dataset_lastModifiedDate,
+    dataset_pathOptions,
+    dataset_resourceArn,
+    dataset_source,
+    dataset_tags,
+    dataset_name,
+    dataset_input,
+
+    -- * DatasetParameter
+    DatasetParameter (..),
+    newDatasetParameter,
+    datasetParameter_createColumn,
+    datasetParameter_datetimeOptions,
+    datasetParameter_filter,
+    datasetParameter_name,
+    datasetParameter_type,
+
+    -- * DatetimeOptions
+    DatetimeOptions (..),
+    newDatetimeOptions,
+    datetimeOptions_localeCode,
+    datetimeOptions_timezoneOffset,
+    datetimeOptions_format,
+
+    -- * EntityDetectorConfiguration
+    EntityDetectorConfiguration (..),
+    newEntityDetectorConfiguration,
+    entityDetectorConfiguration_allowedStatistics,
+    entityDetectorConfiguration_entityTypes,
+
+    -- * ExcelOptions
+    ExcelOptions (..),
+    newExcelOptions,
+    excelOptions_headerRow,
+    excelOptions_sheetIndexes,
+    excelOptions_sheetNames,
+
+    -- * FilesLimit
+    FilesLimit (..),
+    newFilesLimit,
+    filesLimit_order,
+    filesLimit_orderedBy,
+    filesLimit_maxFiles,
+
+    -- * FilterExpression
+    FilterExpression (..),
+    newFilterExpression,
+    filterExpression_expression,
+    filterExpression_valuesMap,
+
+    -- * FormatOptions
+    FormatOptions (..),
+    newFormatOptions,
+    formatOptions_csv,
+    formatOptions_excel,
+    formatOptions_json,
+
+    -- * Input
+    Input (..),
+    newInput,
+    input_dataCatalogInputDefinition,
+    input_databaseInputDefinition,
+    input_metadata,
+    input_s3InputDefinition,
+
+    -- * Job
+    Job (..),
+    newJob,
+    job_accountId,
+    job_createDate,
+    job_createdBy,
+    job_dataCatalogOutputs,
+    job_databaseOutputs,
+    job_datasetName,
+    job_encryptionKeyArn,
+    job_encryptionMode,
+    job_jobSample,
+    job_lastModifiedBy,
+    job_lastModifiedDate,
+    job_logSubscription,
+    job_maxCapacity,
+    job_maxRetries,
+    job_outputs,
+    job_projectName,
+    job_recipeReference,
+    job_resourceArn,
+    job_roleArn,
+    job_tags,
+    job_timeout,
+    job_type,
+    job_validationConfigurations,
+    job_name,
+
+    -- * JobRun
+    JobRun (..),
+    newJobRun,
+    jobRun_attempt,
+    jobRun_completedOn,
+    jobRun_dataCatalogOutputs,
+    jobRun_databaseOutputs,
+    jobRun_datasetName,
+    jobRun_errorMessage,
+    jobRun_executionTime,
+    jobRun_jobName,
+    jobRun_jobSample,
+    jobRun_logGroupName,
+    jobRun_logSubscription,
+    jobRun_outputs,
+    jobRun_recipeReference,
+    jobRun_runId,
+    jobRun_startedBy,
+    jobRun_startedOn,
+    jobRun_state,
+    jobRun_validationConfigurations,
+
+    -- * JobSample
+    JobSample (..),
+    newJobSample,
+    jobSample_mode,
+    jobSample_size,
+
+    -- * JsonOptions
+    JsonOptions (..),
+    newJsonOptions,
+    jsonOptions_multiLine,
+
+    -- * Metadata
+    Metadata (..),
+    newMetadata,
+    metadata_sourceArn,
+
+    -- * Output
+    Output (..),
+    newOutput,
+    output_compressionFormat,
+    output_format,
+    output_formatOptions,
+    output_maxOutputFiles,
+    output_overwrite,
+    output_partitionColumns,
+    output_location,
+
+    -- * OutputFormatOptions
+    OutputFormatOptions (..),
+    newOutputFormatOptions,
+    outputFormatOptions_csv,
+
+    -- * PathOptions
+    PathOptions (..),
+    newPathOptions,
+    pathOptions_filesLimit,
+    pathOptions_lastModifiedDateCondition,
+    pathOptions_parameters,
+
+    -- * ProfileConfiguration
+    ProfileConfiguration (..),
+    newProfileConfiguration,
+    profileConfiguration_columnStatisticsConfigurations,
+    profileConfiguration_datasetStatisticsConfiguration,
+    profileConfiguration_entityDetectorConfiguration,
+    profileConfiguration_profileColumns,
+
+    -- * Project
+    Project (..),
+    newProject,
+    project_accountId,
+    project_createDate,
+    project_createdBy,
+    project_datasetName,
+    project_lastModifiedBy,
+    project_lastModifiedDate,
+    project_openDate,
+    project_openedBy,
+    project_resourceArn,
+    project_roleArn,
+    project_sample,
+    project_tags,
+    project_name,
+    project_recipeName,
+
+    -- * Recipe
+    Recipe (..),
+    newRecipe,
+    recipe_createDate,
+    recipe_createdBy,
+    recipe_description,
+    recipe_lastModifiedBy,
+    recipe_lastModifiedDate,
+    recipe_projectName,
+    recipe_publishedBy,
+    recipe_publishedDate,
+    recipe_recipeVersion,
+    recipe_resourceArn,
+    recipe_steps,
+    recipe_tags,
+    recipe_name,
+
+    -- * RecipeAction
+    RecipeAction (..),
+    newRecipeAction,
+    recipeAction_parameters,
+    recipeAction_operation,
+
+    -- * RecipeReference
+    RecipeReference (..),
+    newRecipeReference,
+    recipeReference_recipeVersion,
+    recipeReference_name,
+
+    -- * RecipeStep
+    RecipeStep (..),
+    newRecipeStep,
+    recipeStep_conditionExpressions,
+    recipeStep_action,
+
+    -- * RecipeVersionErrorDetail
+    RecipeVersionErrorDetail (..),
+    newRecipeVersionErrorDetail,
+    recipeVersionErrorDetail_errorCode,
+    recipeVersionErrorDetail_errorMessage,
+    recipeVersionErrorDetail_recipeVersion,
+
+    -- * Rule
+    Rule (..),
+    newRule,
+    rule_columnSelectors,
+    rule_disabled,
+    rule_substitutionMap,
+    rule_threshold,
+    rule_name,
+    rule_checkExpression,
+
+    -- * RulesetItem
+    RulesetItem (..),
+    newRulesetItem,
+    rulesetItem_accountId,
+    rulesetItem_createDate,
+    rulesetItem_createdBy,
+    rulesetItem_description,
+    rulesetItem_lastModifiedBy,
+    rulesetItem_lastModifiedDate,
+    rulesetItem_resourceArn,
+    rulesetItem_ruleCount,
+    rulesetItem_tags,
+    rulesetItem_name,
+    rulesetItem_targetArn,
+
+    -- * S3Location
+    S3Location (..),
+    newS3Location,
+    s3Location_bucketOwner,
+    s3Location_key,
+    s3Location_bucket,
+
+    -- * S3TableOutputOptions
+    S3TableOutputOptions (..),
+    newS3TableOutputOptions,
+    s3TableOutputOptions_location,
+
+    -- * Sample
+    Sample (..),
+    newSample,
+    sample_size,
+    sample_type,
+
+    -- * Schedule
+    Schedule (..),
+    newSchedule,
+    schedule_accountId,
+    schedule_createDate,
+    schedule_createdBy,
+    schedule_cronExpression,
+    schedule_jobNames,
+    schedule_lastModifiedBy,
+    schedule_lastModifiedDate,
+    schedule_resourceArn,
+    schedule_tags,
+    schedule_name,
+
+    -- * StatisticOverride
+    StatisticOverride (..),
+    newStatisticOverride,
+    statisticOverride_statistic,
+    statisticOverride_parameters,
+
+    -- * StatisticsConfiguration
+    StatisticsConfiguration (..),
+    newStatisticsConfiguration,
+    statisticsConfiguration_includedStatistics,
+    statisticsConfiguration_overrides,
+
+    -- * Threshold
+    Threshold (..),
+    newThreshold,
+    threshold_type,
+    threshold_unit,
+    threshold_value,
+
+    -- * ValidationConfiguration
+    ValidationConfiguration (..),
+    newValidationConfiguration,
+    validationConfiguration_validationMode,
+    validationConfiguration_rulesetArn,
+
+    -- * ViewFrame
+    ViewFrame (..),
+    newViewFrame,
+    viewFrame_analytics,
+    viewFrame_columnRange,
+    viewFrame_hiddenColumns,
+    viewFrame_rowRange,
+    viewFrame_startRowIndex,
+    viewFrame_startColumnIndex,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.DataBrew.Types.AllowedStatistics
+import Amazonka.DataBrew.Types.AnalyticsMode
+import Amazonka.DataBrew.Types.ColumnSelector
+import Amazonka.DataBrew.Types.ColumnStatisticsConfiguration
+import Amazonka.DataBrew.Types.CompressionFormat
+import Amazonka.DataBrew.Types.ConditionExpression
+import Amazonka.DataBrew.Types.CsvOptions
+import Amazonka.DataBrew.Types.CsvOutputOptions
+import Amazonka.DataBrew.Types.DataCatalogInputDefinition
+import Amazonka.DataBrew.Types.DataCatalogOutput
+import Amazonka.DataBrew.Types.DatabaseInputDefinition
+import Amazonka.DataBrew.Types.DatabaseOutput
+import Amazonka.DataBrew.Types.DatabaseOutputMode
+import Amazonka.DataBrew.Types.DatabaseTableOutputOptions
+import Amazonka.DataBrew.Types.Dataset
+import Amazonka.DataBrew.Types.DatasetParameter
+import Amazonka.DataBrew.Types.DatetimeOptions
+import Amazonka.DataBrew.Types.EncryptionMode
+import Amazonka.DataBrew.Types.EntityDetectorConfiguration
+import Amazonka.DataBrew.Types.ExcelOptions
+import Amazonka.DataBrew.Types.FilesLimit
+import Amazonka.DataBrew.Types.FilterExpression
+import Amazonka.DataBrew.Types.FormatOptions
+import Amazonka.DataBrew.Types.Input
+import Amazonka.DataBrew.Types.InputFormat
+import Amazonka.DataBrew.Types.Job
+import Amazonka.DataBrew.Types.JobRun
+import Amazonka.DataBrew.Types.JobRunState
+import Amazonka.DataBrew.Types.JobSample
+import Amazonka.DataBrew.Types.JobType
+import Amazonka.DataBrew.Types.JsonOptions
+import Amazonka.DataBrew.Types.LogSubscription
+import Amazonka.DataBrew.Types.Metadata
+import Amazonka.DataBrew.Types.Order
+import Amazonka.DataBrew.Types.OrderedBy
+import Amazonka.DataBrew.Types.Output
+import Amazonka.DataBrew.Types.OutputFormat
+import Amazonka.DataBrew.Types.OutputFormatOptions
+import Amazonka.DataBrew.Types.ParameterType
+import Amazonka.DataBrew.Types.PathOptions
+import Amazonka.DataBrew.Types.ProfileConfiguration
+import Amazonka.DataBrew.Types.Project
+import Amazonka.DataBrew.Types.Recipe
+import Amazonka.DataBrew.Types.RecipeAction
+import Amazonka.DataBrew.Types.RecipeReference
+import Amazonka.DataBrew.Types.RecipeStep
+import Amazonka.DataBrew.Types.RecipeVersionErrorDetail
+import Amazonka.DataBrew.Types.Rule
+import Amazonka.DataBrew.Types.RulesetItem
+import Amazonka.DataBrew.Types.S3Location
+import Amazonka.DataBrew.Types.S3TableOutputOptions
+import Amazonka.DataBrew.Types.Sample
+import Amazonka.DataBrew.Types.SampleMode
+import Amazonka.DataBrew.Types.SampleType
+import Amazonka.DataBrew.Types.Schedule
+import Amazonka.DataBrew.Types.SessionStatus
+import Amazonka.DataBrew.Types.Source
+import Amazonka.DataBrew.Types.StatisticOverride
+import Amazonka.DataBrew.Types.StatisticsConfiguration
+import Amazonka.DataBrew.Types.Threshold
+import Amazonka.DataBrew.Types.ThresholdType
+import Amazonka.DataBrew.Types.ThresholdUnit
+import Amazonka.DataBrew.Types.ValidationConfiguration
+import Amazonka.DataBrew.Types.ValidationMode
+import Amazonka.DataBrew.Types.ViewFrame
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-07-25@ of the Amazon Glue DataBrew SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "DataBrew",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "databrew",
+      Core.signingName = "databrew",
+      Core.version = "2017-07-25",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "DataBrew",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | Access to the specified resource was denied.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Updating or deleting a resource can cause an inconsistent state.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An internal service failure occurred.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | One or more resources can\'t be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | A service quota is exceeded.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The input parameters for this request failed validation.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/DataBrew/Types/AllowedStatistics.hs b/gen/Amazonka/DataBrew/Types/AllowedStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/AllowedStatistics.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.AllowedStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.AllowedStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of statistics that are allowed to be run on columns that
+-- contain detected entities. When undefined, no statistics will be
+-- computed on columns that contain detected entities.
+--
+-- /See:/ 'newAllowedStatistics' smart constructor.
+data AllowedStatistics = AllowedStatistics'
+  { -- | One or more column statistics to allow for columns that contain detected
+    -- entities.
+    statistics :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowedStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statistics', 'allowedStatistics_statistics' - One or more column statistics to allow for columns that contain detected
+-- entities.
+newAllowedStatistics ::
+  -- | 'statistics'
+  Prelude.NonEmpty Prelude.Text ->
+  AllowedStatistics
+newAllowedStatistics pStatistics_ =
+  AllowedStatistics'
+    { statistics =
+        Lens.coerced Lens.# pStatistics_
+    }
+
+-- | One or more column statistics to allow for columns that contain detected
+-- entities.
+allowedStatistics_statistics :: Lens.Lens' AllowedStatistics (Prelude.NonEmpty Prelude.Text)
+allowedStatistics_statistics = Lens.lens (\AllowedStatistics' {statistics} -> statistics) (\s@AllowedStatistics' {} a -> s {statistics = a} :: AllowedStatistics) Prelude.. Lens.coerced
+
+instance Data.FromJSON AllowedStatistics where
+  parseJSON =
+    Data.withObject
+      "AllowedStatistics"
+      ( \x ->
+          AllowedStatistics'
+            Prelude.<$> (x Data..: "Statistics")
+      )
+
+instance Prelude.Hashable AllowedStatistics where
+  hashWithSalt _salt AllowedStatistics' {..} =
+    _salt `Prelude.hashWithSalt` statistics
+
+instance Prelude.NFData AllowedStatistics where
+  rnf AllowedStatistics' {..} = Prelude.rnf statistics
+
+instance Data.ToJSON AllowedStatistics where
+  toJSON AllowedStatistics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Statistics" Data..= statistics)]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/AnalyticsMode.hs b/gen/Amazonka/DataBrew/Types/AnalyticsMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/AnalyticsMode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.AnalyticsMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.AnalyticsMode
+  ( AnalyticsMode
+      ( ..,
+        AnalyticsMode_DISABLE,
+        AnalyticsMode_ENABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnalyticsMode = AnalyticsMode'
+  { fromAnalyticsMode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AnalyticsMode_DISABLE :: AnalyticsMode
+pattern AnalyticsMode_DISABLE = AnalyticsMode' "DISABLE"
+
+pattern AnalyticsMode_ENABLE :: AnalyticsMode
+pattern AnalyticsMode_ENABLE = AnalyticsMode' "ENABLE"
+
+{-# COMPLETE
+  AnalyticsMode_DISABLE,
+  AnalyticsMode_ENABLE,
+  AnalyticsMode'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/ColumnSelector.hs b/gen/Amazonka/DataBrew/Types/ColumnSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ColumnSelector.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ColumnSelector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ColumnSelector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Selector of a column from a dataset for profile job configuration. One
+-- selector includes either a column name or a regular expression.
+--
+-- /See:/ 'newColumnSelector' smart constructor.
+data ColumnSelector = ColumnSelector'
+  { -- | The name of a column from a dataset.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A regular expression for selecting a column from a dataset.
+    regex :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ColumnSelector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'columnSelector_name' - The name of a column from a dataset.
+--
+-- 'regex', 'columnSelector_regex' - A regular expression for selecting a column from a dataset.
+newColumnSelector ::
+  ColumnSelector
+newColumnSelector =
+  ColumnSelector'
+    { name = Prelude.Nothing,
+      regex = Prelude.Nothing
+    }
+
+-- | The name of a column from a dataset.
+columnSelector_name :: Lens.Lens' ColumnSelector (Prelude.Maybe Prelude.Text)
+columnSelector_name = Lens.lens (\ColumnSelector' {name} -> name) (\s@ColumnSelector' {} a -> s {name = a} :: ColumnSelector)
+
+-- | A regular expression for selecting a column from a dataset.
+columnSelector_regex :: Lens.Lens' ColumnSelector (Prelude.Maybe Prelude.Text)
+columnSelector_regex = Lens.lens (\ColumnSelector' {regex} -> regex) (\s@ColumnSelector' {} a -> s {regex = a} :: ColumnSelector)
+
+instance Data.FromJSON ColumnSelector where
+  parseJSON =
+    Data.withObject
+      "ColumnSelector"
+      ( \x ->
+          ColumnSelector'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Regex")
+      )
+
+instance Prelude.Hashable ColumnSelector where
+  hashWithSalt _salt ColumnSelector' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` regex
+
+instance Prelude.NFData ColumnSelector where
+  rnf ColumnSelector' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf regex
+
+instance Data.ToJSON ColumnSelector where
+  toJSON ColumnSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Name" Data..=) Prelude.<$> name,
+            ("Regex" Data..=) Prelude.<$> regex
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/ColumnStatisticsConfiguration.hs b/gen/Amazonka/DataBrew/Types/ColumnStatisticsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ColumnStatisticsConfiguration.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ColumnStatisticsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ColumnStatisticsConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.ColumnSelector
+import Amazonka.DataBrew.Types.StatisticsConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration for column evaluations for a profile job.
+-- ColumnStatisticsConfiguration can be used to select evaluations and
+-- override parameters of evaluations for particular columns.
+--
+-- /See:/ 'newColumnStatisticsConfiguration' smart constructor.
+data ColumnStatisticsConfiguration = ColumnStatisticsConfiguration'
+  { -- | List of column selectors. Selectors can be used to select columns from
+    -- the dataset. When selectors are undefined, configuration will be applied
+    -- to all supported columns.
+    selectors :: Prelude.Maybe (Prelude.NonEmpty ColumnSelector),
+    -- | Configuration for evaluations. Statistics can be used to select
+    -- evaluations and override parameters of evaluations.
+    statistics :: StatisticsConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ColumnStatisticsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'selectors', 'columnStatisticsConfiguration_selectors' - List of column selectors. Selectors can be used to select columns from
+-- the dataset. When selectors are undefined, configuration will be applied
+-- to all supported columns.
+--
+-- 'statistics', 'columnStatisticsConfiguration_statistics' - Configuration for evaluations. Statistics can be used to select
+-- evaluations and override parameters of evaluations.
+newColumnStatisticsConfiguration ::
+  -- | 'statistics'
+  StatisticsConfiguration ->
+  ColumnStatisticsConfiguration
+newColumnStatisticsConfiguration pStatistics_ =
+  ColumnStatisticsConfiguration'
+    { selectors =
+        Prelude.Nothing,
+      statistics = pStatistics_
+    }
+
+-- | List of column selectors. Selectors can be used to select columns from
+-- the dataset. When selectors are undefined, configuration will be applied
+-- to all supported columns.
+columnStatisticsConfiguration_selectors :: Lens.Lens' ColumnStatisticsConfiguration (Prelude.Maybe (Prelude.NonEmpty ColumnSelector))
+columnStatisticsConfiguration_selectors = Lens.lens (\ColumnStatisticsConfiguration' {selectors} -> selectors) (\s@ColumnStatisticsConfiguration' {} a -> s {selectors = a} :: ColumnStatisticsConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration for evaluations. Statistics can be used to select
+-- evaluations and override parameters of evaluations.
+columnStatisticsConfiguration_statistics :: Lens.Lens' ColumnStatisticsConfiguration StatisticsConfiguration
+columnStatisticsConfiguration_statistics = Lens.lens (\ColumnStatisticsConfiguration' {statistics} -> statistics) (\s@ColumnStatisticsConfiguration' {} a -> s {statistics = a} :: ColumnStatisticsConfiguration)
+
+instance Data.FromJSON ColumnStatisticsConfiguration where
+  parseJSON =
+    Data.withObject
+      "ColumnStatisticsConfiguration"
+      ( \x ->
+          ColumnStatisticsConfiguration'
+            Prelude.<$> (x Data..:? "Selectors")
+            Prelude.<*> (x Data..: "Statistics")
+      )
+
+instance
+  Prelude.Hashable
+    ColumnStatisticsConfiguration
+  where
+  hashWithSalt _salt ColumnStatisticsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` selectors
+      `Prelude.hashWithSalt` statistics
+
+instance Prelude.NFData ColumnStatisticsConfiguration where
+  rnf ColumnStatisticsConfiguration' {..} =
+    Prelude.rnf selectors
+      `Prelude.seq` Prelude.rnf statistics
+
+instance Data.ToJSON ColumnStatisticsConfiguration where
+  toJSON ColumnStatisticsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Selectors" Data..=) Prelude.<$> selectors,
+            Prelude.Just ("Statistics" Data..= statistics)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/CompressionFormat.hs b/gen/Amazonka/DataBrew/Types/CompressionFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/CompressionFormat.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.CompressionFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.CompressionFormat
+  ( CompressionFormat
+      ( ..,
+        CompressionFormat_BROTLI,
+        CompressionFormat_BZIP2,
+        CompressionFormat_DEFLATE,
+        CompressionFormat_GZIP,
+        CompressionFormat_LZ4,
+        CompressionFormat_LZO,
+        CompressionFormat_SNAPPY,
+        CompressionFormat_ZLIB,
+        CompressionFormat_ZSTD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CompressionFormat = CompressionFormat'
+  { fromCompressionFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CompressionFormat_BROTLI :: CompressionFormat
+pattern CompressionFormat_BROTLI = CompressionFormat' "BROTLI"
+
+pattern CompressionFormat_BZIP2 :: CompressionFormat
+pattern CompressionFormat_BZIP2 = CompressionFormat' "BZIP2"
+
+pattern CompressionFormat_DEFLATE :: CompressionFormat
+pattern CompressionFormat_DEFLATE = CompressionFormat' "DEFLATE"
+
+pattern CompressionFormat_GZIP :: CompressionFormat
+pattern CompressionFormat_GZIP = CompressionFormat' "GZIP"
+
+pattern CompressionFormat_LZ4 :: CompressionFormat
+pattern CompressionFormat_LZ4 = CompressionFormat' "LZ4"
+
+pattern CompressionFormat_LZO :: CompressionFormat
+pattern CompressionFormat_LZO = CompressionFormat' "LZO"
+
+pattern CompressionFormat_SNAPPY :: CompressionFormat
+pattern CompressionFormat_SNAPPY = CompressionFormat' "SNAPPY"
+
+pattern CompressionFormat_ZLIB :: CompressionFormat
+pattern CompressionFormat_ZLIB = CompressionFormat' "ZLIB"
+
+pattern CompressionFormat_ZSTD :: CompressionFormat
+pattern CompressionFormat_ZSTD = CompressionFormat' "ZSTD"
+
+{-# COMPLETE
+  CompressionFormat_BROTLI,
+  CompressionFormat_BZIP2,
+  CompressionFormat_DEFLATE,
+  CompressionFormat_GZIP,
+  CompressionFormat_LZ4,
+  CompressionFormat_LZO,
+  CompressionFormat_SNAPPY,
+  CompressionFormat_ZLIB,
+  CompressionFormat_ZSTD,
+  CompressionFormat'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/ConditionExpression.hs b/gen/Amazonka/DataBrew/Types/ConditionExpression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ConditionExpression.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ConditionExpression
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ConditionExpression where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an individual condition that evaluates to true or false.
+--
+-- Conditions are used with recipe actions. The action is only performed
+-- for column values where the condition evaluates to true.
+--
+-- If a recipe requires more than one condition, then the recipe must
+-- specify multiple @ConditionExpression@ elements. Each condition is
+-- applied to the rows in a dataset first, before the recipe action is
+-- performed.
+--
+-- /See:/ 'newConditionExpression' smart constructor.
+data ConditionExpression = ConditionExpression'
+  { -- | A value that the condition must evaluate to for the condition to
+    -- succeed.
+    value :: Prelude.Maybe Prelude.Text,
+    -- | A specific condition to apply to a recipe action. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/recipes.html#recipes.structure Recipe structure>
+    -- in the /Glue DataBrew Developer Guide/.
+    condition :: Prelude.Text,
+    -- | A column to apply this condition to.
+    targetColumn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConditionExpression' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'conditionExpression_value' - A value that the condition must evaluate to for the condition to
+-- succeed.
+--
+-- 'condition', 'conditionExpression_condition' - A specific condition to apply to a recipe action. For more information,
+-- see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/recipes.html#recipes.structure Recipe structure>
+-- in the /Glue DataBrew Developer Guide/.
+--
+-- 'targetColumn', 'conditionExpression_targetColumn' - A column to apply this condition to.
+newConditionExpression ::
+  -- | 'condition'
+  Prelude.Text ->
+  -- | 'targetColumn'
+  Prelude.Text ->
+  ConditionExpression
+newConditionExpression pCondition_ pTargetColumn_ =
+  ConditionExpression'
+    { value = Prelude.Nothing,
+      condition = pCondition_,
+      targetColumn = pTargetColumn_
+    }
+
+-- | A value that the condition must evaluate to for the condition to
+-- succeed.
+conditionExpression_value :: Lens.Lens' ConditionExpression (Prelude.Maybe Prelude.Text)
+conditionExpression_value = Lens.lens (\ConditionExpression' {value} -> value) (\s@ConditionExpression' {} a -> s {value = a} :: ConditionExpression)
+
+-- | A specific condition to apply to a recipe action. For more information,
+-- see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/recipes.html#recipes.structure Recipe structure>
+-- in the /Glue DataBrew Developer Guide/.
+conditionExpression_condition :: Lens.Lens' ConditionExpression Prelude.Text
+conditionExpression_condition = Lens.lens (\ConditionExpression' {condition} -> condition) (\s@ConditionExpression' {} a -> s {condition = a} :: ConditionExpression)
+
+-- | A column to apply this condition to.
+conditionExpression_targetColumn :: Lens.Lens' ConditionExpression Prelude.Text
+conditionExpression_targetColumn = Lens.lens (\ConditionExpression' {targetColumn} -> targetColumn) (\s@ConditionExpression' {} a -> s {targetColumn = a} :: ConditionExpression)
+
+instance Data.FromJSON ConditionExpression where
+  parseJSON =
+    Data.withObject
+      "ConditionExpression"
+      ( \x ->
+          ConditionExpression'
+            Prelude.<$> (x Data..:? "Value")
+            Prelude.<*> (x Data..: "Condition")
+            Prelude.<*> (x Data..: "TargetColumn")
+      )
+
+instance Prelude.Hashable ConditionExpression where
+  hashWithSalt _salt ConditionExpression' {..} =
+    _salt
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` targetColumn
+
+instance Prelude.NFData ConditionExpression where
+  rnf ConditionExpression' {..} =
+    Prelude.rnf value
+      `Prelude.seq` Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf targetColumn
+
+instance Data.ToJSON ConditionExpression where
+  toJSON ConditionExpression' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Value" Data..=) Prelude.<$> value,
+            Prelude.Just ("Condition" Data..= condition),
+            Prelude.Just ("TargetColumn" Data..= targetColumn)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/CsvOptions.hs b/gen/Amazonka/DataBrew/Types/CsvOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/CsvOptions.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.CsvOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.CsvOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a set of options that define how DataBrew will read a
+-- comma-separated value (CSV) file when creating a dataset from that file.
+--
+-- /See:/ 'newCsvOptions' smart constructor.
+data CsvOptions = CsvOptions'
+  { -- | A single character that specifies the delimiter being used in the CSV
+    -- file.
+    delimiter :: Prelude.Maybe Prelude.Text,
+    -- | A variable that specifies whether the first row in the file is parsed as
+    -- the header. If this value is false, column names are auto-generated.
+    headerRow :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CsvOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'delimiter', 'csvOptions_delimiter' - A single character that specifies the delimiter being used in the CSV
+-- file.
+--
+-- 'headerRow', 'csvOptions_headerRow' - A variable that specifies whether the first row in the file is parsed as
+-- the header. If this value is false, column names are auto-generated.
+newCsvOptions ::
+  CsvOptions
+newCsvOptions =
+  CsvOptions'
+    { delimiter = Prelude.Nothing,
+      headerRow = Prelude.Nothing
+    }
+
+-- | A single character that specifies the delimiter being used in the CSV
+-- file.
+csvOptions_delimiter :: Lens.Lens' CsvOptions (Prelude.Maybe Prelude.Text)
+csvOptions_delimiter = Lens.lens (\CsvOptions' {delimiter} -> delimiter) (\s@CsvOptions' {} a -> s {delimiter = a} :: CsvOptions)
+
+-- | A variable that specifies whether the first row in the file is parsed as
+-- the header. If this value is false, column names are auto-generated.
+csvOptions_headerRow :: Lens.Lens' CsvOptions (Prelude.Maybe Prelude.Bool)
+csvOptions_headerRow = Lens.lens (\CsvOptions' {headerRow} -> headerRow) (\s@CsvOptions' {} a -> s {headerRow = a} :: CsvOptions)
+
+instance Data.FromJSON CsvOptions where
+  parseJSON =
+    Data.withObject
+      "CsvOptions"
+      ( \x ->
+          CsvOptions'
+            Prelude.<$> (x Data..:? "Delimiter")
+            Prelude.<*> (x Data..:? "HeaderRow")
+      )
+
+instance Prelude.Hashable CsvOptions where
+  hashWithSalt _salt CsvOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` delimiter
+      `Prelude.hashWithSalt` headerRow
+
+instance Prelude.NFData CsvOptions where
+  rnf CsvOptions' {..} =
+    Prelude.rnf delimiter
+      `Prelude.seq` Prelude.rnf headerRow
+
+instance Data.ToJSON CsvOptions where
+  toJSON CsvOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Delimiter" Data..=) Prelude.<$> delimiter,
+            ("HeaderRow" Data..=) Prelude.<$> headerRow
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/CsvOutputOptions.hs b/gen/Amazonka/DataBrew/Types/CsvOutputOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/CsvOutputOptions.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.CsvOutputOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.CsvOutputOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a set of options that define how DataBrew will write a
+-- comma-separated value (CSV) file.
+--
+-- /See:/ 'newCsvOutputOptions' smart constructor.
+data CsvOutputOptions = CsvOutputOptions'
+  { -- | A single character that specifies the delimiter used to create CSV job
+    -- output.
+    delimiter :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CsvOutputOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'delimiter', 'csvOutputOptions_delimiter' - A single character that specifies the delimiter used to create CSV job
+-- output.
+newCsvOutputOptions ::
+  CsvOutputOptions
+newCsvOutputOptions =
+  CsvOutputOptions' {delimiter = Prelude.Nothing}
+
+-- | A single character that specifies the delimiter used to create CSV job
+-- output.
+csvOutputOptions_delimiter :: Lens.Lens' CsvOutputOptions (Prelude.Maybe Prelude.Text)
+csvOutputOptions_delimiter = Lens.lens (\CsvOutputOptions' {delimiter} -> delimiter) (\s@CsvOutputOptions' {} a -> s {delimiter = a} :: CsvOutputOptions)
+
+instance Data.FromJSON CsvOutputOptions where
+  parseJSON =
+    Data.withObject
+      "CsvOutputOptions"
+      ( \x ->
+          CsvOutputOptions'
+            Prelude.<$> (x Data..:? "Delimiter")
+      )
+
+instance Prelude.Hashable CsvOutputOptions where
+  hashWithSalt _salt CsvOutputOptions' {..} =
+    _salt `Prelude.hashWithSalt` delimiter
+
+instance Prelude.NFData CsvOutputOptions where
+  rnf CsvOutputOptions' {..} = Prelude.rnf delimiter
+
+instance Data.ToJSON CsvOutputOptions where
+  toJSON CsvOutputOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Delimiter" Data..=) Prelude.<$> delimiter]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/DataCatalogInputDefinition.hs b/gen/Amazonka/DataBrew/Types/DataCatalogInputDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DataCatalogInputDefinition.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DataCatalogInputDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DataCatalogInputDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents how metadata stored in the Glue Data Catalog is defined in a
+-- DataBrew dataset.
+--
+-- /See:/ 'newDataCatalogInputDefinition' smart constructor.
+data DataCatalogInputDefinition = DataCatalogInputDefinition'
+  { -- | The unique identifier of the Amazon Web Services account that holds the
+    -- Data Catalog that stores the data.
+    catalogId :: Prelude.Maybe Prelude.Text,
+    -- | Represents an Amazon location where DataBrew can store intermediate
+    -- results.
+    tempDirectory :: Prelude.Maybe S3Location,
+    -- | The name of a database in the Data Catalog.
+    databaseName :: Prelude.Text,
+    -- | The name of a database table in the Data Catalog. This table corresponds
+    -- to a DataBrew dataset.
+    tableName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataCatalogInputDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'catalogId', 'dataCatalogInputDefinition_catalogId' - The unique identifier of the Amazon Web Services account that holds the
+-- Data Catalog that stores the data.
+--
+-- 'tempDirectory', 'dataCatalogInputDefinition_tempDirectory' - Represents an Amazon location where DataBrew can store intermediate
+-- results.
+--
+-- 'databaseName', 'dataCatalogInputDefinition_databaseName' - The name of a database in the Data Catalog.
+--
+-- 'tableName', 'dataCatalogInputDefinition_tableName' - The name of a database table in the Data Catalog. This table corresponds
+-- to a DataBrew dataset.
+newDataCatalogInputDefinition ::
+  -- | 'databaseName'
+  Prelude.Text ->
+  -- | 'tableName'
+  Prelude.Text ->
+  DataCatalogInputDefinition
+newDataCatalogInputDefinition
+  pDatabaseName_
+  pTableName_ =
+    DataCatalogInputDefinition'
+      { catalogId =
+          Prelude.Nothing,
+        tempDirectory = Prelude.Nothing,
+        databaseName = pDatabaseName_,
+        tableName = pTableName_
+      }
+
+-- | The unique identifier of the Amazon Web Services account that holds the
+-- Data Catalog that stores the data.
+dataCatalogInputDefinition_catalogId :: Lens.Lens' DataCatalogInputDefinition (Prelude.Maybe Prelude.Text)
+dataCatalogInputDefinition_catalogId = Lens.lens (\DataCatalogInputDefinition' {catalogId} -> catalogId) (\s@DataCatalogInputDefinition' {} a -> s {catalogId = a} :: DataCatalogInputDefinition)
+
+-- | Represents an Amazon location where DataBrew can store intermediate
+-- results.
+dataCatalogInputDefinition_tempDirectory :: Lens.Lens' DataCatalogInputDefinition (Prelude.Maybe S3Location)
+dataCatalogInputDefinition_tempDirectory = Lens.lens (\DataCatalogInputDefinition' {tempDirectory} -> tempDirectory) (\s@DataCatalogInputDefinition' {} a -> s {tempDirectory = a} :: DataCatalogInputDefinition)
+
+-- | The name of a database in the Data Catalog.
+dataCatalogInputDefinition_databaseName :: Lens.Lens' DataCatalogInputDefinition Prelude.Text
+dataCatalogInputDefinition_databaseName = Lens.lens (\DataCatalogInputDefinition' {databaseName} -> databaseName) (\s@DataCatalogInputDefinition' {} a -> s {databaseName = a} :: DataCatalogInputDefinition)
+
+-- | The name of a database table in the Data Catalog. This table corresponds
+-- to a DataBrew dataset.
+dataCatalogInputDefinition_tableName :: Lens.Lens' DataCatalogInputDefinition Prelude.Text
+dataCatalogInputDefinition_tableName = Lens.lens (\DataCatalogInputDefinition' {tableName} -> tableName) (\s@DataCatalogInputDefinition' {} a -> s {tableName = a} :: DataCatalogInputDefinition)
+
+instance Data.FromJSON DataCatalogInputDefinition where
+  parseJSON =
+    Data.withObject
+      "DataCatalogInputDefinition"
+      ( \x ->
+          DataCatalogInputDefinition'
+            Prelude.<$> (x Data..:? "CatalogId")
+            Prelude.<*> (x Data..:? "TempDirectory")
+            Prelude.<*> (x Data..: "DatabaseName")
+            Prelude.<*> (x Data..: "TableName")
+      )
+
+instance Prelude.Hashable DataCatalogInputDefinition where
+  hashWithSalt _salt DataCatalogInputDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` catalogId
+      `Prelude.hashWithSalt` tempDirectory
+      `Prelude.hashWithSalt` databaseName
+      `Prelude.hashWithSalt` tableName
+
+instance Prelude.NFData DataCatalogInputDefinition where
+  rnf DataCatalogInputDefinition' {..} =
+    Prelude.rnf catalogId
+      `Prelude.seq` Prelude.rnf tempDirectory
+      `Prelude.seq` Prelude.rnf databaseName
+      `Prelude.seq` Prelude.rnf tableName
+
+instance Data.ToJSON DataCatalogInputDefinition where
+  toJSON DataCatalogInputDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CatalogId" Data..=) Prelude.<$> catalogId,
+            ("TempDirectory" Data..=) Prelude.<$> tempDirectory,
+            Prelude.Just ("DatabaseName" Data..= databaseName),
+            Prelude.Just ("TableName" Data..= tableName)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/DataCatalogOutput.hs b/gen/Amazonka/DataBrew/Types/DataCatalogOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DataCatalogOutput.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DataCatalogOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DataCatalogOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DatabaseTableOutputOptions
+import Amazonka.DataBrew.Types.S3TableOutputOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents options that specify how and where in the Glue Data Catalog
+-- DataBrew writes the output generated by recipe jobs.
+--
+-- /See:/ 'newDataCatalogOutput' smart constructor.
+data DataCatalogOutput = DataCatalogOutput'
+  { -- | The unique identifier of the Amazon Web Services account that holds the
+    -- Data Catalog that stores the data.
+    catalogId :: Prelude.Maybe Prelude.Text,
+    -- | Represents options that specify how and where DataBrew writes the
+    -- database output generated by recipe jobs.
+    databaseOptions :: Prelude.Maybe DatabaseTableOutputOptions,
+    -- | A value that, if true, means that any data in the location specified for
+    -- output is overwritten with new output. Not supported with
+    -- DatabaseOptions.
+    overwrite :: Prelude.Maybe Prelude.Bool,
+    -- | Represents options that specify how and where DataBrew writes the Amazon
+    -- S3 output generated by recipe jobs.
+    s3Options :: Prelude.Maybe S3TableOutputOptions,
+    -- | The name of a database in the Data Catalog.
+    databaseName :: Prelude.Text,
+    -- | The name of a table in the Data Catalog.
+    tableName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataCatalogOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'catalogId', 'dataCatalogOutput_catalogId' - The unique identifier of the Amazon Web Services account that holds the
+-- Data Catalog that stores the data.
+--
+-- 'databaseOptions', 'dataCatalogOutput_databaseOptions' - Represents options that specify how and where DataBrew writes the
+-- database output generated by recipe jobs.
+--
+-- 'overwrite', 'dataCatalogOutput_overwrite' - A value that, if true, means that any data in the location specified for
+-- output is overwritten with new output. Not supported with
+-- DatabaseOptions.
+--
+-- 's3Options', 'dataCatalogOutput_s3Options' - Represents options that specify how and where DataBrew writes the Amazon
+-- S3 output generated by recipe jobs.
+--
+-- 'databaseName', 'dataCatalogOutput_databaseName' - The name of a database in the Data Catalog.
+--
+-- 'tableName', 'dataCatalogOutput_tableName' - The name of a table in the Data Catalog.
+newDataCatalogOutput ::
+  -- | 'databaseName'
+  Prelude.Text ->
+  -- | 'tableName'
+  Prelude.Text ->
+  DataCatalogOutput
+newDataCatalogOutput pDatabaseName_ pTableName_ =
+  DataCatalogOutput'
+    { catalogId = Prelude.Nothing,
+      databaseOptions = Prelude.Nothing,
+      overwrite = Prelude.Nothing,
+      s3Options = Prelude.Nothing,
+      databaseName = pDatabaseName_,
+      tableName = pTableName_
+    }
+
+-- | The unique identifier of the Amazon Web Services account that holds the
+-- Data Catalog that stores the data.
+dataCatalogOutput_catalogId :: Lens.Lens' DataCatalogOutput (Prelude.Maybe Prelude.Text)
+dataCatalogOutput_catalogId = Lens.lens (\DataCatalogOutput' {catalogId} -> catalogId) (\s@DataCatalogOutput' {} a -> s {catalogId = a} :: DataCatalogOutput)
+
+-- | Represents options that specify how and where DataBrew writes the
+-- database output generated by recipe jobs.
+dataCatalogOutput_databaseOptions :: Lens.Lens' DataCatalogOutput (Prelude.Maybe DatabaseTableOutputOptions)
+dataCatalogOutput_databaseOptions = Lens.lens (\DataCatalogOutput' {databaseOptions} -> databaseOptions) (\s@DataCatalogOutput' {} a -> s {databaseOptions = a} :: DataCatalogOutput)
+
+-- | A value that, if true, means that any data in the location specified for
+-- output is overwritten with new output. Not supported with
+-- DatabaseOptions.
+dataCatalogOutput_overwrite :: Lens.Lens' DataCatalogOutput (Prelude.Maybe Prelude.Bool)
+dataCatalogOutput_overwrite = Lens.lens (\DataCatalogOutput' {overwrite} -> overwrite) (\s@DataCatalogOutput' {} a -> s {overwrite = a} :: DataCatalogOutput)
+
+-- | Represents options that specify how and where DataBrew writes the Amazon
+-- S3 output generated by recipe jobs.
+dataCatalogOutput_s3Options :: Lens.Lens' DataCatalogOutput (Prelude.Maybe S3TableOutputOptions)
+dataCatalogOutput_s3Options = Lens.lens (\DataCatalogOutput' {s3Options} -> s3Options) (\s@DataCatalogOutput' {} a -> s {s3Options = a} :: DataCatalogOutput)
+
+-- | The name of a database in the Data Catalog.
+dataCatalogOutput_databaseName :: Lens.Lens' DataCatalogOutput Prelude.Text
+dataCatalogOutput_databaseName = Lens.lens (\DataCatalogOutput' {databaseName} -> databaseName) (\s@DataCatalogOutput' {} a -> s {databaseName = a} :: DataCatalogOutput)
+
+-- | The name of a table in the Data Catalog.
+dataCatalogOutput_tableName :: Lens.Lens' DataCatalogOutput Prelude.Text
+dataCatalogOutput_tableName = Lens.lens (\DataCatalogOutput' {tableName} -> tableName) (\s@DataCatalogOutput' {} a -> s {tableName = a} :: DataCatalogOutput)
+
+instance Data.FromJSON DataCatalogOutput where
+  parseJSON =
+    Data.withObject
+      "DataCatalogOutput"
+      ( \x ->
+          DataCatalogOutput'
+            Prelude.<$> (x Data..:? "CatalogId")
+            Prelude.<*> (x Data..:? "DatabaseOptions")
+            Prelude.<*> (x Data..:? "Overwrite")
+            Prelude.<*> (x Data..:? "S3Options")
+            Prelude.<*> (x Data..: "DatabaseName")
+            Prelude.<*> (x Data..: "TableName")
+      )
+
+instance Prelude.Hashable DataCatalogOutput where
+  hashWithSalt _salt DataCatalogOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` catalogId
+      `Prelude.hashWithSalt` databaseOptions
+      `Prelude.hashWithSalt` overwrite
+      `Prelude.hashWithSalt` s3Options
+      `Prelude.hashWithSalt` databaseName
+      `Prelude.hashWithSalt` tableName
+
+instance Prelude.NFData DataCatalogOutput where
+  rnf DataCatalogOutput' {..} =
+    Prelude.rnf catalogId
+      `Prelude.seq` Prelude.rnf databaseOptions
+      `Prelude.seq` Prelude.rnf overwrite
+      `Prelude.seq` Prelude.rnf s3Options
+      `Prelude.seq` Prelude.rnf databaseName
+      `Prelude.seq` Prelude.rnf tableName
+
+instance Data.ToJSON DataCatalogOutput where
+  toJSON DataCatalogOutput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CatalogId" Data..=) Prelude.<$> catalogId,
+            ("DatabaseOptions" Data..=)
+              Prelude.<$> databaseOptions,
+            ("Overwrite" Data..=) Prelude.<$> overwrite,
+            ("S3Options" Data..=) Prelude.<$> s3Options,
+            Prelude.Just ("DatabaseName" Data..= databaseName),
+            Prelude.Just ("TableName" Data..= tableName)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/DatabaseInputDefinition.hs b/gen/Amazonka/DataBrew/Types/DatabaseInputDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DatabaseInputDefinition.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DatabaseInputDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DatabaseInputDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Connection information for dataset input files stored in a database.
+--
+-- /See:/ 'newDatabaseInputDefinition' smart constructor.
+data DatabaseInputDefinition = DatabaseInputDefinition'
+  { -- | The table within the target database.
+    databaseTableName :: Prelude.Maybe Prelude.Text,
+    -- | Custom SQL to run against the provided Glue connection. This SQL will be
+    -- used as the input for DataBrew projects and jobs.
+    queryString :: Prelude.Maybe Prelude.Text,
+    tempDirectory :: Prelude.Maybe S3Location,
+    -- | The Glue Connection that stores the connection information for the
+    -- target database.
+    glueConnectionName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatabaseInputDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'databaseTableName', 'databaseInputDefinition_databaseTableName' - The table within the target database.
+--
+-- 'queryString', 'databaseInputDefinition_queryString' - Custom SQL to run against the provided Glue connection. This SQL will be
+-- used as the input for DataBrew projects and jobs.
+--
+-- 'tempDirectory', 'databaseInputDefinition_tempDirectory' - Undocumented member.
+--
+-- 'glueConnectionName', 'databaseInputDefinition_glueConnectionName' - The Glue Connection that stores the connection information for the
+-- target database.
+newDatabaseInputDefinition ::
+  -- | 'glueConnectionName'
+  Prelude.Text ->
+  DatabaseInputDefinition
+newDatabaseInputDefinition pGlueConnectionName_ =
+  DatabaseInputDefinition'
+    { databaseTableName =
+        Prelude.Nothing,
+      queryString = Prelude.Nothing,
+      tempDirectory = Prelude.Nothing,
+      glueConnectionName = pGlueConnectionName_
+    }
+
+-- | The table within the target database.
+databaseInputDefinition_databaseTableName :: Lens.Lens' DatabaseInputDefinition (Prelude.Maybe Prelude.Text)
+databaseInputDefinition_databaseTableName = Lens.lens (\DatabaseInputDefinition' {databaseTableName} -> databaseTableName) (\s@DatabaseInputDefinition' {} a -> s {databaseTableName = a} :: DatabaseInputDefinition)
+
+-- | Custom SQL to run against the provided Glue connection. This SQL will be
+-- used as the input for DataBrew projects and jobs.
+databaseInputDefinition_queryString :: Lens.Lens' DatabaseInputDefinition (Prelude.Maybe Prelude.Text)
+databaseInputDefinition_queryString = Lens.lens (\DatabaseInputDefinition' {queryString} -> queryString) (\s@DatabaseInputDefinition' {} a -> s {queryString = a} :: DatabaseInputDefinition)
+
+-- | Undocumented member.
+databaseInputDefinition_tempDirectory :: Lens.Lens' DatabaseInputDefinition (Prelude.Maybe S3Location)
+databaseInputDefinition_tempDirectory = Lens.lens (\DatabaseInputDefinition' {tempDirectory} -> tempDirectory) (\s@DatabaseInputDefinition' {} a -> s {tempDirectory = a} :: DatabaseInputDefinition)
+
+-- | The Glue Connection that stores the connection information for the
+-- target database.
+databaseInputDefinition_glueConnectionName :: Lens.Lens' DatabaseInputDefinition Prelude.Text
+databaseInputDefinition_glueConnectionName = Lens.lens (\DatabaseInputDefinition' {glueConnectionName} -> glueConnectionName) (\s@DatabaseInputDefinition' {} a -> s {glueConnectionName = a} :: DatabaseInputDefinition)
+
+instance Data.FromJSON DatabaseInputDefinition where
+  parseJSON =
+    Data.withObject
+      "DatabaseInputDefinition"
+      ( \x ->
+          DatabaseInputDefinition'
+            Prelude.<$> (x Data..:? "DatabaseTableName")
+            Prelude.<*> (x Data..:? "QueryString")
+            Prelude.<*> (x Data..:? "TempDirectory")
+            Prelude.<*> (x Data..: "GlueConnectionName")
+      )
+
+instance Prelude.Hashable DatabaseInputDefinition where
+  hashWithSalt _salt DatabaseInputDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` databaseTableName
+      `Prelude.hashWithSalt` queryString
+      `Prelude.hashWithSalt` tempDirectory
+      `Prelude.hashWithSalt` glueConnectionName
+
+instance Prelude.NFData DatabaseInputDefinition where
+  rnf DatabaseInputDefinition' {..} =
+    Prelude.rnf databaseTableName
+      `Prelude.seq` Prelude.rnf queryString
+      `Prelude.seq` Prelude.rnf tempDirectory
+      `Prelude.seq` Prelude.rnf glueConnectionName
+
+instance Data.ToJSON DatabaseInputDefinition where
+  toJSON DatabaseInputDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DatabaseTableName" Data..=)
+              Prelude.<$> databaseTableName,
+            ("QueryString" Data..=) Prelude.<$> queryString,
+            ("TempDirectory" Data..=) Prelude.<$> tempDirectory,
+            Prelude.Just
+              ("GlueConnectionName" Data..= glueConnectionName)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/DatabaseOutput.hs b/gen/Amazonka/DataBrew/Types/DatabaseOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DatabaseOutput.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DatabaseOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DatabaseOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DatabaseOutputMode
+import Amazonka.DataBrew.Types.DatabaseTableOutputOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a JDBC database output object which defines the output
+-- destination for a DataBrew recipe job to write into.
+--
+-- /See:/ 'newDatabaseOutput' smart constructor.
+data DatabaseOutput = DatabaseOutput'
+  { -- | The output mode to write into the database. Currently supported option:
+    -- NEW_TABLE.
+    databaseOutputMode :: Prelude.Maybe DatabaseOutputMode,
+    -- | The Glue connection that stores the connection information for the
+    -- target database.
+    glueConnectionName :: Prelude.Text,
+    -- | Represents options that specify how and where DataBrew writes the
+    -- database output generated by recipe jobs.
+    databaseOptions :: DatabaseTableOutputOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatabaseOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'databaseOutputMode', 'databaseOutput_databaseOutputMode' - The output mode to write into the database. Currently supported option:
+-- NEW_TABLE.
+--
+-- 'glueConnectionName', 'databaseOutput_glueConnectionName' - The Glue connection that stores the connection information for the
+-- target database.
+--
+-- 'databaseOptions', 'databaseOutput_databaseOptions' - Represents options that specify how and where DataBrew writes the
+-- database output generated by recipe jobs.
+newDatabaseOutput ::
+  -- | 'glueConnectionName'
+  Prelude.Text ->
+  -- | 'databaseOptions'
+  DatabaseTableOutputOptions ->
+  DatabaseOutput
+newDatabaseOutput
+  pGlueConnectionName_
+  pDatabaseOptions_ =
+    DatabaseOutput'
+      { databaseOutputMode =
+          Prelude.Nothing,
+        glueConnectionName = pGlueConnectionName_,
+        databaseOptions = pDatabaseOptions_
+      }
+
+-- | The output mode to write into the database. Currently supported option:
+-- NEW_TABLE.
+databaseOutput_databaseOutputMode :: Lens.Lens' DatabaseOutput (Prelude.Maybe DatabaseOutputMode)
+databaseOutput_databaseOutputMode = Lens.lens (\DatabaseOutput' {databaseOutputMode} -> databaseOutputMode) (\s@DatabaseOutput' {} a -> s {databaseOutputMode = a} :: DatabaseOutput)
+
+-- | The Glue connection that stores the connection information for the
+-- target database.
+databaseOutput_glueConnectionName :: Lens.Lens' DatabaseOutput Prelude.Text
+databaseOutput_glueConnectionName = Lens.lens (\DatabaseOutput' {glueConnectionName} -> glueConnectionName) (\s@DatabaseOutput' {} a -> s {glueConnectionName = a} :: DatabaseOutput)
+
+-- | Represents options that specify how and where DataBrew writes the
+-- database output generated by recipe jobs.
+databaseOutput_databaseOptions :: Lens.Lens' DatabaseOutput DatabaseTableOutputOptions
+databaseOutput_databaseOptions = Lens.lens (\DatabaseOutput' {databaseOptions} -> databaseOptions) (\s@DatabaseOutput' {} a -> s {databaseOptions = a} :: DatabaseOutput)
+
+instance Data.FromJSON DatabaseOutput where
+  parseJSON =
+    Data.withObject
+      "DatabaseOutput"
+      ( \x ->
+          DatabaseOutput'
+            Prelude.<$> (x Data..:? "DatabaseOutputMode")
+            Prelude.<*> (x Data..: "GlueConnectionName")
+            Prelude.<*> (x Data..: "DatabaseOptions")
+      )
+
+instance Prelude.Hashable DatabaseOutput where
+  hashWithSalt _salt DatabaseOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` databaseOutputMode
+      `Prelude.hashWithSalt` glueConnectionName
+      `Prelude.hashWithSalt` databaseOptions
+
+instance Prelude.NFData DatabaseOutput where
+  rnf DatabaseOutput' {..} =
+    Prelude.rnf databaseOutputMode
+      `Prelude.seq` Prelude.rnf glueConnectionName
+      `Prelude.seq` Prelude.rnf databaseOptions
+
+instance Data.ToJSON DatabaseOutput where
+  toJSON DatabaseOutput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DatabaseOutputMode" Data..=)
+              Prelude.<$> databaseOutputMode,
+            Prelude.Just
+              ("GlueConnectionName" Data..= glueConnectionName),
+            Prelude.Just
+              ("DatabaseOptions" Data..= databaseOptions)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/DatabaseOutputMode.hs b/gen/Amazonka/DataBrew/Types/DatabaseOutputMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DatabaseOutputMode.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DatabaseOutputMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DatabaseOutputMode
+  ( DatabaseOutputMode
+      ( ..,
+        DatabaseOutputMode_NEW_TABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DatabaseOutputMode = DatabaseOutputMode'
+  { fromDatabaseOutputMode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DatabaseOutputMode_NEW_TABLE :: DatabaseOutputMode
+pattern DatabaseOutputMode_NEW_TABLE = DatabaseOutputMode' "NEW_TABLE"
+
+{-# COMPLETE
+  DatabaseOutputMode_NEW_TABLE,
+  DatabaseOutputMode'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/DatabaseTableOutputOptions.hs b/gen/Amazonka/DataBrew/Types/DatabaseTableOutputOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DatabaseTableOutputOptions.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DatabaseTableOutputOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DatabaseTableOutputOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents options that specify how and where DataBrew writes the
+-- database output generated by recipe jobs.
+--
+-- /See:/ 'newDatabaseTableOutputOptions' smart constructor.
+data DatabaseTableOutputOptions = DatabaseTableOutputOptions'
+  { -- | Represents an Amazon S3 location (bucket name and object key) where
+    -- DataBrew can store intermediate results.
+    tempDirectory :: Prelude.Maybe S3Location,
+    -- | A prefix for the name of a table DataBrew will create in the database.
+    tableName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatabaseTableOutputOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tempDirectory', 'databaseTableOutputOptions_tempDirectory' - Represents an Amazon S3 location (bucket name and object key) where
+-- DataBrew can store intermediate results.
+--
+-- 'tableName', 'databaseTableOutputOptions_tableName' - A prefix for the name of a table DataBrew will create in the database.
+newDatabaseTableOutputOptions ::
+  -- | 'tableName'
+  Prelude.Text ->
+  DatabaseTableOutputOptions
+newDatabaseTableOutputOptions pTableName_ =
+  DatabaseTableOutputOptions'
+    { tempDirectory =
+        Prelude.Nothing,
+      tableName = pTableName_
+    }
+
+-- | Represents an Amazon S3 location (bucket name and object key) where
+-- DataBrew can store intermediate results.
+databaseTableOutputOptions_tempDirectory :: Lens.Lens' DatabaseTableOutputOptions (Prelude.Maybe S3Location)
+databaseTableOutputOptions_tempDirectory = Lens.lens (\DatabaseTableOutputOptions' {tempDirectory} -> tempDirectory) (\s@DatabaseTableOutputOptions' {} a -> s {tempDirectory = a} :: DatabaseTableOutputOptions)
+
+-- | A prefix for the name of a table DataBrew will create in the database.
+databaseTableOutputOptions_tableName :: Lens.Lens' DatabaseTableOutputOptions Prelude.Text
+databaseTableOutputOptions_tableName = Lens.lens (\DatabaseTableOutputOptions' {tableName} -> tableName) (\s@DatabaseTableOutputOptions' {} a -> s {tableName = a} :: DatabaseTableOutputOptions)
+
+instance Data.FromJSON DatabaseTableOutputOptions where
+  parseJSON =
+    Data.withObject
+      "DatabaseTableOutputOptions"
+      ( \x ->
+          DatabaseTableOutputOptions'
+            Prelude.<$> (x Data..:? "TempDirectory")
+            Prelude.<*> (x Data..: "TableName")
+      )
+
+instance Prelude.Hashable DatabaseTableOutputOptions where
+  hashWithSalt _salt DatabaseTableOutputOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` tempDirectory
+      `Prelude.hashWithSalt` tableName
+
+instance Prelude.NFData DatabaseTableOutputOptions where
+  rnf DatabaseTableOutputOptions' {..} =
+    Prelude.rnf tempDirectory
+      `Prelude.seq` Prelude.rnf tableName
+
+instance Data.ToJSON DatabaseTableOutputOptions where
+  toJSON DatabaseTableOutputOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TempDirectory" Data..=) Prelude.<$> tempDirectory,
+            Prelude.Just ("TableName" Data..= tableName)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/Dataset.hs b/gen/Amazonka/DataBrew/Types/Dataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Dataset.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Dataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Dataset where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.FormatOptions
+import Amazonka.DataBrew.Types.Input
+import Amazonka.DataBrew.Types.InputFormat
+import Amazonka.DataBrew.Types.PathOptions
+import Amazonka.DataBrew.Types.Source
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a dataset that can be processed by DataBrew.
+--
+-- /See:/ 'newDataset' smart constructor.
+data Dataset = Dataset'
+  { -- | The ID of the Amazon Web Services account that owns the dataset.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the dataset was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who created the dataset.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The file format of a dataset that is created from an Amazon S3 file or
+    -- folder.
+    format :: Prelude.Maybe InputFormat,
+    -- | A set of options that define how DataBrew interprets the data in the
+    -- dataset.
+    formatOptions :: Prelude.Maybe FormatOptions,
+    -- | The Amazon Resource Name (ARN) of the user who last modified the
+    -- dataset.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The last modification date and time of the dataset.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | A set of options that defines how DataBrew interprets an Amazon S3 path
+    -- of the dataset.
+    pathOptions :: Prelude.Maybe PathOptions,
+    -- | The unique Amazon Resource Name (ARN) for the dataset.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The location of the data for the dataset, either Amazon S3 or the Glue
+    -- Data Catalog.
+    source :: Prelude.Maybe Source,
+    -- | Metadata tags that have been applied to the dataset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name of the dataset.
+    name :: Prelude.Text,
+    -- | Information on how DataBrew can find the dataset, in either the Glue
+    -- Data Catalog or Amazon S3.
+    input :: Input
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Dataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'dataset_accountId' - The ID of the Amazon Web Services account that owns the dataset.
+--
+-- 'createDate', 'dataset_createDate' - The date and time that the dataset was created.
+--
+-- 'createdBy', 'dataset_createdBy' - The Amazon Resource Name (ARN) of the user who created the dataset.
+--
+-- 'format', 'dataset_format' - The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+--
+-- 'formatOptions', 'dataset_formatOptions' - A set of options that define how DataBrew interprets the data in the
+-- dataset.
+--
+-- 'lastModifiedBy', 'dataset_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the
+-- dataset.
+--
+-- 'lastModifiedDate', 'dataset_lastModifiedDate' - The last modification date and time of the dataset.
+--
+-- 'pathOptions', 'dataset_pathOptions' - A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+--
+-- 'resourceArn', 'dataset_resourceArn' - The unique Amazon Resource Name (ARN) for the dataset.
+--
+-- 'source', 'dataset_source' - The location of the data for the dataset, either Amazon S3 or the Glue
+-- Data Catalog.
+--
+-- 'tags', 'dataset_tags' - Metadata tags that have been applied to the dataset.
+--
+-- 'name', 'dataset_name' - The unique name of the dataset.
+--
+-- 'input', 'dataset_input' - Information on how DataBrew can find the dataset, in either the Glue
+-- Data Catalog or Amazon S3.
+newDataset ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'input'
+  Input ->
+  Dataset
+newDataset pName_ pInput_ =
+  Dataset'
+    { accountId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      format = Prelude.Nothing,
+      formatOptions = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      pathOptions = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      source = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      input = pInput_
+    }
+
+-- | The ID of the Amazon Web Services account that owns the dataset.
+dataset_accountId :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
+dataset_accountId = Lens.lens (\Dataset' {accountId} -> accountId) (\s@Dataset' {} a -> s {accountId = a} :: Dataset)
+
+-- | The date and time that the dataset was created.
+dataset_createDate :: Lens.Lens' Dataset (Prelude.Maybe Prelude.UTCTime)
+dataset_createDate = Lens.lens (\Dataset' {createDate} -> createDate) (\s@Dataset' {} a -> s {createDate = a} :: Dataset) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who created the dataset.
+dataset_createdBy :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
+dataset_createdBy = Lens.lens (\Dataset' {createdBy} -> createdBy) (\s@Dataset' {} a -> s {createdBy = a} :: Dataset)
+
+-- | The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+dataset_format :: Lens.Lens' Dataset (Prelude.Maybe InputFormat)
+dataset_format = Lens.lens (\Dataset' {format} -> format) (\s@Dataset' {} a -> s {format = a} :: Dataset)
+
+-- | A set of options that define how DataBrew interprets the data in the
+-- dataset.
+dataset_formatOptions :: Lens.Lens' Dataset (Prelude.Maybe FormatOptions)
+dataset_formatOptions = Lens.lens (\Dataset' {formatOptions} -> formatOptions) (\s@Dataset' {} a -> s {formatOptions = a} :: Dataset)
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the
+-- dataset.
+dataset_lastModifiedBy :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
+dataset_lastModifiedBy = Lens.lens (\Dataset' {lastModifiedBy} -> lastModifiedBy) (\s@Dataset' {} a -> s {lastModifiedBy = a} :: Dataset)
+
+-- | The last modification date and time of the dataset.
+dataset_lastModifiedDate :: Lens.Lens' Dataset (Prelude.Maybe Prelude.UTCTime)
+dataset_lastModifiedDate = Lens.lens (\Dataset' {lastModifiedDate} -> lastModifiedDate) (\s@Dataset' {} a -> s {lastModifiedDate = a} :: Dataset) Prelude.. Lens.mapping Data._Time
+
+-- | A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+dataset_pathOptions :: Lens.Lens' Dataset (Prelude.Maybe PathOptions)
+dataset_pathOptions = Lens.lens (\Dataset' {pathOptions} -> pathOptions) (\s@Dataset' {} a -> s {pathOptions = a} :: Dataset)
+
+-- | The unique Amazon Resource Name (ARN) for the dataset.
+dataset_resourceArn :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
+dataset_resourceArn = Lens.lens (\Dataset' {resourceArn} -> resourceArn) (\s@Dataset' {} a -> s {resourceArn = a} :: Dataset)
+
+-- | The location of the data for the dataset, either Amazon S3 or the Glue
+-- Data Catalog.
+dataset_source :: Lens.Lens' Dataset (Prelude.Maybe Source)
+dataset_source = Lens.lens (\Dataset' {source} -> source) (\s@Dataset' {} a -> s {source = a} :: Dataset)
+
+-- | Metadata tags that have been applied to the dataset.
+dataset_tags :: Lens.Lens' Dataset (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+dataset_tags = Lens.lens (\Dataset' {tags} -> tags) (\s@Dataset' {} a -> s {tags = a} :: Dataset) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the dataset.
+dataset_name :: Lens.Lens' Dataset Prelude.Text
+dataset_name = Lens.lens (\Dataset' {name} -> name) (\s@Dataset' {} a -> s {name = a} :: Dataset)
+
+-- | Information on how DataBrew can find the dataset, in either the Glue
+-- Data Catalog or Amazon S3.
+dataset_input :: Lens.Lens' Dataset Input
+dataset_input = Lens.lens (\Dataset' {input} -> input) (\s@Dataset' {} a -> s {input = a} :: Dataset)
+
+instance Data.FromJSON Dataset where
+  parseJSON =
+    Data.withObject
+      "Dataset"
+      ( \x ->
+          Dataset'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "CreatedBy")
+            Prelude.<*> (x Data..:? "Format")
+            Prelude.<*> (x Data..:? "FormatOptions")
+            Prelude.<*> (x Data..:? "LastModifiedBy")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "PathOptions")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Source")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Input")
+      )
+
+instance Prelude.Hashable Dataset where
+  hashWithSalt _salt Dataset' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` formatOptions
+      `Prelude.hashWithSalt` lastModifiedBy
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` pathOptions
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` input
+
+instance Prelude.NFData Dataset where
+  rnf Dataset' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf formatOptions
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf pathOptions
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf input
diff --git a/gen/Amazonka/DataBrew/Types/DatasetParameter.hs b/gen/Amazonka/DataBrew/Types/DatasetParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DatasetParameter.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DatasetParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DatasetParameter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DatetimeOptions
+import Amazonka.DataBrew.Types.FilterExpression
+import Amazonka.DataBrew.Types.ParameterType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a dataset parameter that defines type and conditions for a
+-- parameter in the Amazon S3 path of the dataset.
+--
+-- /See:/ 'newDatasetParameter' smart constructor.
+data DatasetParameter = DatasetParameter'
+  { -- | Optional boolean value that defines whether the captured value of this
+    -- parameter should be used to create a new column in a dataset.
+    createColumn :: Prelude.Maybe Prelude.Bool,
+    -- | Additional parameter options such as a format and a timezone. Required
+    -- for datetime parameters.
+    datetimeOptions :: Prelude.Maybe DatetimeOptions,
+    -- | The optional filter expression structure to apply additional matching
+    -- criteria to the parameter.
+    filter' :: Prelude.Maybe FilterExpression,
+    -- | The name of the parameter that is used in the dataset\'s Amazon S3 path.
+    name :: Prelude.Text,
+    -- | The type of the dataset parameter, can be one of a \'String\',
+    -- \'Number\' or \'Datetime\'.
+    type' :: ParameterType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatasetParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createColumn', 'datasetParameter_createColumn' - Optional boolean value that defines whether the captured value of this
+-- parameter should be used to create a new column in a dataset.
+--
+-- 'datetimeOptions', 'datasetParameter_datetimeOptions' - Additional parameter options such as a format and a timezone. Required
+-- for datetime parameters.
+--
+-- 'filter'', 'datasetParameter_filter' - The optional filter expression structure to apply additional matching
+-- criteria to the parameter.
+--
+-- 'name', 'datasetParameter_name' - The name of the parameter that is used in the dataset\'s Amazon S3 path.
+--
+-- 'type'', 'datasetParameter_type' - The type of the dataset parameter, can be one of a \'String\',
+-- \'Number\' or \'Datetime\'.
+newDatasetParameter ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  ParameterType ->
+  DatasetParameter
+newDatasetParameter pName_ pType_ =
+  DatasetParameter'
+    { createColumn = Prelude.Nothing,
+      datetimeOptions = Prelude.Nothing,
+      filter' = Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | Optional boolean value that defines whether the captured value of this
+-- parameter should be used to create a new column in a dataset.
+datasetParameter_createColumn :: Lens.Lens' DatasetParameter (Prelude.Maybe Prelude.Bool)
+datasetParameter_createColumn = Lens.lens (\DatasetParameter' {createColumn} -> createColumn) (\s@DatasetParameter' {} a -> s {createColumn = a} :: DatasetParameter)
+
+-- | Additional parameter options such as a format and a timezone. Required
+-- for datetime parameters.
+datasetParameter_datetimeOptions :: Lens.Lens' DatasetParameter (Prelude.Maybe DatetimeOptions)
+datasetParameter_datetimeOptions = Lens.lens (\DatasetParameter' {datetimeOptions} -> datetimeOptions) (\s@DatasetParameter' {} a -> s {datetimeOptions = a} :: DatasetParameter)
+
+-- | The optional filter expression structure to apply additional matching
+-- criteria to the parameter.
+datasetParameter_filter :: Lens.Lens' DatasetParameter (Prelude.Maybe FilterExpression)
+datasetParameter_filter = Lens.lens (\DatasetParameter' {filter'} -> filter') (\s@DatasetParameter' {} a -> s {filter' = a} :: DatasetParameter)
+
+-- | The name of the parameter that is used in the dataset\'s Amazon S3 path.
+datasetParameter_name :: Lens.Lens' DatasetParameter Prelude.Text
+datasetParameter_name = Lens.lens (\DatasetParameter' {name} -> name) (\s@DatasetParameter' {} a -> s {name = a} :: DatasetParameter)
+
+-- | The type of the dataset parameter, can be one of a \'String\',
+-- \'Number\' or \'Datetime\'.
+datasetParameter_type :: Lens.Lens' DatasetParameter ParameterType
+datasetParameter_type = Lens.lens (\DatasetParameter' {type'} -> type') (\s@DatasetParameter' {} a -> s {type' = a} :: DatasetParameter)
+
+instance Data.FromJSON DatasetParameter where
+  parseJSON =
+    Data.withObject
+      "DatasetParameter"
+      ( \x ->
+          DatasetParameter'
+            Prelude.<$> (x Data..:? "CreateColumn")
+            Prelude.<*> (x Data..:? "DatetimeOptions")
+            Prelude.<*> (x Data..:? "Filter")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable DatasetParameter where
+  hashWithSalt _salt DatasetParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` createColumn
+      `Prelude.hashWithSalt` datetimeOptions
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DatasetParameter where
+  rnf DatasetParameter' {..} =
+    Prelude.rnf createColumn
+      `Prelude.seq` Prelude.rnf datetimeOptions
+      `Prelude.seq` Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON DatasetParameter where
+  toJSON DatasetParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CreateColumn" Data..=) Prelude.<$> createColumn,
+            ("DatetimeOptions" Data..=)
+              Prelude.<$> datetimeOptions,
+            ("Filter" Data..=) Prelude.<$> filter',
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/DatetimeOptions.hs b/gen/Amazonka/DataBrew/Types/DatetimeOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/DatetimeOptions.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.DatetimeOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.DatetimeOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents additional options for correct interpretation of datetime
+-- parameters used in the Amazon S3 path of a dataset.
+--
+-- /See:/ 'newDatetimeOptions' smart constructor.
+data DatetimeOptions = DatetimeOptions'
+  { -- | Optional value for a non-US locale code, needed for correct
+    -- interpretation of some date formats.
+    localeCode :: Prelude.Maybe Prelude.Text,
+    -- | Optional value for a timezone offset of the datetime parameter value in
+    -- the Amazon S3 path. Shouldn\'t be used if Format for this parameter
+    -- includes timezone fields. If no offset specified, UTC is assumed.
+    timezoneOffset :: Prelude.Maybe Prelude.Text,
+    -- | Required option, that defines the datetime format used for a date
+    -- parameter in the Amazon S3 path. Should use only supported datetime
+    -- specifiers and separation characters, all literal a-z or A-Z characters
+    -- should be escaped with single quotes. E.g. \"MM.dd.yyyy-\'at\'-HH:mm\".
+    format :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatetimeOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localeCode', 'datetimeOptions_localeCode' - Optional value for a non-US locale code, needed for correct
+-- interpretation of some date formats.
+--
+-- 'timezoneOffset', 'datetimeOptions_timezoneOffset' - Optional value for a timezone offset of the datetime parameter value in
+-- the Amazon S3 path. Shouldn\'t be used if Format for this parameter
+-- includes timezone fields. If no offset specified, UTC is assumed.
+--
+-- 'format', 'datetimeOptions_format' - Required option, that defines the datetime format used for a date
+-- parameter in the Amazon S3 path. Should use only supported datetime
+-- specifiers and separation characters, all literal a-z or A-Z characters
+-- should be escaped with single quotes. E.g. \"MM.dd.yyyy-\'at\'-HH:mm\".
+newDatetimeOptions ::
+  -- | 'format'
+  Prelude.Text ->
+  DatetimeOptions
+newDatetimeOptions pFormat_ =
+  DatetimeOptions'
+    { localeCode = Prelude.Nothing,
+      timezoneOffset = Prelude.Nothing,
+      format = pFormat_
+    }
+
+-- | Optional value for a non-US locale code, needed for correct
+-- interpretation of some date formats.
+datetimeOptions_localeCode :: Lens.Lens' DatetimeOptions (Prelude.Maybe Prelude.Text)
+datetimeOptions_localeCode = Lens.lens (\DatetimeOptions' {localeCode} -> localeCode) (\s@DatetimeOptions' {} a -> s {localeCode = a} :: DatetimeOptions)
+
+-- | Optional value for a timezone offset of the datetime parameter value in
+-- the Amazon S3 path. Shouldn\'t be used if Format for this parameter
+-- includes timezone fields. If no offset specified, UTC is assumed.
+datetimeOptions_timezoneOffset :: Lens.Lens' DatetimeOptions (Prelude.Maybe Prelude.Text)
+datetimeOptions_timezoneOffset = Lens.lens (\DatetimeOptions' {timezoneOffset} -> timezoneOffset) (\s@DatetimeOptions' {} a -> s {timezoneOffset = a} :: DatetimeOptions)
+
+-- | Required option, that defines the datetime format used for a date
+-- parameter in the Amazon S3 path. Should use only supported datetime
+-- specifiers and separation characters, all literal a-z or A-Z characters
+-- should be escaped with single quotes. E.g. \"MM.dd.yyyy-\'at\'-HH:mm\".
+datetimeOptions_format :: Lens.Lens' DatetimeOptions Prelude.Text
+datetimeOptions_format = Lens.lens (\DatetimeOptions' {format} -> format) (\s@DatetimeOptions' {} a -> s {format = a} :: DatetimeOptions)
+
+instance Data.FromJSON DatetimeOptions where
+  parseJSON =
+    Data.withObject
+      "DatetimeOptions"
+      ( \x ->
+          DatetimeOptions'
+            Prelude.<$> (x Data..:? "LocaleCode")
+            Prelude.<*> (x Data..:? "TimezoneOffset")
+            Prelude.<*> (x Data..: "Format")
+      )
+
+instance Prelude.Hashable DatetimeOptions where
+  hashWithSalt _salt DatetimeOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` localeCode
+      `Prelude.hashWithSalt` timezoneOffset
+      `Prelude.hashWithSalt` format
+
+instance Prelude.NFData DatetimeOptions where
+  rnf DatetimeOptions' {..} =
+    Prelude.rnf localeCode
+      `Prelude.seq` Prelude.rnf timezoneOffset
+      `Prelude.seq` Prelude.rnf format
+
+instance Data.ToJSON DatetimeOptions where
+  toJSON DatetimeOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LocaleCode" Data..=) Prelude.<$> localeCode,
+            ("TimezoneOffset" Data..=)
+              Prelude.<$> timezoneOffset,
+            Prelude.Just ("Format" Data..= format)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/EncryptionMode.hs b/gen/Amazonka/DataBrew/Types/EncryptionMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/EncryptionMode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.EncryptionMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.EncryptionMode
+  ( EncryptionMode
+      ( ..,
+        EncryptionMode_SSE_KMS,
+        EncryptionMode_SSE_S3
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EncryptionMode = EncryptionMode'
+  { fromEncryptionMode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EncryptionMode_SSE_KMS :: EncryptionMode
+pattern EncryptionMode_SSE_KMS = EncryptionMode' "SSE-KMS"
+
+pattern EncryptionMode_SSE_S3 :: EncryptionMode
+pattern EncryptionMode_SSE_S3 = EncryptionMode' "SSE-S3"
+
+{-# COMPLETE
+  EncryptionMode_SSE_KMS,
+  EncryptionMode_SSE_S3,
+  EncryptionMode'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/EntityDetectorConfiguration.hs b/gen/Amazonka/DataBrew/Types/EntityDetectorConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/EntityDetectorConfiguration.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.EntityDetectorConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.EntityDetectorConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.AllowedStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of entity detection for a profile job. When undefined,
+-- entity detection is disabled.
+--
+-- /See:/ 'newEntityDetectorConfiguration' smart constructor.
+data EntityDetectorConfiguration = EntityDetectorConfiguration'
+  { -- | Configuration of statistics that are allowed to be run on columns that
+    -- contain detected entities. When undefined, no statistics will be
+    -- computed on columns that contain detected entities.
+    allowedStatistics :: Prelude.Maybe (Prelude.NonEmpty AllowedStatistics),
+    -- | Entity types to detect. Can be any of the following:
+    --
+    -- -   USA_SSN
+    --
+    -- -   EMAIL
+    --
+    -- -   USA_ITIN
+    --
+    -- -   USA_PASSPORT_NUMBER
+    --
+    -- -   PHONE_NUMBER
+    --
+    -- -   USA_DRIVING_LICENSE
+    --
+    -- -   BANK_ACCOUNT
+    --
+    -- -   CREDIT_CARD
+    --
+    -- -   IP_ADDRESS
+    --
+    -- -   MAC_ADDRESS
+    --
+    -- -   USA_DEA_NUMBER
+    --
+    -- -   USA_HCPCS_CODE
+    --
+    -- -   USA_NATIONAL_PROVIDER_IDENTIFIER
+    --
+    -- -   USA_NATIONAL_DRUG_CODE
+    --
+    -- -   USA_HEALTH_INSURANCE_CLAIM_NUMBER
+    --
+    -- -   USA_MEDICARE_BENEFICIARY_IDENTIFIER
+    --
+    -- -   USA_CPT_CODE
+    --
+    -- -   PERSON_NAME
+    --
+    -- -   DATE
+    --
+    -- The Entity type group USA_ALL is also supported, and includes all of the
+    -- above entity types except PERSON_NAME and DATE.
+    entityTypes :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntityDetectorConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowedStatistics', 'entityDetectorConfiguration_allowedStatistics' - Configuration of statistics that are allowed to be run on columns that
+-- contain detected entities. When undefined, no statistics will be
+-- computed on columns that contain detected entities.
+--
+-- 'entityTypes', 'entityDetectorConfiguration_entityTypes' - Entity types to detect. Can be any of the following:
+--
+-- -   USA_SSN
+--
+-- -   EMAIL
+--
+-- -   USA_ITIN
+--
+-- -   USA_PASSPORT_NUMBER
+--
+-- -   PHONE_NUMBER
+--
+-- -   USA_DRIVING_LICENSE
+--
+-- -   BANK_ACCOUNT
+--
+-- -   CREDIT_CARD
+--
+-- -   IP_ADDRESS
+--
+-- -   MAC_ADDRESS
+--
+-- -   USA_DEA_NUMBER
+--
+-- -   USA_HCPCS_CODE
+--
+-- -   USA_NATIONAL_PROVIDER_IDENTIFIER
+--
+-- -   USA_NATIONAL_DRUG_CODE
+--
+-- -   USA_HEALTH_INSURANCE_CLAIM_NUMBER
+--
+-- -   USA_MEDICARE_BENEFICIARY_IDENTIFIER
+--
+-- -   USA_CPT_CODE
+--
+-- -   PERSON_NAME
+--
+-- -   DATE
+--
+-- The Entity type group USA_ALL is also supported, and includes all of the
+-- above entity types except PERSON_NAME and DATE.
+newEntityDetectorConfiguration ::
+  -- | 'entityTypes'
+  Prelude.NonEmpty Prelude.Text ->
+  EntityDetectorConfiguration
+newEntityDetectorConfiguration pEntityTypes_ =
+  EntityDetectorConfiguration'
+    { allowedStatistics =
+        Prelude.Nothing,
+      entityTypes =
+        Lens.coerced Lens.# pEntityTypes_
+    }
+
+-- | Configuration of statistics that are allowed to be run on columns that
+-- contain detected entities. When undefined, no statistics will be
+-- computed on columns that contain detected entities.
+entityDetectorConfiguration_allowedStatistics :: Lens.Lens' EntityDetectorConfiguration (Prelude.Maybe (Prelude.NonEmpty AllowedStatistics))
+entityDetectorConfiguration_allowedStatistics = Lens.lens (\EntityDetectorConfiguration' {allowedStatistics} -> allowedStatistics) (\s@EntityDetectorConfiguration' {} a -> s {allowedStatistics = a} :: EntityDetectorConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Entity types to detect. Can be any of the following:
+--
+-- -   USA_SSN
+--
+-- -   EMAIL
+--
+-- -   USA_ITIN
+--
+-- -   USA_PASSPORT_NUMBER
+--
+-- -   PHONE_NUMBER
+--
+-- -   USA_DRIVING_LICENSE
+--
+-- -   BANK_ACCOUNT
+--
+-- -   CREDIT_CARD
+--
+-- -   IP_ADDRESS
+--
+-- -   MAC_ADDRESS
+--
+-- -   USA_DEA_NUMBER
+--
+-- -   USA_HCPCS_CODE
+--
+-- -   USA_NATIONAL_PROVIDER_IDENTIFIER
+--
+-- -   USA_NATIONAL_DRUG_CODE
+--
+-- -   USA_HEALTH_INSURANCE_CLAIM_NUMBER
+--
+-- -   USA_MEDICARE_BENEFICIARY_IDENTIFIER
+--
+-- -   USA_CPT_CODE
+--
+-- -   PERSON_NAME
+--
+-- -   DATE
+--
+-- The Entity type group USA_ALL is also supported, and includes all of the
+-- above entity types except PERSON_NAME and DATE.
+entityDetectorConfiguration_entityTypes :: Lens.Lens' EntityDetectorConfiguration (Prelude.NonEmpty Prelude.Text)
+entityDetectorConfiguration_entityTypes = Lens.lens (\EntityDetectorConfiguration' {entityTypes} -> entityTypes) (\s@EntityDetectorConfiguration' {} a -> s {entityTypes = a} :: EntityDetectorConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON EntityDetectorConfiguration where
+  parseJSON =
+    Data.withObject
+      "EntityDetectorConfiguration"
+      ( \x ->
+          EntityDetectorConfiguration'
+            Prelude.<$> (x Data..:? "AllowedStatistics")
+            Prelude.<*> (x Data..: "EntityTypes")
+      )
+
+instance Prelude.Hashable EntityDetectorConfiguration where
+  hashWithSalt _salt EntityDetectorConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedStatistics
+      `Prelude.hashWithSalt` entityTypes
+
+instance Prelude.NFData EntityDetectorConfiguration where
+  rnf EntityDetectorConfiguration' {..} =
+    Prelude.rnf allowedStatistics
+      `Prelude.seq` Prelude.rnf entityTypes
+
+instance Data.ToJSON EntityDetectorConfiguration where
+  toJSON EntityDetectorConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AllowedStatistics" Data..=)
+              Prelude.<$> allowedStatistics,
+            Prelude.Just ("EntityTypes" Data..= entityTypes)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/ExcelOptions.hs b/gen/Amazonka/DataBrew/Types/ExcelOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ExcelOptions.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ExcelOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ExcelOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a set of options that define how DataBrew will interpret a
+-- Microsoft Excel file when creating a dataset from that file.
+--
+-- /See:/ 'newExcelOptions' smart constructor.
+data ExcelOptions = ExcelOptions'
+  { -- | A variable that specifies whether the first row in the file is parsed as
+    -- the header. If this value is false, column names are auto-generated.
+    headerRow :: Prelude.Maybe Prelude.Bool,
+    -- | One or more sheet numbers in the Excel file that will be included in the
+    -- dataset.
+    sheetIndexes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Natural),
+    -- | One or more named sheets in the Excel file that will be included in the
+    -- dataset.
+    sheetNames :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExcelOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'headerRow', 'excelOptions_headerRow' - A variable that specifies whether the first row in the file is parsed as
+-- the header. If this value is false, column names are auto-generated.
+--
+-- 'sheetIndexes', 'excelOptions_sheetIndexes' - One or more sheet numbers in the Excel file that will be included in the
+-- dataset.
+--
+-- 'sheetNames', 'excelOptions_sheetNames' - One or more named sheets in the Excel file that will be included in the
+-- dataset.
+newExcelOptions ::
+  ExcelOptions
+newExcelOptions =
+  ExcelOptions'
+    { headerRow = Prelude.Nothing,
+      sheetIndexes = Prelude.Nothing,
+      sheetNames = Prelude.Nothing
+    }
+
+-- | A variable that specifies whether the first row in the file is parsed as
+-- the header. If this value is false, column names are auto-generated.
+excelOptions_headerRow :: Lens.Lens' ExcelOptions (Prelude.Maybe Prelude.Bool)
+excelOptions_headerRow = Lens.lens (\ExcelOptions' {headerRow} -> headerRow) (\s@ExcelOptions' {} a -> s {headerRow = a} :: ExcelOptions)
+
+-- | One or more sheet numbers in the Excel file that will be included in the
+-- dataset.
+excelOptions_sheetIndexes :: Lens.Lens' ExcelOptions (Prelude.Maybe (Prelude.NonEmpty Prelude.Natural))
+excelOptions_sheetIndexes = Lens.lens (\ExcelOptions' {sheetIndexes} -> sheetIndexes) (\s@ExcelOptions' {} a -> s {sheetIndexes = a} :: ExcelOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more named sheets in the Excel file that will be included in the
+-- dataset.
+excelOptions_sheetNames :: Lens.Lens' ExcelOptions (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+excelOptions_sheetNames = Lens.lens (\ExcelOptions' {sheetNames} -> sheetNames) (\s@ExcelOptions' {} a -> s {sheetNames = a} :: ExcelOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ExcelOptions where
+  parseJSON =
+    Data.withObject
+      "ExcelOptions"
+      ( \x ->
+          ExcelOptions'
+            Prelude.<$> (x Data..:? "HeaderRow")
+            Prelude.<*> (x Data..:? "SheetIndexes")
+            Prelude.<*> (x Data..:? "SheetNames")
+      )
+
+instance Prelude.Hashable ExcelOptions where
+  hashWithSalt _salt ExcelOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` headerRow
+      `Prelude.hashWithSalt` sheetIndexes
+      `Prelude.hashWithSalt` sheetNames
+
+instance Prelude.NFData ExcelOptions where
+  rnf ExcelOptions' {..} =
+    Prelude.rnf headerRow
+      `Prelude.seq` Prelude.rnf sheetIndexes
+      `Prelude.seq` Prelude.rnf sheetNames
+
+instance Data.ToJSON ExcelOptions where
+  toJSON ExcelOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("HeaderRow" Data..=) Prelude.<$> headerRow,
+            ("SheetIndexes" Data..=) Prelude.<$> sheetIndexes,
+            ("SheetNames" Data..=) Prelude.<$> sheetNames
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/FilesLimit.hs b/gen/Amazonka/DataBrew/Types/FilesLimit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/FilesLimit.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.FilesLimit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.FilesLimit where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.Order
+import Amazonka.DataBrew.Types.OrderedBy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a limit imposed on number of Amazon S3 files that should be
+-- selected for a dataset from a connected Amazon S3 path.
+--
+-- /See:/ 'newFilesLimit' smart constructor.
+data FilesLimit = FilesLimit'
+  { -- | A criteria to use for Amazon S3 files sorting before their selection. By
+    -- default uses DESCENDING order, i.e. most recent files are selected
+    -- first. Another possible value is ASCENDING.
+    order :: Prelude.Maybe Order,
+    -- | A criteria to use for Amazon S3 files sorting before their selection. By
+    -- default uses LAST_MODIFIED_DATE as a sorting criteria. Currently it\'s
+    -- the only allowed value.
+    orderedBy :: Prelude.Maybe OrderedBy,
+    -- | The number of Amazon S3 files to select.
+    maxFiles :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilesLimit' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'order', 'filesLimit_order' - A criteria to use for Amazon S3 files sorting before their selection. By
+-- default uses DESCENDING order, i.e. most recent files are selected
+-- first. Another possible value is ASCENDING.
+--
+-- 'orderedBy', 'filesLimit_orderedBy' - A criteria to use for Amazon S3 files sorting before their selection. By
+-- default uses LAST_MODIFIED_DATE as a sorting criteria. Currently it\'s
+-- the only allowed value.
+--
+-- 'maxFiles', 'filesLimit_maxFiles' - The number of Amazon S3 files to select.
+newFilesLimit ::
+  -- | 'maxFiles'
+  Prelude.Natural ->
+  FilesLimit
+newFilesLimit pMaxFiles_ =
+  FilesLimit'
+    { order = Prelude.Nothing,
+      orderedBy = Prelude.Nothing,
+      maxFiles = pMaxFiles_
+    }
+
+-- | A criteria to use for Amazon S3 files sorting before their selection. By
+-- default uses DESCENDING order, i.e. most recent files are selected
+-- first. Another possible value is ASCENDING.
+filesLimit_order :: Lens.Lens' FilesLimit (Prelude.Maybe Order)
+filesLimit_order = Lens.lens (\FilesLimit' {order} -> order) (\s@FilesLimit' {} a -> s {order = a} :: FilesLimit)
+
+-- | A criteria to use for Amazon S3 files sorting before their selection. By
+-- default uses LAST_MODIFIED_DATE as a sorting criteria. Currently it\'s
+-- the only allowed value.
+filesLimit_orderedBy :: Lens.Lens' FilesLimit (Prelude.Maybe OrderedBy)
+filesLimit_orderedBy = Lens.lens (\FilesLimit' {orderedBy} -> orderedBy) (\s@FilesLimit' {} a -> s {orderedBy = a} :: FilesLimit)
+
+-- | The number of Amazon S3 files to select.
+filesLimit_maxFiles :: Lens.Lens' FilesLimit Prelude.Natural
+filesLimit_maxFiles = Lens.lens (\FilesLimit' {maxFiles} -> maxFiles) (\s@FilesLimit' {} a -> s {maxFiles = a} :: FilesLimit)
+
+instance Data.FromJSON FilesLimit where
+  parseJSON =
+    Data.withObject
+      "FilesLimit"
+      ( \x ->
+          FilesLimit'
+            Prelude.<$> (x Data..:? "Order")
+            Prelude.<*> (x Data..:? "OrderedBy")
+            Prelude.<*> (x Data..: "MaxFiles")
+      )
+
+instance Prelude.Hashable FilesLimit where
+  hashWithSalt _salt FilesLimit' {..} =
+    _salt
+      `Prelude.hashWithSalt` order
+      `Prelude.hashWithSalt` orderedBy
+      `Prelude.hashWithSalt` maxFiles
+
+instance Prelude.NFData FilesLimit where
+  rnf FilesLimit' {..} =
+    Prelude.rnf order
+      `Prelude.seq` Prelude.rnf orderedBy
+      `Prelude.seq` Prelude.rnf maxFiles
+
+instance Data.ToJSON FilesLimit where
+  toJSON FilesLimit' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Order" Data..=) Prelude.<$> order,
+            ("OrderedBy" Data..=) Prelude.<$> orderedBy,
+            Prelude.Just ("MaxFiles" Data..= maxFiles)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/FilterExpression.hs b/gen/Amazonka/DataBrew/Types/FilterExpression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/FilterExpression.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.FilterExpression
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.FilterExpression where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a structure for defining parameter conditions. Supported
+-- conditions are described here:
+-- <https://docs.aws.amazon.com/databrew/latest/dg/datasets.multiple-files.html#conditions.for.dynamic.datasets Supported conditions for dynamic datasets>
+-- in the /Glue DataBrew Developer Guide/.
+--
+-- /See:/ 'newFilterExpression' smart constructor.
+data FilterExpression = FilterExpression'
+  { -- | The expression which includes condition names followed by substitution
+    -- variables, possibly grouped and combined with other conditions. For
+    -- example, \"(starts_with :prefix1 or starts_with :prefix2) and (ends_with
+    -- :suffix1 or ends_with :suffix2)\". Substitution variables should start
+    -- with \':\' symbol.
+    expression :: Prelude.Text,
+    -- | The map of substitution variable names to their values used in this
+    -- filter expression.
+    valuesMap :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilterExpression' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expression', 'filterExpression_expression' - The expression which includes condition names followed by substitution
+-- variables, possibly grouped and combined with other conditions. For
+-- example, \"(starts_with :prefix1 or starts_with :prefix2) and (ends_with
+-- :suffix1 or ends_with :suffix2)\". Substitution variables should start
+-- with \':\' symbol.
+--
+-- 'valuesMap', 'filterExpression_valuesMap' - The map of substitution variable names to their values used in this
+-- filter expression.
+newFilterExpression ::
+  -- | 'expression'
+  Prelude.Text ->
+  FilterExpression
+newFilterExpression pExpression_ =
+  FilterExpression'
+    { expression = pExpression_,
+      valuesMap = Prelude.mempty
+    }
+
+-- | The expression which includes condition names followed by substitution
+-- variables, possibly grouped and combined with other conditions. For
+-- example, \"(starts_with :prefix1 or starts_with :prefix2) and (ends_with
+-- :suffix1 or ends_with :suffix2)\". Substitution variables should start
+-- with \':\' symbol.
+filterExpression_expression :: Lens.Lens' FilterExpression Prelude.Text
+filterExpression_expression = Lens.lens (\FilterExpression' {expression} -> expression) (\s@FilterExpression' {} a -> s {expression = a} :: FilterExpression)
+
+-- | The map of substitution variable names to their values used in this
+-- filter expression.
+filterExpression_valuesMap :: Lens.Lens' FilterExpression (Prelude.HashMap Prelude.Text Prelude.Text)
+filterExpression_valuesMap = Lens.lens (\FilterExpression' {valuesMap} -> valuesMap) (\s@FilterExpression' {} a -> s {valuesMap = a} :: FilterExpression) Prelude.. Lens.coerced
+
+instance Data.FromJSON FilterExpression where
+  parseJSON =
+    Data.withObject
+      "FilterExpression"
+      ( \x ->
+          FilterExpression'
+            Prelude.<$> (x Data..: "Expression")
+            Prelude.<*> (x Data..:? "ValuesMap" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FilterExpression where
+  hashWithSalt _salt FilterExpression' {..} =
+    _salt
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` valuesMap
+
+instance Prelude.NFData FilterExpression where
+  rnf FilterExpression' {..} =
+    Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf valuesMap
+
+instance Data.ToJSON FilterExpression where
+  toJSON FilterExpression' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Expression" Data..= expression),
+            Prelude.Just ("ValuesMap" Data..= valuesMap)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/FormatOptions.hs b/gen/Amazonka/DataBrew/Types/FormatOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/FormatOptions.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.FormatOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.FormatOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.CsvOptions
+import Amazonka.DataBrew.Types.ExcelOptions
+import Amazonka.DataBrew.Types.JsonOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a set of options that define the structure of either
+-- comma-separated value (CSV), Excel, or JSON input.
+--
+-- /See:/ 'newFormatOptions' smart constructor.
+data FormatOptions = FormatOptions'
+  { -- | Options that define how CSV input is to be interpreted by DataBrew.
+    csv :: Prelude.Maybe CsvOptions,
+    -- | Options that define how Excel input is to be interpreted by DataBrew.
+    excel :: Prelude.Maybe ExcelOptions,
+    -- | Options that define how JSON input is to be interpreted by DataBrew.
+    json :: Prelude.Maybe JsonOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormatOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'csv', 'formatOptions_csv' - Options that define how CSV input is to be interpreted by DataBrew.
+--
+-- 'excel', 'formatOptions_excel' - Options that define how Excel input is to be interpreted by DataBrew.
+--
+-- 'json', 'formatOptions_json' - Options that define how JSON input is to be interpreted by DataBrew.
+newFormatOptions ::
+  FormatOptions
+newFormatOptions =
+  FormatOptions'
+    { csv = Prelude.Nothing,
+      excel = Prelude.Nothing,
+      json = Prelude.Nothing
+    }
+
+-- | Options that define how CSV input is to be interpreted by DataBrew.
+formatOptions_csv :: Lens.Lens' FormatOptions (Prelude.Maybe CsvOptions)
+formatOptions_csv = Lens.lens (\FormatOptions' {csv} -> csv) (\s@FormatOptions' {} a -> s {csv = a} :: FormatOptions)
+
+-- | Options that define how Excel input is to be interpreted by DataBrew.
+formatOptions_excel :: Lens.Lens' FormatOptions (Prelude.Maybe ExcelOptions)
+formatOptions_excel = Lens.lens (\FormatOptions' {excel} -> excel) (\s@FormatOptions' {} a -> s {excel = a} :: FormatOptions)
+
+-- | Options that define how JSON input is to be interpreted by DataBrew.
+formatOptions_json :: Lens.Lens' FormatOptions (Prelude.Maybe JsonOptions)
+formatOptions_json = Lens.lens (\FormatOptions' {json} -> json) (\s@FormatOptions' {} a -> s {json = a} :: FormatOptions)
+
+instance Data.FromJSON FormatOptions where
+  parseJSON =
+    Data.withObject
+      "FormatOptions"
+      ( \x ->
+          FormatOptions'
+            Prelude.<$> (x Data..:? "Csv")
+            Prelude.<*> (x Data..:? "Excel")
+            Prelude.<*> (x Data..:? "Json")
+      )
+
+instance Prelude.Hashable FormatOptions where
+  hashWithSalt _salt FormatOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` csv
+      `Prelude.hashWithSalt` excel
+      `Prelude.hashWithSalt` json
+
+instance Prelude.NFData FormatOptions where
+  rnf FormatOptions' {..} =
+    Prelude.rnf csv
+      `Prelude.seq` Prelude.rnf excel
+      `Prelude.seq` Prelude.rnf json
+
+instance Data.ToJSON FormatOptions where
+  toJSON FormatOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Csv" Data..=) Prelude.<$> csv,
+            ("Excel" Data..=) Prelude.<$> excel,
+            ("Json" Data..=) Prelude.<$> json
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/Input.hs b/gen/Amazonka/DataBrew/Types/Input.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Input.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Input
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Input where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DataCatalogInputDefinition
+import Amazonka.DataBrew.Types.DatabaseInputDefinition
+import Amazonka.DataBrew.Types.Metadata
+import Amazonka.DataBrew.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents information on how DataBrew can find data, in either the Glue
+-- Data Catalog or Amazon S3.
+--
+-- /See:/ 'newInput' smart constructor.
+data Input = Input'
+  { -- | The Glue Data Catalog parameters for the data.
+    dataCatalogInputDefinition :: Prelude.Maybe DataCatalogInputDefinition,
+    -- | Connection information for dataset input files stored in a database.
+    databaseInputDefinition :: Prelude.Maybe DatabaseInputDefinition,
+    -- | Contains additional resource information needed for specific datasets.
+    metadata :: Prelude.Maybe Metadata,
+    -- | The Amazon S3 location where the data is stored.
+    s3InputDefinition :: Prelude.Maybe S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Input' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataCatalogInputDefinition', 'input_dataCatalogInputDefinition' - The Glue Data Catalog parameters for the data.
+--
+-- 'databaseInputDefinition', 'input_databaseInputDefinition' - Connection information for dataset input files stored in a database.
+--
+-- 'metadata', 'input_metadata' - Contains additional resource information needed for specific datasets.
+--
+-- 's3InputDefinition', 'input_s3InputDefinition' - The Amazon S3 location where the data is stored.
+newInput ::
+  Input
+newInput =
+  Input'
+    { dataCatalogInputDefinition =
+        Prelude.Nothing,
+      databaseInputDefinition = Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      s3InputDefinition = Prelude.Nothing
+    }
+
+-- | The Glue Data Catalog parameters for the data.
+input_dataCatalogInputDefinition :: Lens.Lens' Input (Prelude.Maybe DataCatalogInputDefinition)
+input_dataCatalogInputDefinition = Lens.lens (\Input' {dataCatalogInputDefinition} -> dataCatalogInputDefinition) (\s@Input' {} a -> s {dataCatalogInputDefinition = a} :: Input)
+
+-- | Connection information for dataset input files stored in a database.
+input_databaseInputDefinition :: Lens.Lens' Input (Prelude.Maybe DatabaseInputDefinition)
+input_databaseInputDefinition = Lens.lens (\Input' {databaseInputDefinition} -> databaseInputDefinition) (\s@Input' {} a -> s {databaseInputDefinition = a} :: Input)
+
+-- | Contains additional resource information needed for specific datasets.
+input_metadata :: Lens.Lens' Input (Prelude.Maybe Metadata)
+input_metadata = Lens.lens (\Input' {metadata} -> metadata) (\s@Input' {} a -> s {metadata = a} :: Input)
+
+-- | The Amazon S3 location where the data is stored.
+input_s3InputDefinition :: Lens.Lens' Input (Prelude.Maybe S3Location)
+input_s3InputDefinition = Lens.lens (\Input' {s3InputDefinition} -> s3InputDefinition) (\s@Input' {} a -> s {s3InputDefinition = a} :: Input)
+
+instance Data.FromJSON Input where
+  parseJSON =
+    Data.withObject
+      "Input"
+      ( \x ->
+          Input'
+            Prelude.<$> (x Data..:? "DataCatalogInputDefinition")
+            Prelude.<*> (x Data..:? "DatabaseInputDefinition")
+            Prelude.<*> (x Data..:? "Metadata")
+            Prelude.<*> (x Data..:? "S3InputDefinition")
+      )
+
+instance Prelude.Hashable Input where
+  hashWithSalt _salt Input' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataCatalogInputDefinition
+      `Prelude.hashWithSalt` databaseInputDefinition
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` s3InputDefinition
+
+instance Prelude.NFData Input where
+  rnf Input' {..} =
+    Prelude.rnf dataCatalogInputDefinition
+      `Prelude.seq` Prelude.rnf databaseInputDefinition
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf s3InputDefinition
+
+instance Data.ToJSON Input where
+  toJSON Input' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataCatalogInputDefinition" Data..=)
+              Prelude.<$> dataCatalogInputDefinition,
+            ("DatabaseInputDefinition" Data..=)
+              Prelude.<$> databaseInputDefinition,
+            ("Metadata" Data..=) Prelude.<$> metadata,
+            ("S3InputDefinition" Data..=)
+              Prelude.<$> s3InputDefinition
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/InputFormat.hs b/gen/Amazonka/DataBrew/Types/InputFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/InputFormat.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.InputFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.InputFormat
+  ( InputFormat
+      ( ..,
+        InputFormat_CSV,
+        InputFormat_EXCEL,
+        InputFormat_JSON,
+        InputFormat_ORC,
+        InputFormat_PARQUET
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InputFormat = InputFormat'
+  { fromInputFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InputFormat_CSV :: InputFormat
+pattern InputFormat_CSV = InputFormat' "CSV"
+
+pattern InputFormat_EXCEL :: InputFormat
+pattern InputFormat_EXCEL = InputFormat' "EXCEL"
+
+pattern InputFormat_JSON :: InputFormat
+pattern InputFormat_JSON = InputFormat' "JSON"
+
+pattern InputFormat_ORC :: InputFormat
+pattern InputFormat_ORC = InputFormat' "ORC"
+
+pattern InputFormat_PARQUET :: InputFormat
+pattern InputFormat_PARQUET = InputFormat' "PARQUET"
+
+{-# COMPLETE
+  InputFormat_CSV,
+  InputFormat_EXCEL,
+  InputFormat_JSON,
+  InputFormat_ORC,
+  InputFormat_PARQUET,
+  InputFormat'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/Job.hs b/gen/Amazonka/DataBrew/Types/Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Job.hs
@@ -0,0 +1,414 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Job
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Job where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DataCatalogOutput
+import Amazonka.DataBrew.Types.DatabaseOutput
+import Amazonka.DataBrew.Types.EncryptionMode
+import Amazonka.DataBrew.Types.JobSample
+import Amazonka.DataBrew.Types.JobType
+import Amazonka.DataBrew.Types.LogSubscription
+import Amazonka.DataBrew.Types.Output
+import Amazonka.DataBrew.Types.RecipeReference
+import Amazonka.DataBrew.Types.ValidationConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents all of the attributes of a DataBrew job.
+--
+-- /See:/ 'newJob' smart constructor.
+data Job = Job'
+  { -- | The ID of the Amazon Web Services account that owns the job.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the job was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who created the job.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | One or more artifacts that represent the Glue Data Catalog output from
+    -- running the job.
+    dataCatalogOutputs :: Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput),
+    -- | Represents a list of JDBC database output objects which defines the
+    -- output destination for a DataBrew recipe job to write into.
+    databaseOutputs :: Prelude.Maybe (Prelude.NonEmpty DatabaseOutput),
+    -- | A dataset that the job is to process.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an encryption key that is used to
+    -- protect the job output. For more information, see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/encryption-security-configuration.html Encrypting data written by DataBrew jobs>
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The encryption mode for the job, which can be one of the following:
+    --
+    -- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+    --
+    -- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+    encryptionMode :: Prelude.Maybe EncryptionMode,
+    -- | A sample configuration for profile jobs only, which determines the
+    -- number of rows on which the profile job is run. If a @JobSample@ value
+    -- isn\'t provided, the default value is used. The default value is
+    -- CUSTOM_ROWS for the mode parameter and 20,000 for the size parameter.
+    jobSample :: Prelude.Maybe JobSample,
+    -- | The Amazon Resource Name (ARN) of the user who last modified the job.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The modification date and time of the job.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The current status of Amazon CloudWatch logging for the job.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | The maximum number of nodes that can be consumed when the job processes
+    -- data.
+    maxCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of times to retry the job after a job run fails.
+    maxRetries :: Prelude.Maybe Prelude.Natural,
+    -- | One or more artifacts that represent output from running the job.
+    outputs :: Prelude.Maybe (Prelude.NonEmpty Output),
+    -- | The name of the project that the job is associated with.
+    projectName :: Prelude.Maybe Prelude.Text,
+    -- | A set of steps that the job runs.
+    recipeReference :: Prelude.Maybe RecipeReference,
+    -- | The unique Amazon Resource Name (ARN) for the job.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role to be assumed for this job.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | Metadata tags that have been applied to the job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The job\'s timeout in minutes. A job that attempts to run longer than
+    -- this timeout period ends with a status of @TIMEOUT@.
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | The job type of the job, which must be one of the following:
+    --
+    -- -   @PROFILE@ - A job to analyze a dataset, to determine its size, data
+    --     types, data distribution, and more.
+    --
+    -- -   @RECIPE@ - A job to apply one or more transformations to a dataset.
+    type' :: Prelude.Maybe JobType,
+    -- | List of validation configurations that are applied to the profile job.
+    validationConfigurations :: Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration),
+    -- | The unique name of the job.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Job' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'job_accountId' - The ID of the Amazon Web Services account that owns the job.
+--
+-- 'createDate', 'job_createDate' - The date and time that the job was created.
+--
+-- 'createdBy', 'job_createdBy' - The Amazon Resource Name (ARN) of the user who created the job.
+--
+-- 'dataCatalogOutputs', 'job_dataCatalogOutputs' - One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+--
+-- 'databaseOutputs', 'job_databaseOutputs' - Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+--
+-- 'datasetName', 'job_datasetName' - A dataset that the job is to process.
+--
+-- 'encryptionKeyArn', 'job_encryptionKeyArn' - The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job output. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/encryption-security-configuration.html Encrypting data written by DataBrew jobs>
+--
+-- 'encryptionMode', 'job_encryptionMode' - The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+--
+-- 'jobSample', 'job_jobSample' - A sample configuration for profile jobs only, which determines the
+-- number of rows on which the profile job is run. If a @JobSample@ value
+-- isn\'t provided, the default value is used. The default value is
+-- CUSTOM_ROWS for the mode parameter and 20,000 for the size parameter.
+--
+-- 'lastModifiedBy', 'job_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the job.
+--
+-- 'lastModifiedDate', 'job_lastModifiedDate' - The modification date and time of the job.
+--
+-- 'logSubscription', 'job_logSubscription' - The current status of Amazon CloudWatch logging for the job.
+--
+-- 'maxCapacity', 'job_maxCapacity' - The maximum number of nodes that can be consumed when the job processes
+-- data.
+--
+-- 'maxRetries', 'job_maxRetries' - The maximum number of times to retry the job after a job run fails.
+--
+-- 'outputs', 'job_outputs' - One or more artifacts that represent output from running the job.
+--
+-- 'projectName', 'job_projectName' - The name of the project that the job is associated with.
+--
+-- 'recipeReference', 'job_recipeReference' - A set of steps that the job runs.
+--
+-- 'resourceArn', 'job_resourceArn' - The unique Amazon Resource Name (ARN) for the job.
+--
+-- 'roleArn', 'job_roleArn' - The Amazon Resource Name (ARN) of the role to be assumed for this job.
+--
+-- 'tags', 'job_tags' - Metadata tags that have been applied to the job.
+--
+-- 'timeout', 'job_timeout' - The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+--
+-- 'type'', 'job_type' - The job type of the job, which must be one of the following:
+--
+-- -   @PROFILE@ - A job to analyze a dataset, to determine its size, data
+--     types, data distribution, and more.
+--
+-- -   @RECIPE@ - A job to apply one or more transformations to a dataset.
+--
+-- 'validationConfigurations', 'job_validationConfigurations' - List of validation configurations that are applied to the profile job.
+--
+-- 'name', 'job_name' - The unique name of the job.
+newJob ::
+  -- | 'name'
+  Prelude.Text ->
+  Job
+newJob pName_ =
+  Job'
+    { accountId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      dataCatalogOutputs = Prelude.Nothing,
+      databaseOutputs = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      encryptionKeyArn = Prelude.Nothing,
+      encryptionMode = Prelude.Nothing,
+      jobSample = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      maxCapacity = Prelude.Nothing,
+      maxRetries = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      projectName = Prelude.Nothing,
+      recipeReference = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeout = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validationConfigurations = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The ID of the Amazon Web Services account that owns the job.
+job_accountId :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_accountId = Lens.lens (\Job' {accountId} -> accountId) (\s@Job' {} a -> s {accountId = a} :: Job)
+
+-- | The date and time that the job was created.
+job_createDate :: Lens.Lens' Job (Prelude.Maybe Prelude.UTCTime)
+job_createDate = Lens.lens (\Job' {createDate} -> createDate) (\s@Job' {} a -> s {createDate = a} :: Job) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who created the job.
+job_createdBy :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_createdBy = Lens.lens (\Job' {createdBy} -> createdBy) (\s@Job' {} a -> s {createdBy = a} :: Job)
+
+-- | One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+job_dataCatalogOutputs :: Lens.Lens' Job (Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput))
+job_dataCatalogOutputs = Lens.lens (\Job' {dataCatalogOutputs} -> dataCatalogOutputs) (\s@Job' {} a -> s {dataCatalogOutputs = a} :: Job) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+job_databaseOutputs :: Lens.Lens' Job (Prelude.Maybe (Prelude.NonEmpty DatabaseOutput))
+job_databaseOutputs = Lens.lens (\Job' {databaseOutputs} -> databaseOutputs) (\s@Job' {} a -> s {databaseOutputs = a} :: Job) Prelude.. Lens.mapping Lens.coerced
+
+-- | A dataset that the job is to process.
+job_datasetName :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_datasetName = Lens.lens (\Job' {datasetName} -> datasetName) (\s@Job' {} a -> s {datasetName = a} :: Job)
+
+-- | The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job output. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/encryption-security-configuration.html Encrypting data written by DataBrew jobs>
+job_encryptionKeyArn :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_encryptionKeyArn = Lens.lens (\Job' {encryptionKeyArn} -> encryptionKeyArn) (\s@Job' {} a -> s {encryptionKeyArn = a} :: Job)
+
+-- | The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+job_encryptionMode :: Lens.Lens' Job (Prelude.Maybe EncryptionMode)
+job_encryptionMode = Lens.lens (\Job' {encryptionMode} -> encryptionMode) (\s@Job' {} a -> s {encryptionMode = a} :: Job)
+
+-- | A sample configuration for profile jobs only, which determines the
+-- number of rows on which the profile job is run. If a @JobSample@ value
+-- isn\'t provided, the default value is used. The default value is
+-- CUSTOM_ROWS for the mode parameter and 20,000 for the size parameter.
+job_jobSample :: Lens.Lens' Job (Prelude.Maybe JobSample)
+job_jobSample = Lens.lens (\Job' {jobSample} -> jobSample) (\s@Job' {} a -> s {jobSample = a} :: Job)
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the job.
+job_lastModifiedBy :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_lastModifiedBy = Lens.lens (\Job' {lastModifiedBy} -> lastModifiedBy) (\s@Job' {} a -> s {lastModifiedBy = a} :: Job)
+
+-- | The modification date and time of the job.
+job_lastModifiedDate :: Lens.Lens' Job (Prelude.Maybe Prelude.UTCTime)
+job_lastModifiedDate = Lens.lens (\Job' {lastModifiedDate} -> lastModifiedDate) (\s@Job' {} a -> s {lastModifiedDate = a} :: Job) Prelude.. Lens.mapping Data._Time
+
+-- | The current status of Amazon CloudWatch logging for the job.
+job_logSubscription :: Lens.Lens' Job (Prelude.Maybe LogSubscription)
+job_logSubscription = Lens.lens (\Job' {logSubscription} -> logSubscription) (\s@Job' {} a -> s {logSubscription = a} :: Job)
+
+-- | The maximum number of nodes that can be consumed when the job processes
+-- data.
+job_maxCapacity :: Lens.Lens' Job (Prelude.Maybe Prelude.Int)
+job_maxCapacity = Lens.lens (\Job' {maxCapacity} -> maxCapacity) (\s@Job' {} a -> s {maxCapacity = a} :: Job)
+
+-- | The maximum number of times to retry the job after a job run fails.
+job_maxRetries :: Lens.Lens' Job (Prelude.Maybe Prelude.Natural)
+job_maxRetries = Lens.lens (\Job' {maxRetries} -> maxRetries) (\s@Job' {} a -> s {maxRetries = a} :: Job)
+
+-- | One or more artifacts that represent output from running the job.
+job_outputs :: Lens.Lens' Job (Prelude.Maybe (Prelude.NonEmpty Output))
+job_outputs = Lens.lens (\Job' {outputs} -> outputs) (\s@Job' {} a -> s {outputs = a} :: Job) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the project that the job is associated with.
+job_projectName :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_projectName = Lens.lens (\Job' {projectName} -> projectName) (\s@Job' {} a -> s {projectName = a} :: Job)
+
+-- | A set of steps that the job runs.
+job_recipeReference :: Lens.Lens' Job (Prelude.Maybe RecipeReference)
+job_recipeReference = Lens.lens (\Job' {recipeReference} -> recipeReference) (\s@Job' {} a -> s {recipeReference = a} :: Job)
+
+-- | The unique Amazon Resource Name (ARN) for the job.
+job_resourceArn :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_resourceArn = Lens.lens (\Job' {resourceArn} -> resourceArn) (\s@Job' {} a -> s {resourceArn = a} :: Job)
+
+-- | The Amazon Resource Name (ARN) of the role to be assumed for this job.
+job_roleArn :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_roleArn = Lens.lens (\Job' {roleArn} -> roleArn) (\s@Job' {} a -> s {roleArn = a} :: Job)
+
+-- | Metadata tags that have been applied to the job.
+job_tags :: Lens.Lens' Job (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+job_tags = Lens.lens (\Job' {tags} -> tags) (\s@Job' {} a -> s {tags = a} :: Job) Prelude.. Lens.mapping Lens.coerced
+
+-- | The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+job_timeout :: Lens.Lens' Job (Prelude.Maybe Prelude.Natural)
+job_timeout = Lens.lens (\Job' {timeout} -> timeout) (\s@Job' {} a -> s {timeout = a} :: Job)
+
+-- | The job type of the job, which must be one of the following:
+--
+-- -   @PROFILE@ - A job to analyze a dataset, to determine its size, data
+--     types, data distribution, and more.
+--
+-- -   @RECIPE@ - A job to apply one or more transformations to a dataset.
+job_type :: Lens.Lens' Job (Prelude.Maybe JobType)
+job_type = Lens.lens (\Job' {type'} -> type') (\s@Job' {} a -> s {type' = a} :: Job)
+
+-- | List of validation configurations that are applied to the profile job.
+job_validationConfigurations :: Lens.Lens' Job (Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration))
+job_validationConfigurations = Lens.lens (\Job' {validationConfigurations} -> validationConfigurations) (\s@Job' {} a -> s {validationConfigurations = a} :: Job) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the job.
+job_name :: Lens.Lens' Job Prelude.Text
+job_name = Lens.lens (\Job' {name} -> name) (\s@Job' {} a -> s {name = a} :: Job)
+
+instance Data.FromJSON Job where
+  parseJSON =
+    Data.withObject
+      "Job"
+      ( \x ->
+          Job'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "CreatedBy")
+            Prelude.<*> (x Data..:? "DataCatalogOutputs")
+            Prelude.<*> (x Data..:? "DatabaseOutputs")
+            Prelude.<*> (x Data..:? "DatasetName")
+            Prelude.<*> (x Data..:? "EncryptionKeyArn")
+            Prelude.<*> (x Data..:? "EncryptionMode")
+            Prelude.<*> (x Data..:? "JobSample")
+            Prelude.<*> (x Data..:? "LastModifiedBy")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "LogSubscription")
+            Prelude.<*> (x Data..:? "MaxCapacity")
+            Prelude.<*> (x Data..:? "MaxRetries")
+            Prelude.<*> (x Data..:? "Outputs")
+            Prelude.<*> (x Data..:? "ProjectName")
+            Prelude.<*> (x Data..:? "RecipeReference")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Timeout")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "ValidationConfigurations")
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable Job where
+  hashWithSalt _salt Job' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` dataCatalogOutputs
+      `Prelude.hashWithSalt` databaseOutputs
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` encryptionKeyArn
+      `Prelude.hashWithSalt` encryptionMode
+      `Prelude.hashWithSalt` jobSample
+      `Prelude.hashWithSalt` lastModifiedBy
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` logSubscription
+      `Prelude.hashWithSalt` maxCapacity
+      `Prelude.hashWithSalt` maxRetries
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` projectName
+      `Prelude.hashWithSalt` recipeReference
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeout
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validationConfigurations
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Job where
+  rnf Job' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf dataCatalogOutputs
+      `Prelude.seq` Prelude.rnf databaseOutputs
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf encryptionMode
+      `Prelude.seq` Prelude.rnf jobSample
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf maxCapacity
+      `Prelude.seq` Prelude.rnf maxRetries
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf projectName
+      `Prelude.seq` Prelude.rnf recipeReference
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf
+        validationConfigurations
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/Types/JobRun.hs b/gen/Amazonka/DataBrew/Types/JobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/JobRun.hs
@@ -0,0 +1,312 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.JobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.JobRun where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DataCatalogOutput
+import Amazonka.DataBrew.Types.DatabaseOutput
+import Amazonka.DataBrew.Types.JobRunState
+import Amazonka.DataBrew.Types.JobSample
+import Amazonka.DataBrew.Types.LogSubscription
+import Amazonka.DataBrew.Types.Output
+import Amazonka.DataBrew.Types.RecipeReference
+import Amazonka.DataBrew.Types.ValidationConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents one run of a DataBrew job.
+--
+-- /See:/ 'newJobRun' smart constructor.
+data JobRun = JobRun'
+  { -- | The number of times that DataBrew has attempted to run the job.
+    attempt :: Prelude.Maybe Prelude.Int,
+    -- | The date and time when the job completed processing.
+    completedOn :: Prelude.Maybe Data.POSIX,
+    -- | One or more artifacts that represent the Glue Data Catalog output from
+    -- running the job.
+    dataCatalogOutputs :: Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput),
+    -- | Represents a list of JDBC database output objects which defines the
+    -- output destination for a DataBrew recipe job to write into.
+    databaseOutputs :: Prelude.Maybe (Prelude.NonEmpty DatabaseOutput),
+    -- | The name of the dataset for the job to process.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | A message indicating an error (if any) that was encountered when the job
+    -- ran.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time, in seconds, during which a job run consumed
+    -- resources.
+    executionTime :: Prelude.Maybe Prelude.Int,
+    -- | The name of the job being processed during this run.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | A sample configuration for profile jobs only, which determines the
+    -- number of rows on which the profile job is run. If a @JobSample@ value
+    -- isn\'t provided, the default is used. The default value is CUSTOM_ROWS
+    -- for the mode parameter and 20,000 for the size parameter.
+    jobSample :: Prelude.Maybe JobSample,
+    -- | The name of an Amazon CloudWatch log group, where the job writes
+    -- diagnostic messages when it runs.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of Amazon CloudWatch logging for the job run.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | One or more output artifacts from a job run.
+    outputs :: Prelude.Maybe (Prelude.NonEmpty Output),
+    -- | The set of steps processed by the job.
+    recipeReference :: Prelude.Maybe RecipeReference,
+    -- | The unique identifier of the job run.
+    runId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who initiated the job run.
+    startedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the job run began.
+    startedOn :: Prelude.Maybe Data.POSIX,
+    -- | The current state of the job run entity itself.
+    state :: Prelude.Maybe JobRunState,
+    -- | List of validation configurations that are applied to the profile job
+    -- run.
+    validationConfigurations :: Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attempt', 'jobRun_attempt' - The number of times that DataBrew has attempted to run the job.
+--
+-- 'completedOn', 'jobRun_completedOn' - The date and time when the job completed processing.
+--
+-- 'dataCatalogOutputs', 'jobRun_dataCatalogOutputs' - One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+--
+-- 'databaseOutputs', 'jobRun_databaseOutputs' - Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+--
+-- 'datasetName', 'jobRun_datasetName' - The name of the dataset for the job to process.
+--
+-- 'errorMessage', 'jobRun_errorMessage' - A message indicating an error (if any) that was encountered when the job
+-- ran.
+--
+-- 'executionTime', 'jobRun_executionTime' - The amount of time, in seconds, during which a job run consumed
+-- resources.
+--
+-- 'jobName', 'jobRun_jobName' - The name of the job being processed during this run.
+--
+-- 'jobSample', 'jobRun_jobSample' - A sample configuration for profile jobs only, which determines the
+-- number of rows on which the profile job is run. If a @JobSample@ value
+-- isn\'t provided, the default is used. The default value is CUSTOM_ROWS
+-- for the mode parameter and 20,000 for the size parameter.
+--
+-- 'logGroupName', 'jobRun_logGroupName' - The name of an Amazon CloudWatch log group, where the job writes
+-- diagnostic messages when it runs.
+--
+-- 'logSubscription', 'jobRun_logSubscription' - The current status of Amazon CloudWatch logging for the job run.
+--
+-- 'outputs', 'jobRun_outputs' - One or more output artifacts from a job run.
+--
+-- 'recipeReference', 'jobRun_recipeReference' - The set of steps processed by the job.
+--
+-- 'runId', 'jobRun_runId' - The unique identifier of the job run.
+--
+-- 'startedBy', 'jobRun_startedBy' - The Amazon Resource Name (ARN) of the user who initiated the job run.
+--
+-- 'startedOn', 'jobRun_startedOn' - The date and time when the job run began.
+--
+-- 'state', 'jobRun_state' - The current state of the job run entity itself.
+--
+-- 'validationConfigurations', 'jobRun_validationConfigurations' - List of validation configurations that are applied to the profile job
+-- run.
+newJobRun ::
+  JobRun
+newJobRun =
+  JobRun'
+    { attempt = Prelude.Nothing,
+      completedOn = Prelude.Nothing,
+      dataCatalogOutputs = Prelude.Nothing,
+      databaseOutputs = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      executionTime = Prelude.Nothing,
+      jobName = Prelude.Nothing,
+      jobSample = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      recipeReference = Prelude.Nothing,
+      runId = Prelude.Nothing,
+      startedBy = Prelude.Nothing,
+      startedOn = Prelude.Nothing,
+      state = Prelude.Nothing,
+      validationConfigurations = Prelude.Nothing
+    }
+
+-- | The number of times that DataBrew has attempted to run the job.
+jobRun_attempt :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Int)
+jobRun_attempt = Lens.lens (\JobRun' {attempt} -> attempt) (\s@JobRun' {} a -> s {attempt = a} :: JobRun)
+
+-- | The date and time when the job completed processing.
+jobRun_completedOn :: Lens.Lens' JobRun (Prelude.Maybe Prelude.UTCTime)
+jobRun_completedOn = Lens.lens (\JobRun' {completedOn} -> completedOn) (\s@JobRun' {} a -> s {completedOn = a} :: JobRun) Prelude.. Lens.mapping Data._Time
+
+-- | One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+jobRun_dataCatalogOutputs :: Lens.Lens' JobRun (Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput))
+jobRun_dataCatalogOutputs = Lens.lens (\JobRun' {dataCatalogOutputs} -> dataCatalogOutputs) (\s@JobRun' {} a -> s {dataCatalogOutputs = a} :: JobRun) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+jobRun_databaseOutputs :: Lens.Lens' JobRun (Prelude.Maybe (Prelude.NonEmpty DatabaseOutput))
+jobRun_databaseOutputs = Lens.lens (\JobRun' {databaseOutputs} -> databaseOutputs) (\s@JobRun' {} a -> s {databaseOutputs = a} :: JobRun) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dataset for the job to process.
+jobRun_datasetName :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_datasetName = Lens.lens (\JobRun' {datasetName} -> datasetName) (\s@JobRun' {} a -> s {datasetName = a} :: JobRun)
+
+-- | A message indicating an error (if any) that was encountered when the job
+-- ran.
+jobRun_errorMessage :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_errorMessage = Lens.lens (\JobRun' {errorMessage} -> errorMessage) (\s@JobRun' {} a -> s {errorMessage = a} :: JobRun)
+
+-- | The amount of time, in seconds, during which a job run consumed
+-- resources.
+jobRun_executionTime :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Int)
+jobRun_executionTime = Lens.lens (\JobRun' {executionTime} -> executionTime) (\s@JobRun' {} a -> s {executionTime = a} :: JobRun)
+
+-- | The name of the job being processed during this run.
+jobRun_jobName :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_jobName = Lens.lens (\JobRun' {jobName} -> jobName) (\s@JobRun' {} a -> s {jobName = a} :: JobRun)
+
+-- | A sample configuration for profile jobs only, which determines the
+-- number of rows on which the profile job is run. If a @JobSample@ value
+-- isn\'t provided, the default is used. The default value is CUSTOM_ROWS
+-- for the mode parameter and 20,000 for the size parameter.
+jobRun_jobSample :: Lens.Lens' JobRun (Prelude.Maybe JobSample)
+jobRun_jobSample = Lens.lens (\JobRun' {jobSample} -> jobSample) (\s@JobRun' {} a -> s {jobSample = a} :: JobRun)
+
+-- | The name of an Amazon CloudWatch log group, where the job writes
+-- diagnostic messages when it runs.
+jobRun_logGroupName :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_logGroupName = Lens.lens (\JobRun' {logGroupName} -> logGroupName) (\s@JobRun' {} a -> s {logGroupName = a} :: JobRun)
+
+-- | The current status of Amazon CloudWatch logging for the job run.
+jobRun_logSubscription :: Lens.Lens' JobRun (Prelude.Maybe LogSubscription)
+jobRun_logSubscription = Lens.lens (\JobRun' {logSubscription} -> logSubscription) (\s@JobRun' {} a -> s {logSubscription = a} :: JobRun)
+
+-- | One or more output artifacts from a job run.
+jobRun_outputs :: Lens.Lens' JobRun (Prelude.Maybe (Prelude.NonEmpty Output))
+jobRun_outputs = Lens.lens (\JobRun' {outputs} -> outputs) (\s@JobRun' {} a -> s {outputs = a} :: JobRun) Prelude.. Lens.mapping Lens.coerced
+
+-- | The set of steps processed by the job.
+jobRun_recipeReference :: Lens.Lens' JobRun (Prelude.Maybe RecipeReference)
+jobRun_recipeReference = Lens.lens (\JobRun' {recipeReference} -> recipeReference) (\s@JobRun' {} a -> s {recipeReference = a} :: JobRun)
+
+-- | The unique identifier of the job run.
+jobRun_runId :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_runId = Lens.lens (\JobRun' {runId} -> runId) (\s@JobRun' {} a -> s {runId = a} :: JobRun)
+
+-- | The Amazon Resource Name (ARN) of the user who initiated the job run.
+jobRun_startedBy :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_startedBy = Lens.lens (\JobRun' {startedBy} -> startedBy) (\s@JobRun' {} a -> s {startedBy = a} :: JobRun)
+
+-- | The date and time when the job run began.
+jobRun_startedOn :: Lens.Lens' JobRun (Prelude.Maybe Prelude.UTCTime)
+jobRun_startedOn = Lens.lens (\JobRun' {startedOn} -> startedOn) (\s@JobRun' {} a -> s {startedOn = a} :: JobRun) Prelude.. Lens.mapping Data._Time
+
+-- | The current state of the job run entity itself.
+jobRun_state :: Lens.Lens' JobRun (Prelude.Maybe JobRunState)
+jobRun_state = Lens.lens (\JobRun' {state} -> state) (\s@JobRun' {} a -> s {state = a} :: JobRun)
+
+-- | List of validation configurations that are applied to the profile job
+-- run.
+jobRun_validationConfigurations :: Lens.Lens' JobRun (Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration))
+jobRun_validationConfigurations = Lens.lens (\JobRun' {validationConfigurations} -> validationConfigurations) (\s@JobRun' {} a -> s {validationConfigurations = a} :: JobRun) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON JobRun where
+  parseJSON =
+    Data.withObject
+      "JobRun"
+      ( \x ->
+          JobRun'
+            Prelude.<$> (x Data..:? "Attempt")
+            Prelude.<*> (x Data..:? "CompletedOn")
+            Prelude.<*> (x Data..:? "DataCatalogOutputs")
+            Prelude.<*> (x Data..:? "DatabaseOutputs")
+            Prelude.<*> (x Data..:? "DatasetName")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ExecutionTime")
+            Prelude.<*> (x Data..:? "JobName")
+            Prelude.<*> (x Data..:? "JobSample")
+            Prelude.<*> (x Data..:? "LogGroupName")
+            Prelude.<*> (x Data..:? "LogSubscription")
+            Prelude.<*> (x Data..:? "Outputs")
+            Prelude.<*> (x Data..:? "RecipeReference")
+            Prelude.<*> (x Data..:? "RunId")
+            Prelude.<*> (x Data..:? "StartedBy")
+            Prelude.<*> (x Data..:? "StartedOn")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "ValidationConfigurations")
+      )
+
+instance Prelude.Hashable JobRun where
+  hashWithSalt _salt JobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` attempt
+      `Prelude.hashWithSalt` completedOn
+      `Prelude.hashWithSalt` dataCatalogOutputs
+      `Prelude.hashWithSalt` databaseOutputs
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` executionTime
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` jobSample
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logSubscription
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` recipeReference
+      `Prelude.hashWithSalt` runId
+      `Prelude.hashWithSalt` startedBy
+      `Prelude.hashWithSalt` startedOn
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` validationConfigurations
+
+instance Prelude.NFData JobRun where
+  rnf JobRun' {..} =
+    Prelude.rnf attempt
+      `Prelude.seq` Prelude.rnf completedOn
+      `Prelude.seq` Prelude.rnf dataCatalogOutputs
+      `Prelude.seq` Prelude.rnf databaseOutputs
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf executionTime
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf jobSample
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf recipeReference
+      `Prelude.seq` Prelude.rnf runId
+      `Prelude.seq` Prelude.rnf startedBy
+      `Prelude.seq` Prelude.rnf startedOn
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf
+        validationConfigurations
diff --git a/gen/Amazonka/DataBrew/Types/JobRunState.hs b/gen/Amazonka/DataBrew/Types/JobRunState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/JobRunState.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.JobRunState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.JobRunState
+  ( JobRunState
+      ( ..,
+        JobRunState_FAILED,
+        JobRunState_RUNNING,
+        JobRunState_STARTING,
+        JobRunState_STOPPED,
+        JobRunState_STOPPING,
+        JobRunState_SUCCEEDED,
+        JobRunState_TIMEOUT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobRunState = JobRunState'
+  { fromJobRunState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobRunState_FAILED :: JobRunState
+pattern JobRunState_FAILED = JobRunState' "FAILED"
+
+pattern JobRunState_RUNNING :: JobRunState
+pattern JobRunState_RUNNING = JobRunState' "RUNNING"
+
+pattern JobRunState_STARTING :: JobRunState
+pattern JobRunState_STARTING = JobRunState' "STARTING"
+
+pattern JobRunState_STOPPED :: JobRunState
+pattern JobRunState_STOPPED = JobRunState' "STOPPED"
+
+pattern JobRunState_STOPPING :: JobRunState
+pattern JobRunState_STOPPING = JobRunState' "STOPPING"
+
+pattern JobRunState_SUCCEEDED :: JobRunState
+pattern JobRunState_SUCCEEDED = JobRunState' "SUCCEEDED"
+
+pattern JobRunState_TIMEOUT :: JobRunState
+pattern JobRunState_TIMEOUT = JobRunState' "TIMEOUT"
+
+{-# COMPLETE
+  JobRunState_FAILED,
+  JobRunState_RUNNING,
+  JobRunState_STARTING,
+  JobRunState_STOPPED,
+  JobRunState_STOPPING,
+  JobRunState_SUCCEEDED,
+  JobRunState_TIMEOUT,
+  JobRunState'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/JobSample.hs b/gen/Amazonka/DataBrew/Types/JobSample.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/JobSample.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.JobSample
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.JobSample where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.SampleMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | A sample configuration for profile jobs only, which determines the
+-- number of rows on which the profile job is run. If a @JobSample@ value
+-- isn\'t provided, the default is used. The default value is CUSTOM_ROWS
+-- for the mode parameter and 20,000 for the size parameter.
+--
+-- /See:/ 'newJobSample' smart constructor.
+data JobSample = JobSample'
+  { -- | A value that determines whether the profile job is run on the entire
+    -- dataset or a specified number of rows. This value must be one of the
+    -- following:
+    --
+    -- -   FULL_DATASET - The profile job is run on the entire dataset.
+    --
+    -- -   CUSTOM_ROWS - The profile job is run on the number of rows specified
+    --     in the @Size@ parameter.
+    mode :: Prelude.Maybe SampleMode,
+    -- | The @Size@ parameter is only required when the mode is CUSTOM_ROWS. The
+    -- profile job is run on the specified number of rows. The maximum value
+    -- for size is Long.MAX_VALUE.
+    --
+    -- Long.MAX_VALUE = 9223372036854775807
+    size :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobSample' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mode', 'jobSample_mode' - A value that determines whether the profile job is run on the entire
+-- dataset or a specified number of rows. This value must be one of the
+-- following:
+--
+-- -   FULL_DATASET - The profile job is run on the entire dataset.
+--
+-- -   CUSTOM_ROWS - The profile job is run on the number of rows specified
+--     in the @Size@ parameter.
+--
+-- 'size', 'jobSample_size' - The @Size@ parameter is only required when the mode is CUSTOM_ROWS. The
+-- profile job is run on the specified number of rows. The maximum value
+-- for size is Long.MAX_VALUE.
+--
+-- Long.MAX_VALUE = 9223372036854775807
+newJobSample ::
+  JobSample
+newJobSample =
+  JobSample'
+    { mode = Prelude.Nothing,
+      size = Prelude.Nothing
+    }
+
+-- | A value that determines whether the profile job is run on the entire
+-- dataset or a specified number of rows. This value must be one of the
+-- following:
+--
+-- -   FULL_DATASET - The profile job is run on the entire dataset.
+--
+-- -   CUSTOM_ROWS - The profile job is run on the number of rows specified
+--     in the @Size@ parameter.
+jobSample_mode :: Lens.Lens' JobSample (Prelude.Maybe SampleMode)
+jobSample_mode = Lens.lens (\JobSample' {mode} -> mode) (\s@JobSample' {} a -> s {mode = a} :: JobSample)
+
+-- | The @Size@ parameter is only required when the mode is CUSTOM_ROWS. The
+-- profile job is run on the specified number of rows. The maximum value
+-- for size is Long.MAX_VALUE.
+--
+-- Long.MAX_VALUE = 9223372036854775807
+jobSample_size :: Lens.Lens' JobSample (Prelude.Maybe Prelude.Integer)
+jobSample_size = Lens.lens (\JobSample' {size} -> size) (\s@JobSample' {} a -> s {size = a} :: JobSample)
+
+instance Data.FromJSON JobSample where
+  parseJSON =
+    Data.withObject
+      "JobSample"
+      ( \x ->
+          JobSample'
+            Prelude.<$> (x Data..:? "Mode")
+            Prelude.<*> (x Data..:? "Size")
+      )
+
+instance Prelude.Hashable JobSample where
+  hashWithSalt _salt JobSample' {..} =
+    _salt
+      `Prelude.hashWithSalt` mode
+      `Prelude.hashWithSalt` size
+
+instance Prelude.NFData JobSample where
+  rnf JobSample' {..} =
+    Prelude.rnf mode `Prelude.seq` Prelude.rnf size
+
+instance Data.ToJSON JobSample where
+  toJSON JobSample' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Mode" Data..=) Prelude.<$> mode,
+            ("Size" Data..=) Prelude.<$> size
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/JobType.hs b/gen/Amazonka/DataBrew/Types/JobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/JobType.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.JobType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.JobType
+  ( JobType
+      ( ..,
+        JobType_PROFILE,
+        JobType_RECIPE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobType = JobType' {fromJobType :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobType_PROFILE :: JobType
+pattern JobType_PROFILE = JobType' "PROFILE"
+
+pattern JobType_RECIPE :: JobType
+pattern JobType_RECIPE = JobType' "RECIPE"
+
+{-# COMPLETE
+  JobType_PROFILE,
+  JobType_RECIPE,
+  JobType'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/JsonOptions.hs b/gen/Amazonka/DataBrew/Types/JsonOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/JsonOptions.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.JsonOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.JsonOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the JSON-specific options that define how input is to be
+-- interpreted by Glue DataBrew.
+--
+-- /See:/ 'newJsonOptions' smart constructor.
+data JsonOptions = JsonOptions'
+  { -- | A value that specifies whether JSON input contains embedded new line
+    -- characters.
+    multiLine :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JsonOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'multiLine', 'jsonOptions_multiLine' - A value that specifies whether JSON input contains embedded new line
+-- characters.
+newJsonOptions ::
+  JsonOptions
+newJsonOptions =
+  JsonOptions' {multiLine = Prelude.Nothing}
+
+-- | A value that specifies whether JSON input contains embedded new line
+-- characters.
+jsonOptions_multiLine :: Lens.Lens' JsonOptions (Prelude.Maybe Prelude.Bool)
+jsonOptions_multiLine = Lens.lens (\JsonOptions' {multiLine} -> multiLine) (\s@JsonOptions' {} a -> s {multiLine = a} :: JsonOptions)
+
+instance Data.FromJSON JsonOptions where
+  parseJSON =
+    Data.withObject
+      "JsonOptions"
+      ( \x ->
+          JsonOptions' Prelude.<$> (x Data..:? "MultiLine")
+      )
+
+instance Prelude.Hashable JsonOptions where
+  hashWithSalt _salt JsonOptions' {..} =
+    _salt `Prelude.hashWithSalt` multiLine
+
+instance Prelude.NFData JsonOptions where
+  rnf JsonOptions' {..} = Prelude.rnf multiLine
+
+instance Data.ToJSON JsonOptions where
+  toJSON JsonOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("MultiLine" Data..=) Prelude.<$> multiLine]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/LogSubscription.hs b/gen/Amazonka/DataBrew/Types/LogSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/LogSubscription.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.LogSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.LogSubscription
+  ( LogSubscription
+      ( ..,
+        LogSubscription_DISABLE,
+        LogSubscription_ENABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogSubscription = LogSubscription'
+  { fromLogSubscription ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LogSubscription_DISABLE :: LogSubscription
+pattern LogSubscription_DISABLE = LogSubscription' "DISABLE"
+
+pattern LogSubscription_ENABLE :: LogSubscription
+pattern LogSubscription_ENABLE = LogSubscription' "ENABLE"
+
+{-# COMPLETE
+  LogSubscription_DISABLE,
+  LogSubscription_ENABLE,
+  LogSubscription'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/Metadata.hs b/gen/Amazonka/DataBrew/Types/Metadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Metadata.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Metadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Metadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains additional resource information needed for specific datasets.
+--
+-- /See:/ 'newMetadata' smart constructor.
+data Metadata = Metadata'
+  { -- | The Amazon Resource Name (ARN) associated with the dataset. Currently,
+    -- DataBrew only supports ARNs from Amazon AppFlow.
+    sourceArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Metadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceArn', 'metadata_sourceArn' - The Amazon Resource Name (ARN) associated with the dataset. Currently,
+-- DataBrew only supports ARNs from Amazon AppFlow.
+newMetadata ::
+  Metadata
+newMetadata = Metadata' {sourceArn = Prelude.Nothing}
+
+-- | The Amazon Resource Name (ARN) associated with the dataset. Currently,
+-- DataBrew only supports ARNs from Amazon AppFlow.
+metadata_sourceArn :: Lens.Lens' Metadata (Prelude.Maybe Prelude.Text)
+metadata_sourceArn = Lens.lens (\Metadata' {sourceArn} -> sourceArn) (\s@Metadata' {} a -> s {sourceArn = a} :: Metadata)
+
+instance Data.FromJSON Metadata where
+  parseJSON =
+    Data.withObject
+      "Metadata"
+      ( \x ->
+          Metadata' Prelude.<$> (x Data..:? "SourceArn")
+      )
+
+instance Prelude.Hashable Metadata where
+  hashWithSalt _salt Metadata' {..} =
+    _salt `Prelude.hashWithSalt` sourceArn
+
+instance Prelude.NFData Metadata where
+  rnf Metadata' {..} = Prelude.rnf sourceArn
+
+instance Data.ToJSON Metadata where
+  toJSON Metadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("SourceArn" Data..=) Prelude.<$> sourceArn]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/Order.hs b/gen/Amazonka/DataBrew/Types/Order.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Order.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Order
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Order
+  ( Order
+      ( ..,
+        Order_ASCENDING,
+        Order_DESCENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Order = Order' {fromOrder :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Order_ASCENDING :: Order
+pattern Order_ASCENDING = Order' "ASCENDING"
+
+pattern Order_DESCENDING :: Order
+pattern Order_DESCENDING = Order' "DESCENDING"
+
+{-# COMPLETE
+  Order_ASCENDING,
+  Order_DESCENDING,
+  Order'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/OrderedBy.hs b/gen/Amazonka/DataBrew/Types/OrderedBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/OrderedBy.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.OrderedBy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.OrderedBy
+  ( OrderedBy
+      ( ..,
+        OrderedBy_LAST_MODIFIED_DATE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OrderedBy = OrderedBy'
+  { fromOrderedBy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OrderedBy_LAST_MODIFIED_DATE :: OrderedBy
+pattern OrderedBy_LAST_MODIFIED_DATE = OrderedBy' "LAST_MODIFIED_DATE"
+
+{-# COMPLETE
+  OrderedBy_LAST_MODIFIED_DATE,
+  OrderedBy'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/Output.hs b/gen/Amazonka/DataBrew/Types/Output.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Output.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Output
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Output where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.CompressionFormat
+import Amazonka.DataBrew.Types.OutputFormat
+import Amazonka.DataBrew.Types.OutputFormatOptions
+import Amazonka.DataBrew.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents options that specify how and where in Amazon S3 DataBrew
+-- writes the output generated by recipe jobs or profile jobs.
+--
+-- /See:/ 'newOutput' smart constructor.
+data Output = Output'
+  { -- | The compression algorithm used to compress the output text of the job.
+    compressionFormat :: Prelude.Maybe CompressionFormat,
+    -- | The data format of the output of the job.
+    format :: Prelude.Maybe OutputFormat,
+    -- | Represents options that define how DataBrew formats job output files.
+    formatOptions :: Prelude.Maybe OutputFormatOptions,
+    -- | Maximum number of files to be generated by the job and written to the
+    -- output folder. For output partitioned by column(s), the MaxOutputFiles
+    -- value is the maximum number of files per partition.
+    maxOutputFiles :: Prelude.Maybe Prelude.Natural,
+    -- | A value that, if true, means that any data in the location specified for
+    -- output is overwritten with new output.
+    overwrite :: Prelude.Maybe Prelude.Bool,
+    -- | The names of one or more partition columns for the output of the job.
+    partitionColumns :: Prelude.Maybe [Prelude.Text],
+    -- | The location in Amazon S3 where the job writes its output.
+    location :: S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Output' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'compressionFormat', 'output_compressionFormat' - The compression algorithm used to compress the output text of the job.
+--
+-- 'format', 'output_format' - The data format of the output of the job.
+--
+-- 'formatOptions', 'output_formatOptions' - Represents options that define how DataBrew formats job output files.
+--
+-- 'maxOutputFiles', 'output_maxOutputFiles' - Maximum number of files to be generated by the job and written to the
+-- output folder. For output partitioned by column(s), the MaxOutputFiles
+-- value is the maximum number of files per partition.
+--
+-- 'overwrite', 'output_overwrite' - A value that, if true, means that any data in the location specified for
+-- output is overwritten with new output.
+--
+-- 'partitionColumns', 'output_partitionColumns' - The names of one or more partition columns for the output of the job.
+--
+-- 'location', 'output_location' - The location in Amazon S3 where the job writes its output.
+newOutput ::
+  -- | 'location'
+  S3Location ->
+  Output
+newOutput pLocation_ =
+  Output'
+    { compressionFormat = Prelude.Nothing,
+      format = Prelude.Nothing,
+      formatOptions = Prelude.Nothing,
+      maxOutputFiles = Prelude.Nothing,
+      overwrite = Prelude.Nothing,
+      partitionColumns = Prelude.Nothing,
+      location = pLocation_
+    }
+
+-- | The compression algorithm used to compress the output text of the job.
+output_compressionFormat :: Lens.Lens' Output (Prelude.Maybe CompressionFormat)
+output_compressionFormat = Lens.lens (\Output' {compressionFormat} -> compressionFormat) (\s@Output' {} a -> s {compressionFormat = a} :: Output)
+
+-- | The data format of the output of the job.
+output_format :: Lens.Lens' Output (Prelude.Maybe OutputFormat)
+output_format = Lens.lens (\Output' {format} -> format) (\s@Output' {} a -> s {format = a} :: Output)
+
+-- | Represents options that define how DataBrew formats job output files.
+output_formatOptions :: Lens.Lens' Output (Prelude.Maybe OutputFormatOptions)
+output_formatOptions = Lens.lens (\Output' {formatOptions} -> formatOptions) (\s@Output' {} a -> s {formatOptions = a} :: Output)
+
+-- | Maximum number of files to be generated by the job and written to the
+-- output folder. For output partitioned by column(s), the MaxOutputFiles
+-- value is the maximum number of files per partition.
+output_maxOutputFiles :: Lens.Lens' Output (Prelude.Maybe Prelude.Natural)
+output_maxOutputFiles = Lens.lens (\Output' {maxOutputFiles} -> maxOutputFiles) (\s@Output' {} a -> s {maxOutputFiles = a} :: Output)
+
+-- | A value that, if true, means that any data in the location specified for
+-- output is overwritten with new output.
+output_overwrite :: Lens.Lens' Output (Prelude.Maybe Prelude.Bool)
+output_overwrite = Lens.lens (\Output' {overwrite} -> overwrite) (\s@Output' {} a -> s {overwrite = a} :: Output)
+
+-- | The names of one or more partition columns for the output of the job.
+output_partitionColumns :: Lens.Lens' Output (Prelude.Maybe [Prelude.Text])
+output_partitionColumns = Lens.lens (\Output' {partitionColumns} -> partitionColumns) (\s@Output' {} a -> s {partitionColumns = a} :: Output) Prelude.. Lens.mapping Lens.coerced
+
+-- | The location in Amazon S3 where the job writes its output.
+output_location :: Lens.Lens' Output S3Location
+output_location = Lens.lens (\Output' {location} -> location) (\s@Output' {} a -> s {location = a} :: Output)
+
+instance Data.FromJSON Output where
+  parseJSON =
+    Data.withObject
+      "Output"
+      ( \x ->
+          Output'
+            Prelude.<$> (x Data..:? "CompressionFormat")
+            Prelude.<*> (x Data..:? "Format")
+            Prelude.<*> (x Data..:? "FormatOptions")
+            Prelude.<*> (x Data..:? "MaxOutputFiles")
+            Prelude.<*> (x Data..:? "Overwrite")
+            Prelude.<*> ( x
+                            Data..:? "PartitionColumns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "Location")
+      )
+
+instance Prelude.Hashable Output where
+  hashWithSalt _salt Output' {..} =
+    _salt
+      `Prelude.hashWithSalt` compressionFormat
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` formatOptions
+      `Prelude.hashWithSalt` maxOutputFiles
+      `Prelude.hashWithSalt` overwrite
+      `Prelude.hashWithSalt` partitionColumns
+      `Prelude.hashWithSalt` location
+
+instance Prelude.NFData Output where
+  rnf Output' {..} =
+    Prelude.rnf compressionFormat
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf formatOptions
+      `Prelude.seq` Prelude.rnf maxOutputFiles
+      `Prelude.seq` Prelude.rnf overwrite
+      `Prelude.seq` Prelude.rnf partitionColumns
+      `Prelude.seq` Prelude.rnf location
+
+instance Data.ToJSON Output where
+  toJSON Output' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CompressionFormat" Data..=)
+              Prelude.<$> compressionFormat,
+            ("Format" Data..=) Prelude.<$> format,
+            ("FormatOptions" Data..=) Prelude.<$> formatOptions,
+            ("MaxOutputFiles" Data..=)
+              Prelude.<$> maxOutputFiles,
+            ("Overwrite" Data..=) Prelude.<$> overwrite,
+            ("PartitionColumns" Data..=)
+              Prelude.<$> partitionColumns,
+            Prelude.Just ("Location" Data..= location)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/OutputFormat.hs b/gen/Amazonka/DataBrew/Types/OutputFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/OutputFormat.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.OutputFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.OutputFormat
+  ( OutputFormat
+      ( ..,
+        OutputFormat_AVRO,
+        OutputFormat_CSV,
+        OutputFormat_GLUEPARQUET,
+        OutputFormat_JSON,
+        OutputFormat_ORC,
+        OutputFormat_PARQUET,
+        OutputFormat_TABLEAUHYPER,
+        OutputFormat_XML
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OutputFormat = OutputFormat'
+  { fromOutputFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OutputFormat_AVRO :: OutputFormat
+pattern OutputFormat_AVRO = OutputFormat' "AVRO"
+
+pattern OutputFormat_CSV :: OutputFormat
+pattern OutputFormat_CSV = OutputFormat' "CSV"
+
+pattern OutputFormat_GLUEPARQUET :: OutputFormat
+pattern OutputFormat_GLUEPARQUET = OutputFormat' "GLUEPARQUET"
+
+pattern OutputFormat_JSON :: OutputFormat
+pattern OutputFormat_JSON = OutputFormat' "JSON"
+
+pattern OutputFormat_ORC :: OutputFormat
+pattern OutputFormat_ORC = OutputFormat' "ORC"
+
+pattern OutputFormat_PARQUET :: OutputFormat
+pattern OutputFormat_PARQUET = OutputFormat' "PARQUET"
+
+pattern OutputFormat_TABLEAUHYPER :: OutputFormat
+pattern OutputFormat_TABLEAUHYPER = OutputFormat' "TABLEAUHYPER"
+
+pattern OutputFormat_XML :: OutputFormat
+pattern OutputFormat_XML = OutputFormat' "XML"
+
+{-# COMPLETE
+  OutputFormat_AVRO,
+  OutputFormat_CSV,
+  OutputFormat_GLUEPARQUET,
+  OutputFormat_JSON,
+  OutputFormat_ORC,
+  OutputFormat_PARQUET,
+  OutputFormat_TABLEAUHYPER,
+  OutputFormat_XML,
+  OutputFormat'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/OutputFormatOptions.hs b/gen/Amazonka/DataBrew/Types/OutputFormatOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/OutputFormatOptions.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.OutputFormatOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.OutputFormatOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.CsvOutputOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a set of options that define the structure of comma-separated
+-- (CSV) job output.
+--
+-- /See:/ 'newOutputFormatOptions' smart constructor.
+data OutputFormatOptions = OutputFormatOptions'
+  { -- | Represents a set of options that define the structure of comma-separated
+    -- value (CSV) job output.
+    csv :: Prelude.Maybe CsvOutputOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutputFormatOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'csv', 'outputFormatOptions_csv' - Represents a set of options that define the structure of comma-separated
+-- value (CSV) job output.
+newOutputFormatOptions ::
+  OutputFormatOptions
+newOutputFormatOptions =
+  OutputFormatOptions' {csv = Prelude.Nothing}
+
+-- | Represents a set of options that define the structure of comma-separated
+-- value (CSV) job output.
+outputFormatOptions_csv :: Lens.Lens' OutputFormatOptions (Prelude.Maybe CsvOutputOptions)
+outputFormatOptions_csv = Lens.lens (\OutputFormatOptions' {csv} -> csv) (\s@OutputFormatOptions' {} a -> s {csv = a} :: OutputFormatOptions)
+
+instance Data.FromJSON OutputFormatOptions where
+  parseJSON =
+    Data.withObject
+      "OutputFormatOptions"
+      ( \x ->
+          OutputFormatOptions' Prelude.<$> (x Data..:? "Csv")
+      )
+
+instance Prelude.Hashable OutputFormatOptions where
+  hashWithSalt _salt OutputFormatOptions' {..} =
+    _salt `Prelude.hashWithSalt` csv
+
+instance Prelude.NFData OutputFormatOptions where
+  rnf OutputFormatOptions' {..} = Prelude.rnf csv
+
+instance Data.ToJSON OutputFormatOptions where
+  toJSON OutputFormatOptions' {..} =
+    Data.object
+      (Prelude.catMaybes [("Csv" Data..=) Prelude.<$> csv])
diff --git a/gen/Amazonka/DataBrew/Types/ParameterType.hs b/gen/Amazonka/DataBrew/Types/ParameterType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ParameterType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ParameterType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ParameterType
+  ( ParameterType
+      ( ..,
+        ParameterType_Datetime,
+        ParameterType_Number,
+        ParameterType_String
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ParameterType = ParameterType'
+  { fromParameterType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ParameterType_Datetime :: ParameterType
+pattern ParameterType_Datetime = ParameterType' "Datetime"
+
+pattern ParameterType_Number :: ParameterType
+pattern ParameterType_Number = ParameterType' "Number"
+
+pattern ParameterType_String :: ParameterType
+pattern ParameterType_String = ParameterType' "String"
+
+{-# COMPLETE
+  ParameterType_Datetime,
+  ParameterType_Number,
+  ParameterType_String,
+  ParameterType'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/PathOptions.hs b/gen/Amazonka/DataBrew/Types/PathOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/PathOptions.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.PathOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.PathOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.DatasetParameter
+import Amazonka.DataBrew.Types.FilesLimit
+import Amazonka.DataBrew.Types.FilterExpression
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a set of options that define how DataBrew selects files for a
+-- given Amazon S3 path in a dataset.
+--
+-- /See:/ 'newPathOptions' smart constructor.
+data PathOptions = PathOptions'
+  { -- | If provided, this structure imposes a limit on a number of files that
+    -- should be selected.
+    filesLimit :: Prelude.Maybe FilesLimit,
+    -- | If provided, this structure defines a date range for matching Amazon S3
+    -- objects based on their LastModifiedDate attribute in Amazon S3.
+    lastModifiedDateCondition :: Prelude.Maybe FilterExpression,
+    -- | A structure that maps names of parameters used in the Amazon S3 path of
+    -- a dataset to their definitions.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text DatasetParameter)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PathOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filesLimit', 'pathOptions_filesLimit' - If provided, this structure imposes a limit on a number of files that
+-- should be selected.
+--
+-- 'lastModifiedDateCondition', 'pathOptions_lastModifiedDateCondition' - If provided, this structure defines a date range for matching Amazon S3
+-- objects based on their LastModifiedDate attribute in Amazon S3.
+--
+-- 'parameters', 'pathOptions_parameters' - A structure that maps names of parameters used in the Amazon S3 path of
+-- a dataset to their definitions.
+newPathOptions ::
+  PathOptions
+newPathOptions =
+  PathOptions'
+    { filesLimit = Prelude.Nothing,
+      lastModifiedDateCondition = Prelude.Nothing,
+      parameters = Prelude.Nothing
+    }
+
+-- | If provided, this structure imposes a limit on a number of files that
+-- should be selected.
+pathOptions_filesLimit :: Lens.Lens' PathOptions (Prelude.Maybe FilesLimit)
+pathOptions_filesLimit = Lens.lens (\PathOptions' {filesLimit} -> filesLimit) (\s@PathOptions' {} a -> s {filesLimit = a} :: PathOptions)
+
+-- | If provided, this structure defines a date range for matching Amazon S3
+-- objects based on their LastModifiedDate attribute in Amazon S3.
+pathOptions_lastModifiedDateCondition :: Lens.Lens' PathOptions (Prelude.Maybe FilterExpression)
+pathOptions_lastModifiedDateCondition = Lens.lens (\PathOptions' {lastModifiedDateCondition} -> lastModifiedDateCondition) (\s@PathOptions' {} a -> s {lastModifiedDateCondition = a} :: PathOptions)
+
+-- | A structure that maps names of parameters used in the Amazon S3 path of
+-- a dataset to their definitions.
+pathOptions_parameters :: Lens.Lens' PathOptions (Prelude.Maybe (Prelude.HashMap Prelude.Text DatasetParameter))
+pathOptions_parameters = Lens.lens (\PathOptions' {parameters} -> parameters) (\s@PathOptions' {} a -> s {parameters = a} :: PathOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PathOptions where
+  parseJSON =
+    Data.withObject
+      "PathOptions"
+      ( \x ->
+          PathOptions'
+            Prelude.<$> (x Data..:? "FilesLimit")
+            Prelude.<*> (x Data..:? "LastModifiedDateCondition")
+            Prelude.<*> (x Data..:? "Parameters" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable PathOptions where
+  hashWithSalt _salt PathOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` filesLimit
+      `Prelude.hashWithSalt` lastModifiedDateCondition
+      `Prelude.hashWithSalt` parameters
+
+instance Prelude.NFData PathOptions where
+  rnf PathOptions' {..} =
+    Prelude.rnf filesLimit
+      `Prelude.seq` Prelude.rnf lastModifiedDateCondition
+      `Prelude.seq` Prelude.rnf parameters
+
+instance Data.ToJSON PathOptions where
+  toJSON PathOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FilesLimit" Data..=) Prelude.<$> filesLimit,
+            ("LastModifiedDateCondition" Data..=)
+              Prelude.<$> lastModifiedDateCondition,
+            ("Parameters" Data..=) Prelude.<$> parameters
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/ProfileConfiguration.hs b/gen/Amazonka/DataBrew/Types/ProfileConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ProfileConfiguration.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ProfileConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ProfileConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.ColumnSelector
+import Amazonka.DataBrew.Types.ColumnStatisticsConfiguration
+import Amazonka.DataBrew.Types.EntityDetectorConfiguration
+import Amazonka.DataBrew.Types.StatisticsConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration for profile jobs. Configuration can be used to select
+-- columns, do evaluations, and override default parameters of evaluations.
+-- When configuration is undefined, the profile job will apply default
+-- settings to all supported columns.
+--
+-- /See:/ 'newProfileConfiguration' smart constructor.
+data ProfileConfiguration = ProfileConfiguration'
+  { -- | List of configurations for column evaluations.
+    -- ColumnStatisticsConfigurations are used to select evaluations and
+    -- override parameters of evaluations for particular columns. When
+    -- ColumnStatisticsConfigurations is undefined, the profile job will
+    -- profile all supported columns and run all supported evaluations.
+    columnStatisticsConfigurations :: Prelude.Maybe (Prelude.NonEmpty ColumnStatisticsConfiguration),
+    -- | Configuration for inter-column evaluations. Configuration can be used to
+    -- select evaluations and override parameters of evaluations. When
+    -- configuration is undefined, the profile job will run all supported
+    -- inter-column evaluations.
+    datasetStatisticsConfiguration :: Prelude.Maybe StatisticsConfiguration,
+    -- | Configuration of entity detection for a profile job. When undefined,
+    -- entity detection is disabled.
+    entityDetectorConfiguration :: Prelude.Maybe EntityDetectorConfiguration,
+    -- | List of column selectors. ProfileColumns can be used to select columns
+    -- from the dataset. When ProfileColumns is undefined, the profile job will
+    -- profile all supported columns.
+    profileColumns :: Prelude.Maybe (Prelude.NonEmpty ColumnSelector)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProfileConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'columnStatisticsConfigurations', 'profileConfiguration_columnStatisticsConfigurations' - List of configurations for column evaluations.
+-- ColumnStatisticsConfigurations are used to select evaluations and
+-- override parameters of evaluations for particular columns. When
+-- ColumnStatisticsConfigurations is undefined, the profile job will
+-- profile all supported columns and run all supported evaluations.
+--
+-- 'datasetStatisticsConfiguration', 'profileConfiguration_datasetStatisticsConfiguration' - Configuration for inter-column evaluations. Configuration can be used to
+-- select evaluations and override parameters of evaluations. When
+-- configuration is undefined, the profile job will run all supported
+-- inter-column evaluations.
+--
+-- 'entityDetectorConfiguration', 'profileConfiguration_entityDetectorConfiguration' - Configuration of entity detection for a profile job. When undefined,
+-- entity detection is disabled.
+--
+-- 'profileColumns', 'profileConfiguration_profileColumns' - List of column selectors. ProfileColumns can be used to select columns
+-- from the dataset. When ProfileColumns is undefined, the profile job will
+-- profile all supported columns.
+newProfileConfiguration ::
+  ProfileConfiguration
+newProfileConfiguration =
+  ProfileConfiguration'
+    { columnStatisticsConfigurations =
+        Prelude.Nothing,
+      datasetStatisticsConfiguration = Prelude.Nothing,
+      entityDetectorConfiguration = Prelude.Nothing,
+      profileColumns = Prelude.Nothing
+    }
+
+-- | List of configurations for column evaluations.
+-- ColumnStatisticsConfigurations are used to select evaluations and
+-- override parameters of evaluations for particular columns. When
+-- ColumnStatisticsConfigurations is undefined, the profile job will
+-- profile all supported columns and run all supported evaluations.
+profileConfiguration_columnStatisticsConfigurations :: Lens.Lens' ProfileConfiguration (Prelude.Maybe (Prelude.NonEmpty ColumnStatisticsConfiguration))
+profileConfiguration_columnStatisticsConfigurations = Lens.lens (\ProfileConfiguration' {columnStatisticsConfigurations} -> columnStatisticsConfigurations) (\s@ProfileConfiguration' {} a -> s {columnStatisticsConfigurations = a} :: ProfileConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration for inter-column evaluations. Configuration can be used to
+-- select evaluations and override parameters of evaluations. When
+-- configuration is undefined, the profile job will run all supported
+-- inter-column evaluations.
+profileConfiguration_datasetStatisticsConfiguration :: Lens.Lens' ProfileConfiguration (Prelude.Maybe StatisticsConfiguration)
+profileConfiguration_datasetStatisticsConfiguration = Lens.lens (\ProfileConfiguration' {datasetStatisticsConfiguration} -> datasetStatisticsConfiguration) (\s@ProfileConfiguration' {} a -> s {datasetStatisticsConfiguration = a} :: ProfileConfiguration)
+
+-- | Configuration of entity detection for a profile job. When undefined,
+-- entity detection is disabled.
+profileConfiguration_entityDetectorConfiguration :: Lens.Lens' ProfileConfiguration (Prelude.Maybe EntityDetectorConfiguration)
+profileConfiguration_entityDetectorConfiguration = Lens.lens (\ProfileConfiguration' {entityDetectorConfiguration} -> entityDetectorConfiguration) (\s@ProfileConfiguration' {} a -> s {entityDetectorConfiguration = a} :: ProfileConfiguration)
+
+-- | List of column selectors. ProfileColumns can be used to select columns
+-- from the dataset. When ProfileColumns is undefined, the profile job will
+-- profile all supported columns.
+profileConfiguration_profileColumns :: Lens.Lens' ProfileConfiguration (Prelude.Maybe (Prelude.NonEmpty ColumnSelector))
+profileConfiguration_profileColumns = Lens.lens (\ProfileConfiguration' {profileColumns} -> profileColumns) (\s@ProfileConfiguration' {} a -> s {profileColumns = a} :: ProfileConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ProfileConfiguration where
+  parseJSON =
+    Data.withObject
+      "ProfileConfiguration"
+      ( \x ->
+          ProfileConfiguration'
+            Prelude.<$> (x Data..:? "ColumnStatisticsConfigurations")
+            Prelude.<*> (x Data..:? "DatasetStatisticsConfiguration")
+            Prelude.<*> (x Data..:? "EntityDetectorConfiguration")
+            Prelude.<*> (x Data..:? "ProfileColumns")
+      )
+
+instance Prelude.Hashable ProfileConfiguration where
+  hashWithSalt _salt ProfileConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` columnStatisticsConfigurations
+      `Prelude.hashWithSalt` datasetStatisticsConfiguration
+      `Prelude.hashWithSalt` entityDetectorConfiguration
+      `Prelude.hashWithSalt` profileColumns
+
+instance Prelude.NFData ProfileConfiguration where
+  rnf ProfileConfiguration' {..} =
+    Prelude.rnf columnStatisticsConfigurations
+      `Prelude.seq` Prelude.rnf datasetStatisticsConfiguration
+      `Prelude.seq` Prelude.rnf entityDetectorConfiguration
+      `Prelude.seq` Prelude.rnf profileColumns
+
+instance Data.ToJSON ProfileConfiguration where
+  toJSON ProfileConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ColumnStatisticsConfigurations" Data..=)
+              Prelude.<$> columnStatisticsConfigurations,
+            ("DatasetStatisticsConfiguration" Data..=)
+              Prelude.<$> datasetStatisticsConfiguration,
+            ("EntityDetectorConfiguration" Data..=)
+              Prelude.<$> entityDetectorConfiguration,
+            ("ProfileColumns" Data..=)
+              Prelude.<$> profileColumns
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/Project.hs b/gen/Amazonka/DataBrew/Types/Project.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Project.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Project
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Project where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.Sample
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents all of the attributes of a DataBrew project.
+--
+-- /See:/ 'newProject' smart constructor.
+data Project = Project'
+  { -- | The ID of the Amazon Web Services account that owns the project.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the project was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who crated the project.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The dataset that the project is to act upon.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who last modified the
+    -- project.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The last modification date and time for the project.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The date and time when the project was opened.
+    openDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user that opened the project for
+    -- use.
+    openedBy :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the project.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role that will be assumed for this
+    -- project.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The sample size and sampling type to apply to the data. If this
+    -- parameter isn\'t specified, then the sample consists of the first 500
+    -- rows from the dataset.
+    sample :: Prelude.Maybe Sample,
+    -- | Metadata tags that have been applied to the project.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name of a project.
+    name :: Prelude.Text,
+    -- | The name of a recipe that will be developed during a project session.
+    recipeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Project' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'project_accountId' - The ID of the Amazon Web Services account that owns the project.
+--
+-- 'createDate', 'project_createDate' - The date and time that the project was created.
+--
+-- 'createdBy', 'project_createdBy' - The Amazon Resource Name (ARN) of the user who crated the project.
+--
+-- 'datasetName', 'project_datasetName' - The dataset that the project is to act upon.
+--
+-- 'lastModifiedBy', 'project_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the
+-- project.
+--
+-- 'lastModifiedDate', 'project_lastModifiedDate' - The last modification date and time for the project.
+--
+-- 'openDate', 'project_openDate' - The date and time when the project was opened.
+--
+-- 'openedBy', 'project_openedBy' - The Amazon Resource Name (ARN) of the user that opened the project for
+-- use.
+--
+-- 'resourceArn', 'project_resourceArn' - The Amazon Resource Name (ARN) for the project.
+--
+-- 'roleArn', 'project_roleArn' - The Amazon Resource Name (ARN) of the role that will be assumed for this
+-- project.
+--
+-- 'sample', 'project_sample' - The sample size and sampling type to apply to the data. If this
+-- parameter isn\'t specified, then the sample consists of the first 500
+-- rows from the dataset.
+--
+-- 'tags', 'project_tags' - Metadata tags that have been applied to the project.
+--
+-- 'name', 'project_name' - The unique name of a project.
+--
+-- 'recipeName', 'project_recipeName' - The name of a recipe that will be developed during a project session.
+newProject ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recipeName'
+  Prelude.Text ->
+  Project
+newProject pName_ pRecipeName_ =
+  Project'
+    { accountId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      openDate = Prelude.Nothing,
+      openedBy = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      sample = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      recipeName = pRecipeName_
+    }
+
+-- | The ID of the Amazon Web Services account that owns the project.
+project_accountId :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_accountId = Lens.lens (\Project' {accountId} -> accountId) (\s@Project' {} a -> s {accountId = a} :: Project)
+
+-- | The date and time that the project was created.
+project_createDate :: Lens.Lens' Project (Prelude.Maybe Prelude.UTCTime)
+project_createDate = Lens.lens (\Project' {createDate} -> createDate) (\s@Project' {} a -> s {createDate = a} :: Project) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who crated the project.
+project_createdBy :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_createdBy = Lens.lens (\Project' {createdBy} -> createdBy) (\s@Project' {} a -> s {createdBy = a} :: Project)
+
+-- | The dataset that the project is to act upon.
+project_datasetName :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_datasetName = Lens.lens (\Project' {datasetName} -> datasetName) (\s@Project' {} a -> s {datasetName = a} :: Project)
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the
+-- project.
+project_lastModifiedBy :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_lastModifiedBy = Lens.lens (\Project' {lastModifiedBy} -> lastModifiedBy) (\s@Project' {} a -> s {lastModifiedBy = a} :: Project)
+
+-- | The last modification date and time for the project.
+project_lastModifiedDate :: Lens.Lens' Project (Prelude.Maybe Prelude.UTCTime)
+project_lastModifiedDate = Lens.lens (\Project' {lastModifiedDate} -> lastModifiedDate) (\s@Project' {} a -> s {lastModifiedDate = a} :: Project) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time when the project was opened.
+project_openDate :: Lens.Lens' Project (Prelude.Maybe Prelude.UTCTime)
+project_openDate = Lens.lens (\Project' {openDate} -> openDate) (\s@Project' {} a -> s {openDate = a} :: Project) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user that opened the project for
+-- use.
+project_openedBy :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_openedBy = Lens.lens (\Project' {openedBy} -> openedBy) (\s@Project' {} a -> s {openedBy = a} :: Project)
+
+-- | The Amazon Resource Name (ARN) for the project.
+project_resourceArn :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_resourceArn = Lens.lens (\Project' {resourceArn} -> resourceArn) (\s@Project' {} a -> s {resourceArn = a} :: Project)
+
+-- | The Amazon Resource Name (ARN) of the role that will be assumed for this
+-- project.
+project_roleArn :: Lens.Lens' Project (Prelude.Maybe Prelude.Text)
+project_roleArn = Lens.lens (\Project' {roleArn} -> roleArn) (\s@Project' {} a -> s {roleArn = a} :: Project)
+
+-- | The sample size and sampling type to apply to the data. If this
+-- parameter isn\'t specified, then the sample consists of the first 500
+-- rows from the dataset.
+project_sample :: Lens.Lens' Project (Prelude.Maybe Sample)
+project_sample = Lens.lens (\Project' {sample} -> sample) (\s@Project' {} a -> s {sample = a} :: Project)
+
+-- | Metadata tags that have been applied to the project.
+project_tags :: Lens.Lens' Project (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+project_tags = Lens.lens (\Project' {tags} -> tags) (\s@Project' {} a -> s {tags = a} :: Project) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of a project.
+project_name :: Lens.Lens' Project Prelude.Text
+project_name = Lens.lens (\Project' {name} -> name) (\s@Project' {} a -> s {name = a} :: Project)
+
+-- | The name of a recipe that will be developed during a project session.
+project_recipeName :: Lens.Lens' Project Prelude.Text
+project_recipeName = Lens.lens (\Project' {recipeName} -> recipeName) (\s@Project' {} a -> s {recipeName = a} :: Project)
+
+instance Data.FromJSON Project where
+  parseJSON =
+    Data.withObject
+      "Project"
+      ( \x ->
+          Project'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "CreatedBy")
+            Prelude.<*> (x Data..:? "DatasetName")
+            Prelude.<*> (x Data..:? "LastModifiedBy")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "OpenDate")
+            Prelude.<*> (x Data..:? "OpenedBy")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "Sample")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "RecipeName")
+      )
+
+instance Prelude.Hashable Project where
+  hashWithSalt _salt Project' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` lastModifiedBy
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` openDate
+      `Prelude.hashWithSalt` openedBy
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` sample
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recipeName
+
+instance Prelude.NFData Project where
+  rnf Project' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf openDate
+      `Prelude.seq` Prelude.rnf openedBy
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sample
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recipeName
diff --git a/gen/Amazonka/DataBrew/Types/Recipe.hs b/gen/Amazonka/DataBrew/Types/Recipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Recipe.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Recipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Recipe where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.RecipeStep
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents one or more actions to be performed on a DataBrew dataset.
+--
+-- /See:/ 'newRecipe' smart constructor.
+data Recipe = Recipe'
+  { -- | The date and time that the recipe was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who created the recipe.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The description of the recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who last modified the recipe.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The last modification date and time of the recipe.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The name of the project that the recipe is associated with.
+    projectName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who published the recipe.
+    publishedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the recipe was published.
+    publishedDate :: Prelude.Maybe Data.POSIX,
+    -- | The identifier for the version for the recipe. Must be one of the
+    -- following:
+    --
+    -- -   Numeric version (@X.Y@) - @X@ and @Y@ stand for major and minor
+    --     version numbers. The maximum length of each is 6 digits, and neither
+    --     can be negative values. Both @X@ and @Y@ are required, and \"0.0\"
+    --     isn\'t a valid version.
+    --
+    -- -   @LATEST_WORKING@ - the most recent valid version being developed in
+    --     a DataBrew project.
+    --
+    -- -   @LATEST_PUBLISHED@ - the most recent published version.
+    recipeVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the recipe.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | A list of steps that are defined by the recipe.
+    steps :: Prelude.Maybe [RecipeStep],
+    -- | Metadata tags that have been applied to the recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name for the recipe.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Recipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'recipe_createDate' - The date and time that the recipe was created.
+--
+-- 'createdBy', 'recipe_createdBy' - The Amazon Resource Name (ARN) of the user who created the recipe.
+--
+-- 'description', 'recipe_description' - The description of the recipe.
+--
+-- 'lastModifiedBy', 'recipe_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the recipe.
+--
+-- 'lastModifiedDate', 'recipe_lastModifiedDate' - The last modification date and time of the recipe.
+--
+-- 'projectName', 'recipe_projectName' - The name of the project that the recipe is associated with.
+--
+-- 'publishedBy', 'recipe_publishedBy' - The Amazon Resource Name (ARN) of the user who published the recipe.
+--
+-- 'publishedDate', 'recipe_publishedDate' - The date and time when the recipe was published.
+--
+-- 'recipeVersion', 'recipe_recipeVersion' - The identifier for the version for the recipe. Must be one of the
+-- following:
+--
+-- -   Numeric version (@X.Y@) - @X@ and @Y@ stand for major and minor
+--     version numbers. The maximum length of each is 6 digits, and neither
+--     can be negative values. Both @X@ and @Y@ are required, and \"0.0\"
+--     isn\'t a valid version.
+--
+-- -   @LATEST_WORKING@ - the most recent valid version being developed in
+--     a DataBrew project.
+--
+-- -   @LATEST_PUBLISHED@ - the most recent published version.
+--
+-- 'resourceArn', 'recipe_resourceArn' - The Amazon Resource Name (ARN) for the recipe.
+--
+-- 'steps', 'recipe_steps' - A list of steps that are defined by the recipe.
+--
+-- 'tags', 'recipe_tags' - Metadata tags that have been applied to the recipe.
+--
+-- 'name', 'recipe_name' - The unique name for the recipe.
+newRecipe ::
+  -- | 'name'
+  Prelude.Text ->
+  Recipe
+newRecipe pName_ =
+  Recipe'
+    { createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      projectName = Prelude.Nothing,
+      publishedBy = Prelude.Nothing,
+      publishedDate = Prelude.Nothing,
+      recipeVersion = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      steps = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The date and time that the recipe was created.
+recipe_createDate :: Lens.Lens' Recipe (Prelude.Maybe Prelude.UTCTime)
+recipe_createDate = Lens.lens (\Recipe' {createDate} -> createDate) (\s@Recipe' {} a -> s {createDate = a} :: Recipe) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who created the recipe.
+recipe_createdBy :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_createdBy = Lens.lens (\Recipe' {createdBy} -> createdBy) (\s@Recipe' {} a -> s {createdBy = a} :: Recipe)
+
+-- | The description of the recipe.
+recipe_description :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_description = Lens.lens (\Recipe' {description} -> description) (\s@Recipe' {} a -> s {description = a} :: Recipe)
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the recipe.
+recipe_lastModifiedBy :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_lastModifiedBy = Lens.lens (\Recipe' {lastModifiedBy} -> lastModifiedBy) (\s@Recipe' {} a -> s {lastModifiedBy = a} :: Recipe)
+
+-- | The last modification date and time of the recipe.
+recipe_lastModifiedDate :: Lens.Lens' Recipe (Prelude.Maybe Prelude.UTCTime)
+recipe_lastModifiedDate = Lens.lens (\Recipe' {lastModifiedDate} -> lastModifiedDate) (\s@Recipe' {} a -> s {lastModifiedDate = a} :: Recipe) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the project that the recipe is associated with.
+recipe_projectName :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_projectName = Lens.lens (\Recipe' {projectName} -> projectName) (\s@Recipe' {} a -> s {projectName = a} :: Recipe)
+
+-- | The Amazon Resource Name (ARN) of the user who published the recipe.
+recipe_publishedBy :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_publishedBy = Lens.lens (\Recipe' {publishedBy} -> publishedBy) (\s@Recipe' {} a -> s {publishedBy = a} :: Recipe)
+
+-- | The date and time when the recipe was published.
+recipe_publishedDate :: Lens.Lens' Recipe (Prelude.Maybe Prelude.UTCTime)
+recipe_publishedDate = Lens.lens (\Recipe' {publishedDate} -> publishedDate) (\s@Recipe' {} a -> s {publishedDate = a} :: Recipe) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the version for the recipe. Must be one of the
+-- following:
+--
+-- -   Numeric version (@X.Y@) - @X@ and @Y@ stand for major and minor
+--     version numbers. The maximum length of each is 6 digits, and neither
+--     can be negative values. Both @X@ and @Y@ are required, and \"0.0\"
+--     isn\'t a valid version.
+--
+-- -   @LATEST_WORKING@ - the most recent valid version being developed in
+--     a DataBrew project.
+--
+-- -   @LATEST_PUBLISHED@ - the most recent published version.
+recipe_recipeVersion :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_recipeVersion = Lens.lens (\Recipe' {recipeVersion} -> recipeVersion) (\s@Recipe' {} a -> s {recipeVersion = a} :: Recipe)
+
+-- | The Amazon Resource Name (ARN) for the recipe.
+recipe_resourceArn :: Lens.Lens' Recipe (Prelude.Maybe Prelude.Text)
+recipe_resourceArn = Lens.lens (\Recipe' {resourceArn} -> resourceArn) (\s@Recipe' {} a -> s {resourceArn = a} :: Recipe)
+
+-- | A list of steps that are defined by the recipe.
+recipe_steps :: Lens.Lens' Recipe (Prelude.Maybe [RecipeStep])
+recipe_steps = Lens.lens (\Recipe' {steps} -> steps) (\s@Recipe' {} a -> s {steps = a} :: Recipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata tags that have been applied to the recipe.
+recipe_tags :: Lens.Lens' Recipe (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+recipe_tags = Lens.lens (\Recipe' {tags} -> tags) (\s@Recipe' {} a -> s {tags = a} :: Recipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name for the recipe.
+recipe_name :: Lens.Lens' Recipe Prelude.Text
+recipe_name = Lens.lens (\Recipe' {name} -> name) (\s@Recipe' {} a -> s {name = a} :: Recipe)
+
+instance Data.FromJSON Recipe where
+  parseJSON =
+    Data.withObject
+      "Recipe"
+      ( \x ->
+          Recipe'
+            Prelude.<$> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "CreatedBy")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "LastModifiedBy")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "ProjectName")
+            Prelude.<*> (x Data..:? "PublishedBy")
+            Prelude.<*> (x Data..:? "PublishedDate")
+            Prelude.<*> (x Data..:? "RecipeVersion")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Steps" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable Recipe where
+  hashWithSalt _salt Recipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedBy
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` projectName
+      `Prelude.hashWithSalt` publishedBy
+      `Prelude.hashWithSalt` publishedDate
+      `Prelude.hashWithSalt` recipeVersion
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` steps
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Recipe where
+  rnf Recipe' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf projectName
+      `Prelude.seq` Prelude.rnf publishedBy
+      `Prelude.seq` Prelude.rnf publishedDate
+      `Prelude.seq` Prelude.rnf recipeVersion
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf steps
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/Types/RecipeAction.hs b/gen/Amazonka/DataBrew/Types/RecipeAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/RecipeAction.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.RecipeAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.RecipeAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a transformation and associated parameters that are used to
+-- apply a change to a DataBrew dataset. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/recipe-actions-reference.html Recipe actions reference>.
+--
+-- /See:/ 'newRecipeAction' smart constructor.
+data RecipeAction = RecipeAction'
+  { -- | Contextual parameters for the transformation.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of a valid DataBrew transformation to be performed on the data.
+    operation :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecipeAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'parameters', 'recipeAction_parameters' - Contextual parameters for the transformation.
+--
+-- 'operation', 'recipeAction_operation' - The name of a valid DataBrew transformation to be performed on the data.
+newRecipeAction ::
+  -- | 'operation'
+  Prelude.Text ->
+  RecipeAction
+newRecipeAction pOperation_ =
+  RecipeAction'
+    { parameters = Prelude.Nothing,
+      operation = pOperation_
+    }
+
+-- | Contextual parameters for the transformation.
+recipeAction_parameters :: Lens.Lens' RecipeAction (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+recipeAction_parameters = Lens.lens (\RecipeAction' {parameters} -> parameters) (\s@RecipeAction' {} a -> s {parameters = a} :: RecipeAction) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of a valid DataBrew transformation to be performed on the data.
+recipeAction_operation :: Lens.Lens' RecipeAction Prelude.Text
+recipeAction_operation = Lens.lens (\RecipeAction' {operation} -> operation) (\s@RecipeAction' {} a -> s {operation = a} :: RecipeAction)
+
+instance Data.FromJSON RecipeAction where
+  parseJSON =
+    Data.withObject
+      "RecipeAction"
+      ( \x ->
+          RecipeAction'
+            Prelude.<$> (x Data..:? "Parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Operation")
+      )
+
+instance Prelude.Hashable RecipeAction where
+  hashWithSalt _salt RecipeAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` operation
+
+instance Prelude.NFData RecipeAction where
+  rnf RecipeAction' {..} =
+    Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf operation
+
+instance Data.ToJSON RecipeAction where
+  toJSON RecipeAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Parameters" Data..=) Prelude.<$> parameters,
+            Prelude.Just ("Operation" Data..= operation)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/RecipeReference.hs b/gen/Amazonka/DataBrew/Types/RecipeReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/RecipeReference.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.RecipeReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.RecipeReference where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the name and version of a DataBrew recipe.
+--
+-- /See:/ 'newRecipeReference' smart constructor.
+data RecipeReference = RecipeReference'
+  { -- | The identifier for the version for the recipe.
+    recipeVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recipe.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecipeReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recipeVersion', 'recipeReference_recipeVersion' - The identifier for the version for the recipe.
+--
+-- 'name', 'recipeReference_name' - The name of the recipe.
+newRecipeReference ::
+  -- | 'name'
+  Prelude.Text ->
+  RecipeReference
+newRecipeReference pName_ =
+  RecipeReference'
+    { recipeVersion = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The identifier for the version for the recipe.
+recipeReference_recipeVersion :: Lens.Lens' RecipeReference (Prelude.Maybe Prelude.Text)
+recipeReference_recipeVersion = Lens.lens (\RecipeReference' {recipeVersion} -> recipeVersion) (\s@RecipeReference' {} a -> s {recipeVersion = a} :: RecipeReference)
+
+-- | The name of the recipe.
+recipeReference_name :: Lens.Lens' RecipeReference Prelude.Text
+recipeReference_name = Lens.lens (\RecipeReference' {name} -> name) (\s@RecipeReference' {} a -> s {name = a} :: RecipeReference)
+
+instance Data.FromJSON RecipeReference where
+  parseJSON =
+    Data.withObject
+      "RecipeReference"
+      ( \x ->
+          RecipeReference'
+            Prelude.<$> (x Data..:? "RecipeVersion")
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable RecipeReference where
+  hashWithSalt _salt RecipeReference' {..} =
+    _salt
+      `Prelude.hashWithSalt` recipeVersion
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData RecipeReference where
+  rnf RecipeReference' {..} =
+    Prelude.rnf recipeVersion
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON RecipeReference where
+  toJSON RecipeReference' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RecipeVersion" Data..=) Prelude.<$> recipeVersion,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/RecipeStep.hs b/gen/Amazonka/DataBrew/Types/RecipeStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/RecipeStep.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.RecipeStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.RecipeStep where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.ConditionExpression
+import Amazonka.DataBrew.Types.RecipeAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a single step from a DataBrew recipe to be performed.
+--
+-- /See:/ 'newRecipeStep' smart constructor.
+data RecipeStep = RecipeStep'
+  { -- | One or more conditions that must be met for the recipe step to succeed.
+    --
+    -- All of the conditions in the array must be met. In other words, all of
+    -- the conditions must be combined using a logical AND operation.
+    conditionExpressions :: Prelude.Maybe [ConditionExpression],
+    -- | The particular action to be performed in the recipe step.
+    action :: RecipeAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecipeStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conditionExpressions', 'recipeStep_conditionExpressions' - One or more conditions that must be met for the recipe step to succeed.
+--
+-- All of the conditions in the array must be met. In other words, all of
+-- the conditions must be combined using a logical AND operation.
+--
+-- 'action', 'recipeStep_action' - The particular action to be performed in the recipe step.
+newRecipeStep ::
+  -- | 'action'
+  RecipeAction ->
+  RecipeStep
+newRecipeStep pAction_ =
+  RecipeStep'
+    { conditionExpressions = Prelude.Nothing,
+      action = pAction_
+    }
+
+-- | One or more conditions that must be met for the recipe step to succeed.
+--
+-- All of the conditions in the array must be met. In other words, all of
+-- the conditions must be combined using a logical AND operation.
+recipeStep_conditionExpressions :: Lens.Lens' RecipeStep (Prelude.Maybe [ConditionExpression])
+recipeStep_conditionExpressions = Lens.lens (\RecipeStep' {conditionExpressions} -> conditionExpressions) (\s@RecipeStep' {} a -> s {conditionExpressions = a} :: RecipeStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The particular action to be performed in the recipe step.
+recipeStep_action :: Lens.Lens' RecipeStep RecipeAction
+recipeStep_action = Lens.lens (\RecipeStep' {action} -> action) (\s@RecipeStep' {} a -> s {action = a} :: RecipeStep)
+
+instance Data.FromJSON RecipeStep where
+  parseJSON =
+    Data.withObject
+      "RecipeStep"
+      ( \x ->
+          RecipeStep'
+            Prelude.<$> ( x
+                            Data..:? "ConditionExpressions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "Action")
+      )
+
+instance Prelude.Hashable RecipeStep where
+  hashWithSalt _salt RecipeStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` conditionExpressions
+      `Prelude.hashWithSalt` action
+
+instance Prelude.NFData RecipeStep where
+  rnf RecipeStep' {..} =
+    Prelude.rnf conditionExpressions
+      `Prelude.seq` Prelude.rnf action
+
+instance Data.ToJSON RecipeStep where
+  toJSON RecipeStep' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConditionExpressions" Data..=)
+              Prelude.<$> conditionExpressions,
+            Prelude.Just ("Action" Data..= action)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/RecipeVersionErrorDetail.hs b/gen/Amazonka/DataBrew/Types/RecipeVersionErrorDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/RecipeVersionErrorDetail.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.RecipeVersionErrorDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.RecipeVersionErrorDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents any errors encountered when attempting to delete multiple
+-- recipe versions.
+--
+-- /See:/ 'newRecipeVersionErrorDetail' smart constructor.
+data RecipeVersionErrorDetail = RecipeVersionErrorDetail'
+  { -- | The HTTP status code for the error.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for the recipe version associated with this error.
+    recipeVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecipeVersionErrorDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'recipeVersionErrorDetail_errorCode' - The HTTP status code for the error.
+--
+-- 'errorMessage', 'recipeVersionErrorDetail_errorMessage' - The text of the error message.
+--
+-- 'recipeVersion', 'recipeVersionErrorDetail_recipeVersion' - The identifier for the recipe version associated with this error.
+newRecipeVersionErrorDetail ::
+  RecipeVersionErrorDetail
+newRecipeVersionErrorDetail =
+  RecipeVersionErrorDetail'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      recipeVersion = Prelude.Nothing
+    }
+
+-- | The HTTP status code for the error.
+recipeVersionErrorDetail_errorCode :: Lens.Lens' RecipeVersionErrorDetail (Prelude.Maybe Prelude.Text)
+recipeVersionErrorDetail_errorCode = Lens.lens (\RecipeVersionErrorDetail' {errorCode} -> errorCode) (\s@RecipeVersionErrorDetail' {} a -> s {errorCode = a} :: RecipeVersionErrorDetail)
+
+-- | The text of the error message.
+recipeVersionErrorDetail_errorMessage :: Lens.Lens' RecipeVersionErrorDetail (Prelude.Maybe Prelude.Text)
+recipeVersionErrorDetail_errorMessage = Lens.lens (\RecipeVersionErrorDetail' {errorMessage} -> errorMessage) (\s@RecipeVersionErrorDetail' {} a -> s {errorMessage = a} :: RecipeVersionErrorDetail)
+
+-- | The identifier for the recipe version associated with this error.
+recipeVersionErrorDetail_recipeVersion :: Lens.Lens' RecipeVersionErrorDetail (Prelude.Maybe Prelude.Text)
+recipeVersionErrorDetail_recipeVersion = Lens.lens (\RecipeVersionErrorDetail' {recipeVersion} -> recipeVersion) (\s@RecipeVersionErrorDetail' {} a -> s {recipeVersion = a} :: RecipeVersionErrorDetail)
+
+instance Data.FromJSON RecipeVersionErrorDetail where
+  parseJSON =
+    Data.withObject
+      "RecipeVersionErrorDetail"
+      ( \x ->
+          RecipeVersionErrorDetail'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "RecipeVersion")
+      )
+
+instance Prelude.Hashable RecipeVersionErrorDetail where
+  hashWithSalt _salt RecipeVersionErrorDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` recipeVersion
+
+instance Prelude.NFData RecipeVersionErrorDetail where
+  rnf RecipeVersionErrorDetail' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf recipeVersion
diff --git a/gen/Amazonka/DataBrew/Types/Rule.hs b/gen/Amazonka/DataBrew/Types/Rule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Rule.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Rule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Rule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.ColumnSelector
+import Amazonka.DataBrew.Types.Threshold
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a single data quality requirement that should be validated in
+-- the scope of this dataset.
+--
+-- /See:/ 'newRule' smart constructor.
+data Rule = Rule'
+  { -- | List of column selectors. Selectors can be used to select columns using
+    -- a name or regular expression from the dataset. Rule will be applied to
+    -- selected columns.
+    columnSelectors :: Prelude.Maybe (Prelude.NonEmpty ColumnSelector),
+    -- | A value that specifies whether the rule is disabled. Once a rule is
+    -- disabled, a profile job will not validate it during a job run. Default
+    -- value is false.
+    disabled :: Prelude.Maybe Prelude.Bool,
+    -- | The map of substitution variable names to their values used in a check
+    -- expression. Variable names should start with a \':\' (colon). Variable
+    -- values can either be actual values or column names. To differentiate
+    -- between the two, column names should be enclosed in backticks, for
+    -- example, @\":col1\": \"\`Column A\`\".@
+    substitutionMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The threshold used with a non-aggregate check expression. Non-aggregate
+    -- check expressions will be applied to each row in a specific column, and
+    -- the threshold will be used to determine whether the validation succeeds.
+    threshold :: Prelude.Maybe Threshold,
+    -- | The name of the rule.
+    name :: Prelude.Text,
+    -- | The expression which includes column references, condition names
+    -- followed by variable references, possibly grouped and combined with
+    -- other conditions. For example,
+    -- @(:col1 starts_with :prefix1 or :col1 starts_with :prefix2) and (:col1 ends_with :suffix1 or :col1 ends_with :suffix2)@.
+    -- Column and value references are substitution variables that should start
+    -- with the \':\' symbol. Depending on the context, substitution
+    -- variables\' values can be either an actual value or a column name. These
+    -- values are defined in the SubstitutionMap. If a CheckExpression starts
+    -- with a column reference, then ColumnSelectors in the rule should be
+    -- null. If ColumnSelectors has been defined, then there should be no
+    -- column reference in the left side of a condition, for example,
+    -- @is_between :val1 and :val2@.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/profile.data-quality-available-checks.html Available checks>
+    checkExpression :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Rule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'columnSelectors', 'rule_columnSelectors' - List of column selectors. Selectors can be used to select columns using
+-- a name or regular expression from the dataset. Rule will be applied to
+-- selected columns.
+--
+-- 'disabled', 'rule_disabled' - A value that specifies whether the rule is disabled. Once a rule is
+-- disabled, a profile job will not validate it during a job run. Default
+-- value is false.
+--
+-- 'substitutionMap', 'rule_substitutionMap' - The map of substitution variable names to their values used in a check
+-- expression. Variable names should start with a \':\' (colon). Variable
+-- values can either be actual values or column names. To differentiate
+-- between the two, column names should be enclosed in backticks, for
+-- example, @\":col1\": \"\`Column A\`\".@
+--
+-- 'threshold', 'rule_threshold' - The threshold used with a non-aggregate check expression. Non-aggregate
+-- check expressions will be applied to each row in a specific column, and
+-- the threshold will be used to determine whether the validation succeeds.
+--
+-- 'name', 'rule_name' - The name of the rule.
+--
+-- 'checkExpression', 'rule_checkExpression' - The expression which includes column references, condition names
+-- followed by variable references, possibly grouped and combined with
+-- other conditions. For example,
+-- @(:col1 starts_with :prefix1 or :col1 starts_with :prefix2) and (:col1 ends_with :suffix1 or :col1 ends_with :suffix2)@.
+-- Column and value references are substitution variables that should start
+-- with the \':\' symbol. Depending on the context, substitution
+-- variables\' values can be either an actual value or a column name. These
+-- values are defined in the SubstitutionMap. If a CheckExpression starts
+-- with a column reference, then ColumnSelectors in the rule should be
+-- null. If ColumnSelectors has been defined, then there should be no
+-- column reference in the left side of a condition, for example,
+-- @is_between :val1 and :val2@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/profile.data-quality-available-checks.html Available checks>
+newRule ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'checkExpression'
+  Prelude.Text ->
+  Rule
+newRule pName_ pCheckExpression_ =
+  Rule'
+    { columnSelectors = Prelude.Nothing,
+      disabled = Prelude.Nothing,
+      substitutionMap = Prelude.Nothing,
+      threshold = Prelude.Nothing,
+      name = pName_,
+      checkExpression = pCheckExpression_
+    }
+
+-- | List of column selectors. Selectors can be used to select columns using
+-- a name or regular expression from the dataset. Rule will be applied to
+-- selected columns.
+rule_columnSelectors :: Lens.Lens' Rule (Prelude.Maybe (Prelude.NonEmpty ColumnSelector))
+rule_columnSelectors = Lens.lens (\Rule' {columnSelectors} -> columnSelectors) (\s@Rule' {} a -> s {columnSelectors = a} :: Rule) Prelude.. Lens.mapping Lens.coerced
+
+-- | A value that specifies whether the rule is disabled. Once a rule is
+-- disabled, a profile job will not validate it during a job run. Default
+-- value is false.
+rule_disabled :: Lens.Lens' Rule (Prelude.Maybe Prelude.Bool)
+rule_disabled = Lens.lens (\Rule' {disabled} -> disabled) (\s@Rule' {} a -> s {disabled = a} :: Rule)
+
+-- | The map of substitution variable names to their values used in a check
+-- expression. Variable names should start with a \':\' (colon). Variable
+-- values can either be actual values or column names. To differentiate
+-- between the two, column names should be enclosed in backticks, for
+-- example, @\":col1\": \"\`Column A\`\".@
+rule_substitutionMap :: Lens.Lens' Rule (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+rule_substitutionMap = Lens.lens (\Rule' {substitutionMap} -> substitutionMap) (\s@Rule' {} a -> s {substitutionMap = a} :: Rule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The threshold used with a non-aggregate check expression. Non-aggregate
+-- check expressions will be applied to each row in a specific column, and
+-- the threshold will be used to determine whether the validation succeeds.
+rule_threshold :: Lens.Lens' Rule (Prelude.Maybe Threshold)
+rule_threshold = Lens.lens (\Rule' {threshold} -> threshold) (\s@Rule' {} a -> s {threshold = a} :: Rule)
+
+-- | The name of the rule.
+rule_name :: Lens.Lens' Rule Prelude.Text
+rule_name = Lens.lens (\Rule' {name} -> name) (\s@Rule' {} a -> s {name = a} :: Rule)
+
+-- | The expression which includes column references, condition names
+-- followed by variable references, possibly grouped and combined with
+-- other conditions. For example,
+-- @(:col1 starts_with :prefix1 or :col1 starts_with :prefix2) and (:col1 ends_with :suffix1 or :col1 ends_with :suffix2)@.
+-- Column and value references are substitution variables that should start
+-- with the \':\' symbol. Depending on the context, substitution
+-- variables\' values can be either an actual value or a column name. These
+-- values are defined in the SubstitutionMap. If a CheckExpression starts
+-- with a column reference, then ColumnSelectors in the rule should be
+-- null. If ColumnSelectors has been defined, then there should be no
+-- column reference in the left side of a condition, for example,
+-- @is_between :val1 and :val2@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/profile.data-quality-available-checks.html Available checks>
+rule_checkExpression :: Lens.Lens' Rule Prelude.Text
+rule_checkExpression = Lens.lens (\Rule' {checkExpression} -> checkExpression) (\s@Rule' {} a -> s {checkExpression = a} :: Rule)
+
+instance Data.FromJSON Rule where
+  parseJSON =
+    Data.withObject
+      "Rule"
+      ( \x ->
+          Rule'
+            Prelude.<$> (x Data..:? "ColumnSelectors")
+            Prelude.<*> (x Data..:? "Disabled")
+            Prelude.<*> ( x
+                            Data..:? "SubstitutionMap"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Threshold")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "CheckExpression")
+      )
+
+instance Prelude.Hashable Rule where
+  hashWithSalt _salt Rule' {..} =
+    _salt
+      `Prelude.hashWithSalt` columnSelectors
+      `Prelude.hashWithSalt` disabled
+      `Prelude.hashWithSalt` substitutionMap
+      `Prelude.hashWithSalt` threshold
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` checkExpression
+
+instance Prelude.NFData Rule where
+  rnf Rule' {..} =
+    Prelude.rnf columnSelectors
+      `Prelude.seq` Prelude.rnf disabled
+      `Prelude.seq` Prelude.rnf substitutionMap
+      `Prelude.seq` Prelude.rnf threshold
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf checkExpression
+
+instance Data.ToJSON Rule where
+  toJSON Rule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ColumnSelectors" Data..=)
+              Prelude.<$> columnSelectors,
+            ("Disabled" Data..=) Prelude.<$> disabled,
+            ("SubstitutionMap" Data..=)
+              Prelude.<$> substitutionMap,
+            ("Threshold" Data..=) Prelude.<$> threshold,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("CheckExpression" Data..= checkExpression)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/RulesetItem.hs b/gen/Amazonka/DataBrew/Types/RulesetItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/RulesetItem.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.RulesetItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.RulesetItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains metadata about the ruleset.
+--
+-- /See:/ 'newRulesetItem' smart constructor.
+data RulesetItem = RulesetItem'
+  { -- | The ID of the Amazon Web Services account that owns the ruleset.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the ruleset was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who created the ruleset.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The description of the ruleset.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the user who last modified the
+    -- ruleset.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The modification date and time of the ruleset.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) for the ruleset.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The number of rules that are defined in the ruleset.
+    ruleCount :: Prelude.Maybe Prelude.Natural,
+    -- | Metadata tags that have been applied to the ruleset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the ruleset.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+    -- is associated with.
+    targetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RulesetItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'rulesetItem_accountId' - The ID of the Amazon Web Services account that owns the ruleset.
+--
+-- 'createDate', 'rulesetItem_createDate' - The date and time that the ruleset was created.
+--
+-- 'createdBy', 'rulesetItem_createdBy' - The Amazon Resource Name (ARN) of the user who created the ruleset.
+--
+-- 'description', 'rulesetItem_description' - The description of the ruleset.
+--
+-- 'lastModifiedBy', 'rulesetItem_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the
+-- ruleset.
+--
+-- 'lastModifiedDate', 'rulesetItem_lastModifiedDate' - The modification date and time of the ruleset.
+--
+-- 'resourceArn', 'rulesetItem_resourceArn' - The Amazon Resource Name (ARN) for the ruleset.
+--
+-- 'ruleCount', 'rulesetItem_ruleCount' - The number of rules that are defined in the ruleset.
+--
+-- 'tags', 'rulesetItem_tags' - Metadata tags that have been applied to the ruleset.
+--
+-- 'name', 'rulesetItem_name' - The name of the ruleset.
+--
+-- 'targetArn', 'rulesetItem_targetArn' - The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+-- is associated with.
+newRulesetItem ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'targetArn'
+  Prelude.Text ->
+  RulesetItem
+newRulesetItem pName_ pTargetArn_ =
+  RulesetItem'
+    { accountId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      ruleCount = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      targetArn = pTargetArn_
+    }
+
+-- | The ID of the Amazon Web Services account that owns the ruleset.
+rulesetItem_accountId :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.Text)
+rulesetItem_accountId = Lens.lens (\RulesetItem' {accountId} -> accountId) (\s@RulesetItem' {} a -> s {accountId = a} :: RulesetItem)
+
+-- | The date and time that the ruleset was created.
+rulesetItem_createDate :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.UTCTime)
+rulesetItem_createDate = Lens.lens (\RulesetItem' {createDate} -> createDate) (\s@RulesetItem' {} a -> s {createDate = a} :: RulesetItem) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who created the ruleset.
+rulesetItem_createdBy :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.Text)
+rulesetItem_createdBy = Lens.lens (\RulesetItem' {createdBy} -> createdBy) (\s@RulesetItem' {} a -> s {createdBy = a} :: RulesetItem)
+
+-- | The description of the ruleset.
+rulesetItem_description :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.Text)
+rulesetItem_description = Lens.lens (\RulesetItem' {description} -> description) (\s@RulesetItem' {} a -> s {description = a} :: RulesetItem)
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the
+-- ruleset.
+rulesetItem_lastModifiedBy :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.Text)
+rulesetItem_lastModifiedBy = Lens.lens (\RulesetItem' {lastModifiedBy} -> lastModifiedBy) (\s@RulesetItem' {} a -> s {lastModifiedBy = a} :: RulesetItem)
+
+-- | The modification date and time of the ruleset.
+rulesetItem_lastModifiedDate :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.UTCTime)
+rulesetItem_lastModifiedDate = Lens.lens (\RulesetItem' {lastModifiedDate} -> lastModifiedDate) (\s@RulesetItem' {} a -> s {lastModifiedDate = a} :: RulesetItem) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) for the ruleset.
+rulesetItem_resourceArn :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.Text)
+rulesetItem_resourceArn = Lens.lens (\RulesetItem' {resourceArn} -> resourceArn) (\s@RulesetItem' {} a -> s {resourceArn = a} :: RulesetItem)
+
+-- | The number of rules that are defined in the ruleset.
+rulesetItem_ruleCount :: Lens.Lens' RulesetItem (Prelude.Maybe Prelude.Natural)
+rulesetItem_ruleCount = Lens.lens (\RulesetItem' {ruleCount} -> ruleCount) (\s@RulesetItem' {} a -> s {ruleCount = a} :: RulesetItem)
+
+-- | Metadata tags that have been applied to the ruleset.
+rulesetItem_tags :: Lens.Lens' RulesetItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+rulesetItem_tags = Lens.lens (\RulesetItem' {tags} -> tags) (\s@RulesetItem' {} a -> s {tags = a} :: RulesetItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the ruleset.
+rulesetItem_name :: Lens.Lens' RulesetItem Prelude.Text
+rulesetItem_name = Lens.lens (\RulesetItem' {name} -> name) (\s@RulesetItem' {} a -> s {name = a} :: RulesetItem)
+
+-- | The Amazon Resource Name (ARN) of a resource (dataset) that the ruleset
+-- is associated with.
+rulesetItem_targetArn :: Lens.Lens' RulesetItem Prelude.Text
+rulesetItem_targetArn = Lens.lens (\RulesetItem' {targetArn} -> targetArn) (\s@RulesetItem' {} a -> s {targetArn = a} :: RulesetItem)
+
+instance Data.FromJSON RulesetItem where
+  parseJSON =
+    Data.withObject
+      "RulesetItem"
+      ( \x ->
+          RulesetItem'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "CreatedBy")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "LastModifiedBy")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "RuleCount")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "TargetArn")
+      )
+
+instance Prelude.Hashable RulesetItem where
+  hashWithSalt _salt RulesetItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedBy
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` ruleCount
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` targetArn
+
+instance Prelude.NFData RulesetItem where
+  rnf RulesetItem' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf ruleCount
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf targetArn
diff --git a/gen/Amazonka/DataBrew/Types/S3Location.hs b/gen/Amazonka/DataBrew/Types/S3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/S3Location.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.S3Location
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.S3Location where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an Amazon S3 location (bucket name, bucket owner, and object
+-- key) where DataBrew can read input data, or write output from a job.
+--
+-- /See:/ 'newS3Location' smart constructor.
+data S3Location = S3Location'
+  { -- | The Amazon Web Services account ID of the bucket owner.
+    bucketOwner :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the object in the bucket.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket name.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Location' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketOwner', 's3Location_bucketOwner' - The Amazon Web Services account ID of the bucket owner.
+--
+-- 'key', 's3Location_key' - The unique name of the object in the bucket.
+--
+-- 'bucket', 's3Location_bucket' - The Amazon S3 bucket name.
+newS3Location ::
+  -- | 'bucket'
+  Prelude.Text ->
+  S3Location
+newS3Location pBucket_ =
+  S3Location'
+    { bucketOwner = Prelude.Nothing,
+      key = Prelude.Nothing,
+      bucket = pBucket_
+    }
+
+-- | The Amazon Web Services account ID of the bucket owner.
+s3Location_bucketOwner :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_bucketOwner = Lens.lens (\S3Location' {bucketOwner} -> bucketOwner) (\s@S3Location' {} a -> s {bucketOwner = a} :: S3Location)
+
+-- | The unique name of the object in the bucket.
+s3Location_key :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_key = Lens.lens (\S3Location' {key} -> key) (\s@S3Location' {} a -> s {key = a} :: S3Location)
+
+-- | The Amazon S3 bucket name.
+s3Location_bucket :: Lens.Lens' S3Location Prelude.Text
+s3Location_bucket = Lens.lens (\S3Location' {bucket} -> bucket) (\s@S3Location' {} a -> s {bucket = a} :: S3Location)
+
+instance Data.FromJSON S3Location where
+  parseJSON =
+    Data.withObject
+      "S3Location"
+      ( \x ->
+          S3Location'
+            Prelude.<$> (x Data..:? "BucketOwner")
+            Prelude.<*> (x Data..:? "Key")
+            Prelude.<*> (x Data..: "Bucket")
+      )
+
+instance Prelude.Hashable S3Location where
+  hashWithSalt _salt S3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketOwner
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` bucket
+
+instance Prelude.NFData S3Location where
+  rnf S3Location' {..} =
+    Prelude.rnf bucketOwner
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf bucket
+
+instance Data.ToJSON S3Location where
+  toJSON S3Location' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BucketOwner" Data..=) Prelude.<$> bucketOwner,
+            ("Key" Data..=) Prelude.<$> key,
+            Prelude.Just ("Bucket" Data..= bucket)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/S3TableOutputOptions.hs b/gen/Amazonka/DataBrew/Types/S3TableOutputOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/S3TableOutputOptions.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.S3TableOutputOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.S3TableOutputOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents options that specify how and where DataBrew writes the Amazon
+-- S3 output generated by recipe jobs.
+--
+-- /See:/ 'newS3TableOutputOptions' smart constructor.
+data S3TableOutputOptions = S3TableOutputOptions'
+  { -- | Represents an Amazon S3 location (bucket name and object key) where
+    -- DataBrew can write output from a job.
+    location :: S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3TableOutputOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'location', 's3TableOutputOptions_location' - Represents an Amazon S3 location (bucket name and object key) where
+-- DataBrew can write output from a job.
+newS3TableOutputOptions ::
+  -- | 'location'
+  S3Location ->
+  S3TableOutputOptions
+newS3TableOutputOptions pLocation_ =
+  S3TableOutputOptions' {location = pLocation_}
+
+-- | Represents an Amazon S3 location (bucket name and object key) where
+-- DataBrew can write output from a job.
+s3TableOutputOptions_location :: Lens.Lens' S3TableOutputOptions S3Location
+s3TableOutputOptions_location = Lens.lens (\S3TableOutputOptions' {location} -> location) (\s@S3TableOutputOptions' {} a -> s {location = a} :: S3TableOutputOptions)
+
+instance Data.FromJSON S3TableOutputOptions where
+  parseJSON =
+    Data.withObject
+      "S3TableOutputOptions"
+      ( \x ->
+          S3TableOutputOptions'
+            Prelude.<$> (x Data..: "Location")
+      )
+
+instance Prelude.Hashable S3TableOutputOptions where
+  hashWithSalt _salt S3TableOutputOptions' {..} =
+    _salt `Prelude.hashWithSalt` location
+
+instance Prelude.NFData S3TableOutputOptions where
+  rnf S3TableOutputOptions' {..} = Prelude.rnf location
+
+instance Data.ToJSON S3TableOutputOptions where
+  toJSON S3TableOutputOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Location" Data..= location)]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/Sample.hs b/gen/Amazonka/DataBrew/Types/Sample.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Sample.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Sample
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Sample where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.SampleType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the sample size and sampling type for DataBrew to use for
+-- interactive data analysis.
+--
+-- /See:/ 'newSample' smart constructor.
+data Sample = Sample'
+  { -- | The number of rows in the sample.
+    size :: Prelude.Maybe Prelude.Natural,
+    -- | The way in which DataBrew obtains rows from a dataset.
+    type' :: SampleType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Sample' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'size', 'sample_size' - The number of rows in the sample.
+--
+-- 'type'', 'sample_type' - The way in which DataBrew obtains rows from a dataset.
+newSample ::
+  -- | 'type''
+  SampleType ->
+  Sample
+newSample pType_ =
+  Sample' {size = Prelude.Nothing, type' = pType_}
+
+-- | The number of rows in the sample.
+sample_size :: Lens.Lens' Sample (Prelude.Maybe Prelude.Natural)
+sample_size = Lens.lens (\Sample' {size} -> size) (\s@Sample' {} a -> s {size = a} :: Sample)
+
+-- | The way in which DataBrew obtains rows from a dataset.
+sample_type :: Lens.Lens' Sample SampleType
+sample_type = Lens.lens (\Sample' {type'} -> type') (\s@Sample' {} a -> s {type' = a} :: Sample)
+
+instance Data.FromJSON Sample where
+  parseJSON =
+    Data.withObject
+      "Sample"
+      ( \x ->
+          Sample'
+            Prelude.<$> (x Data..:? "Size")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable Sample where
+  hashWithSalt _salt Sample' {..} =
+    _salt
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Sample where
+  rnf Sample' {..} =
+    Prelude.rnf size `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON Sample where
+  toJSON Sample' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Size" Data..=) Prelude.<$> size,
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/SampleMode.hs b/gen/Amazonka/DataBrew/Types/SampleMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/SampleMode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.SampleMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.SampleMode
+  ( SampleMode
+      ( ..,
+        SampleMode_CUSTOM_ROWS,
+        SampleMode_FULL_DATASET
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SampleMode = SampleMode'
+  { fromSampleMode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SampleMode_CUSTOM_ROWS :: SampleMode
+pattern SampleMode_CUSTOM_ROWS = SampleMode' "CUSTOM_ROWS"
+
+pattern SampleMode_FULL_DATASET :: SampleMode
+pattern SampleMode_FULL_DATASET = SampleMode' "FULL_DATASET"
+
+{-# COMPLETE
+  SampleMode_CUSTOM_ROWS,
+  SampleMode_FULL_DATASET,
+  SampleMode'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/SampleType.hs b/gen/Amazonka/DataBrew/Types/SampleType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/SampleType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.SampleType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.SampleType
+  ( SampleType
+      ( ..,
+        SampleType_FIRST_N,
+        SampleType_LAST_N,
+        SampleType_RANDOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SampleType = SampleType'
+  { fromSampleType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SampleType_FIRST_N :: SampleType
+pattern SampleType_FIRST_N = SampleType' "FIRST_N"
+
+pattern SampleType_LAST_N :: SampleType
+pattern SampleType_LAST_N = SampleType' "LAST_N"
+
+pattern SampleType_RANDOM :: SampleType
+pattern SampleType_RANDOM = SampleType' "RANDOM"
+
+{-# COMPLETE
+  SampleType_FIRST_N,
+  SampleType_LAST_N,
+  SampleType_RANDOM,
+  SampleType'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/Schedule.hs b/gen/Amazonka/DataBrew/Types/Schedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Schedule.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Schedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Schedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents one or more dates and times when a job is to run.
+--
+-- /See:/ 'newSchedule' smart constructor.
+data Schedule = Schedule'
+  { -- | The ID of the Amazon Web Services account that owns the schedule.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the schedule was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the user who created the schedule.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The dates and times when the job is to run. For more information, see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+    -- in the /Glue DataBrew Developer Guide/.
+    cronExpression :: Prelude.Maybe Prelude.Text,
+    -- | A list of jobs to be run, according to the schedule.
+    jobNames :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the user who last modified the
+    -- schedule.
+    lastModifiedBy :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the schedule was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the schedule.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | Metadata tags that have been applied to the schedule.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the schedule.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Schedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'schedule_accountId' - The ID of the Amazon Web Services account that owns the schedule.
+--
+-- 'createDate', 'schedule_createDate' - The date and time that the schedule was created.
+--
+-- 'createdBy', 'schedule_createdBy' - The Amazon Resource Name (ARN) of the user who created the schedule.
+--
+-- 'cronExpression', 'schedule_cronExpression' - The dates and times when the job is to run. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+--
+-- 'jobNames', 'schedule_jobNames' - A list of jobs to be run, according to the schedule.
+--
+-- 'lastModifiedBy', 'schedule_lastModifiedBy' - The Amazon Resource Name (ARN) of the user who last modified the
+-- schedule.
+--
+-- 'lastModifiedDate', 'schedule_lastModifiedDate' - The date and time when the schedule was last modified.
+--
+-- 'resourceArn', 'schedule_resourceArn' - The Amazon Resource Name (ARN) of the schedule.
+--
+-- 'tags', 'schedule_tags' - Metadata tags that have been applied to the schedule.
+--
+-- 'name', 'schedule_name' - The name of the schedule.
+newSchedule ::
+  -- | 'name'
+  Prelude.Text ->
+  Schedule
+newSchedule pName_ =
+  Schedule'
+    { accountId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      cronExpression = Prelude.Nothing,
+      jobNames = Prelude.Nothing,
+      lastModifiedBy = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The ID of the Amazon Web Services account that owns the schedule.
+schedule_accountId :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_accountId = Lens.lens (\Schedule' {accountId} -> accountId) (\s@Schedule' {} a -> s {accountId = a} :: Schedule)
+
+-- | The date and time that the schedule was created.
+schedule_createDate :: Lens.Lens' Schedule (Prelude.Maybe Prelude.UTCTime)
+schedule_createDate = Lens.lens (\Schedule' {createDate} -> createDate) (\s@Schedule' {} a -> s {createDate = a} :: Schedule) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the user who created the schedule.
+schedule_createdBy :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_createdBy = Lens.lens (\Schedule' {createdBy} -> createdBy) (\s@Schedule' {} a -> s {createdBy = a} :: Schedule)
+
+-- | The dates and times when the job is to run. For more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+schedule_cronExpression :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_cronExpression = Lens.lens (\Schedule' {cronExpression} -> cronExpression) (\s@Schedule' {} a -> s {cronExpression = a} :: Schedule)
+
+-- | A list of jobs to be run, according to the schedule.
+schedule_jobNames :: Lens.Lens' Schedule (Prelude.Maybe [Prelude.Text])
+schedule_jobNames = Lens.lens (\Schedule' {jobNames} -> jobNames) (\s@Schedule' {} a -> s {jobNames = a} :: Schedule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the user who last modified the
+-- schedule.
+schedule_lastModifiedBy :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_lastModifiedBy = Lens.lens (\Schedule' {lastModifiedBy} -> lastModifiedBy) (\s@Schedule' {} a -> s {lastModifiedBy = a} :: Schedule)
+
+-- | The date and time when the schedule was last modified.
+schedule_lastModifiedDate :: Lens.Lens' Schedule (Prelude.Maybe Prelude.UTCTime)
+schedule_lastModifiedDate = Lens.lens (\Schedule' {lastModifiedDate} -> lastModifiedDate) (\s@Schedule' {} a -> s {lastModifiedDate = a} :: Schedule) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the schedule.
+schedule_resourceArn :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_resourceArn = Lens.lens (\Schedule' {resourceArn} -> resourceArn) (\s@Schedule' {} a -> s {resourceArn = a} :: Schedule)
+
+-- | Metadata tags that have been applied to the schedule.
+schedule_tags :: Lens.Lens' Schedule (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+schedule_tags = Lens.lens (\Schedule' {tags} -> tags) (\s@Schedule' {} a -> s {tags = a} :: Schedule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the schedule.
+schedule_name :: Lens.Lens' Schedule Prelude.Text
+schedule_name = Lens.lens (\Schedule' {name} -> name) (\s@Schedule' {} a -> s {name = a} :: Schedule)
+
+instance Data.FromJSON Schedule where
+  parseJSON =
+    Data.withObject
+      "Schedule"
+      ( \x ->
+          Schedule'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "CreatedBy")
+            Prelude.<*> (x Data..:? "CronExpression")
+            Prelude.<*> (x Data..:? "JobNames" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "LastModifiedBy")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable Schedule where
+  hashWithSalt _salt Schedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` cronExpression
+      `Prelude.hashWithSalt` jobNames
+      `Prelude.hashWithSalt` lastModifiedBy
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Schedule where
+  rnf Schedule' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf jobNames
+      `Prelude.seq` Prelude.rnf lastModifiedBy
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/Types/SessionStatus.hs b/gen/Amazonka/DataBrew/Types/SessionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/SessionStatus.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.SessionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.SessionStatus
+  ( SessionStatus
+      ( ..,
+        SessionStatus_ASSIGNED,
+        SessionStatus_FAILED,
+        SessionStatus_INITIALIZING,
+        SessionStatus_PROVISIONING,
+        SessionStatus_READY,
+        SessionStatus_RECYCLING,
+        SessionStatus_ROTATING,
+        SessionStatus_TERMINATED,
+        SessionStatus_TERMINATING,
+        SessionStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SessionStatus = SessionStatus'
+  { fromSessionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SessionStatus_ASSIGNED :: SessionStatus
+pattern SessionStatus_ASSIGNED = SessionStatus' "ASSIGNED"
+
+pattern SessionStatus_FAILED :: SessionStatus
+pattern SessionStatus_FAILED = SessionStatus' "FAILED"
+
+pattern SessionStatus_INITIALIZING :: SessionStatus
+pattern SessionStatus_INITIALIZING = SessionStatus' "INITIALIZING"
+
+pattern SessionStatus_PROVISIONING :: SessionStatus
+pattern SessionStatus_PROVISIONING = SessionStatus' "PROVISIONING"
+
+pattern SessionStatus_READY :: SessionStatus
+pattern SessionStatus_READY = SessionStatus' "READY"
+
+pattern SessionStatus_RECYCLING :: SessionStatus
+pattern SessionStatus_RECYCLING = SessionStatus' "RECYCLING"
+
+pattern SessionStatus_ROTATING :: SessionStatus
+pattern SessionStatus_ROTATING = SessionStatus' "ROTATING"
+
+pattern SessionStatus_TERMINATED :: SessionStatus
+pattern SessionStatus_TERMINATED = SessionStatus' "TERMINATED"
+
+pattern SessionStatus_TERMINATING :: SessionStatus
+pattern SessionStatus_TERMINATING = SessionStatus' "TERMINATING"
+
+pattern SessionStatus_UPDATING :: SessionStatus
+pattern SessionStatus_UPDATING = SessionStatus' "UPDATING"
+
+{-# COMPLETE
+  SessionStatus_ASSIGNED,
+  SessionStatus_FAILED,
+  SessionStatus_INITIALIZING,
+  SessionStatus_PROVISIONING,
+  SessionStatus_READY,
+  SessionStatus_RECYCLING,
+  SessionStatus_ROTATING,
+  SessionStatus_TERMINATED,
+  SessionStatus_TERMINATING,
+  SessionStatus_UPDATING,
+  SessionStatus'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/Source.hs b/gen/Amazonka/DataBrew/Types/Source.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Source.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Source
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Source
+  ( Source
+      ( ..,
+        Source_DATABASE,
+        Source_DATA_CATALOG,
+        Source_S3
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Source = Source' {fromSource :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Source_DATABASE :: Source
+pattern Source_DATABASE = Source' "DATABASE"
+
+pattern Source_DATA_CATALOG :: Source
+pattern Source_DATA_CATALOG = Source' "DATA-CATALOG"
+
+pattern Source_S3 :: Source
+pattern Source_S3 = Source' "S3"
+
+{-# COMPLETE
+  Source_DATABASE,
+  Source_DATA_CATALOG,
+  Source_S3,
+  Source'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/StatisticOverride.hs b/gen/Amazonka/DataBrew/Types/StatisticOverride.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/StatisticOverride.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.StatisticOverride
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.StatisticOverride where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Override of a particular evaluation for a profile job.
+--
+-- /See:/ 'newStatisticOverride' smart constructor.
+data StatisticOverride = StatisticOverride'
+  { -- | The name of an evaluation
+    statistic :: Prelude.Text,
+    -- | A map that includes overrides of an evaluation’s parameters.
+    parameters :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StatisticOverride' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statistic', 'statisticOverride_statistic' - The name of an evaluation
+--
+-- 'parameters', 'statisticOverride_parameters' - A map that includes overrides of an evaluation’s parameters.
+newStatisticOverride ::
+  -- | 'statistic'
+  Prelude.Text ->
+  StatisticOverride
+newStatisticOverride pStatistic_ =
+  StatisticOverride'
+    { statistic = pStatistic_,
+      parameters = Prelude.mempty
+    }
+
+-- | The name of an evaluation
+statisticOverride_statistic :: Lens.Lens' StatisticOverride Prelude.Text
+statisticOverride_statistic = Lens.lens (\StatisticOverride' {statistic} -> statistic) (\s@StatisticOverride' {} a -> s {statistic = a} :: StatisticOverride)
+
+-- | A map that includes overrides of an evaluation’s parameters.
+statisticOverride_parameters :: Lens.Lens' StatisticOverride (Prelude.HashMap Prelude.Text Prelude.Text)
+statisticOverride_parameters = Lens.lens (\StatisticOverride' {parameters} -> parameters) (\s@StatisticOverride' {} a -> s {parameters = a} :: StatisticOverride) Prelude.. Lens.coerced
+
+instance Data.FromJSON StatisticOverride where
+  parseJSON =
+    Data.withObject
+      "StatisticOverride"
+      ( \x ->
+          StatisticOverride'
+            Prelude.<$> (x Data..: "Statistic")
+            Prelude.<*> (x Data..:? "Parameters" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable StatisticOverride where
+  hashWithSalt _salt StatisticOverride' {..} =
+    _salt
+      `Prelude.hashWithSalt` statistic
+      `Prelude.hashWithSalt` parameters
+
+instance Prelude.NFData StatisticOverride where
+  rnf StatisticOverride' {..} =
+    Prelude.rnf statistic
+      `Prelude.seq` Prelude.rnf parameters
+
+instance Data.ToJSON StatisticOverride where
+  toJSON StatisticOverride' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Statistic" Data..= statistic),
+            Prelude.Just ("Parameters" Data..= parameters)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/StatisticsConfiguration.hs b/gen/Amazonka/DataBrew/Types/StatisticsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/StatisticsConfiguration.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.StatisticsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.StatisticsConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.StatisticOverride
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of evaluations for a profile job. This configuration can
+-- be used to select evaluations and override the parameters of selected
+-- evaluations.
+--
+-- /See:/ 'newStatisticsConfiguration' smart constructor.
+data StatisticsConfiguration = StatisticsConfiguration'
+  { -- | List of included evaluations. When the list is undefined, all supported
+    -- evaluations will be included.
+    includedStatistics :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | List of overrides for evaluations.
+    overrides :: Prelude.Maybe (Prelude.NonEmpty StatisticOverride)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StatisticsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includedStatistics', 'statisticsConfiguration_includedStatistics' - List of included evaluations. When the list is undefined, all supported
+-- evaluations will be included.
+--
+-- 'overrides', 'statisticsConfiguration_overrides' - List of overrides for evaluations.
+newStatisticsConfiguration ::
+  StatisticsConfiguration
+newStatisticsConfiguration =
+  StatisticsConfiguration'
+    { includedStatistics =
+        Prelude.Nothing,
+      overrides = Prelude.Nothing
+    }
+
+-- | List of included evaluations. When the list is undefined, all supported
+-- evaluations will be included.
+statisticsConfiguration_includedStatistics :: Lens.Lens' StatisticsConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+statisticsConfiguration_includedStatistics = Lens.lens (\StatisticsConfiguration' {includedStatistics} -> includedStatistics) (\s@StatisticsConfiguration' {} a -> s {includedStatistics = a} :: StatisticsConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | List of overrides for evaluations.
+statisticsConfiguration_overrides :: Lens.Lens' StatisticsConfiguration (Prelude.Maybe (Prelude.NonEmpty StatisticOverride))
+statisticsConfiguration_overrides = Lens.lens (\StatisticsConfiguration' {overrides} -> overrides) (\s@StatisticsConfiguration' {} a -> s {overrides = a} :: StatisticsConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON StatisticsConfiguration where
+  parseJSON =
+    Data.withObject
+      "StatisticsConfiguration"
+      ( \x ->
+          StatisticsConfiguration'
+            Prelude.<$> (x Data..:? "IncludedStatistics")
+            Prelude.<*> (x Data..:? "Overrides")
+      )
+
+instance Prelude.Hashable StatisticsConfiguration where
+  hashWithSalt _salt StatisticsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` includedStatistics
+      `Prelude.hashWithSalt` overrides
+
+instance Prelude.NFData StatisticsConfiguration where
+  rnf StatisticsConfiguration' {..} =
+    Prelude.rnf includedStatistics
+      `Prelude.seq` Prelude.rnf overrides
+
+instance Data.ToJSON StatisticsConfiguration where
+  toJSON StatisticsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IncludedStatistics" Data..=)
+              Prelude.<$> includedStatistics,
+            ("Overrides" Data..=) Prelude.<$> overrides
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/Threshold.hs b/gen/Amazonka/DataBrew/Types/Threshold.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/Threshold.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.Threshold
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.Threshold where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.ThresholdType
+import Amazonka.DataBrew.Types.ThresholdUnit
+import qualified Amazonka.Prelude as Prelude
+
+-- | The threshold used with a non-aggregate check expression. The
+-- non-aggregate check expression will be applied to each row in a specific
+-- column. Then the threshold will be used to determine whether the
+-- validation succeeds.
+--
+-- /See:/ 'newThreshold' smart constructor.
+data Threshold = Threshold'
+  { -- | The type of a threshold. Used for comparison of an actual count of rows
+    -- that satisfy the rule to the threshold value.
+    type' :: Prelude.Maybe ThresholdType,
+    -- | Unit of threshold value. Can be either a COUNT or PERCENTAGE of the full
+    -- sample size used for validation.
+    unit :: Prelude.Maybe ThresholdUnit,
+    -- | The value of a threshold.
+    value :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Threshold' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'type'', 'threshold_type' - The type of a threshold. Used for comparison of an actual count of rows
+-- that satisfy the rule to the threshold value.
+--
+-- 'unit', 'threshold_unit' - Unit of threshold value. Can be either a COUNT or PERCENTAGE of the full
+-- sample size used for validation.
+--
+-- 'value', 'threshold_value' - The value of a threshold.
+newThreshold ::
+  -- | 'value'
+  Prelude.Double ->
+  Threshold
+newThreshold pValue_ =
+  Threshold'
+    { type' = Prelude.Nothing,
+      unit = Prelude.Nothing,
+      value = pValue_
+    }
+
+-- | The type of a threshold. Used for comparison of an actual count of rows
+-- that satisfy the rule to the threshold value.
+threshold_type :: Lens.Lens' Threshold (Prelude.Maybe ThresholdType)
+threshold_type = Lens.lens (\Threshold' {type'} -> type') (\s@Threshold' {} a -> s {type' = a} :: Threshold)
+
+-- | Unit of threshold value. Can be either a COUNT or PERCENTAGE of the full
+-- sample size used for validation.
+threshold_unit :: Lens.Lens' Threshold (Prelude.Maybe ThresholdUnit)
+threshold_unit = Lens.lens (\Threshold' {unit} -> unit) (\s@Threshold' {} a -> s {unit = a} :: Threshold)
+
+-- | The value of a threshold.
+threshold_value :: Lens.Lens' Threshold Prelude.Double
+threshold_value = Lens.lens (\Threshold' {value} -> value) (\s@Threshold' {} a -> s {value = a} :: Threshold)
+
+instance Data.FromJSON Threshold where
+  parseJSON =
+    Data.withObject
+      "Threshold"
+      ( \x ->
+          Threshold'
+            Prelude.<$> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "Unit")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Threshold where
+  hashWithSalt _salt Threshold' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Threshold where
+  rnf Threshold' {..} =
+    Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Threshold where
+  toJSON Threshold' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Type" Data..=) Prelude.<$> type',
+            ("Unit" Data..=) Prelude.<$> unit,
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/ThresholdType.hs b/gen/Amazonka/DataBrew/Types/ThresholdType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ThresholdType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ThresholdType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ThresholdType
+  ( ThresholdType
+      ( ..,
+        ThresholdType_GREATER_THAN,
+        ThresholdType_GREATER_THAN_OR_EQUAL,
+        ThresholdType_LESS_THAN,
+        ThresholdType_LESS_THAN_OR_EQUAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ThresholdType = ThresholdType'
+  { fromThresholdType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ThresholdType_GREATER_THAN :: ThresholdType
+pattern ThresholdType_GREATER_THAN = ThresholdType' "GREATER_THAN"
+
+pattern ThresholdType_GREATER_THAN_OR_EQUAL :: ThresholdType
+pattern ThresholdType_GREATER_THAN_OR_EQUAL = ThresholdType' "GREATER_THAN_OR_EQUAL"
+
+pattern ThresholdType_LESS_THAN :: ThresholdType
+pattern ThresholdType_LESS_THAN = ThresholdType' "LESS_THAN"
+
+pattern ThresholdType_LESS_THAN_OR_EQUAL :: ThresholdType
+pattern ThresholdType_LESS_THAN_OR_EQUAL = ThresholdType' "LESS_THAN_OR_EQUAL"
+
+{-# COMPLETE
+  ThresholdType_GREATER_THAN,
+  ThresholdType_GREATER_THAN_OR_EQUAL,
+  ThresholdType_LESS_THAN,
+  ThresholdType_LESS_THAN_OR_EQUAL,
+  ThresholdType'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/ThresholdUnit.hs b/gen/Amazonka/DataBrew/Types/ThresholdUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ThresholdUnit.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ThresholdUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ThresholdUnit
+  ( ThresholdUnit
+      ( ..,
+        ThresholdUnit_COUNT,
+        ThresholdUnit_PERCENTAGE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ThresholdUnit = ThresholdUnit'
+  { fromThresholdUnit ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ThresholdUnit_COUNT :: ThresholdUnit
+pattern ThresholdUnit_COUNT = ThresholdUnit' "COUNT"
+
+pattern ThresholdUnit_PERCENTAGE :: ThresholdUnit
+pattern ThresholdUnit_PERCENTAGE = ThresholdUnit' "PERCENTAGE"
+
+{-# COMPLETE
+  ThresholdUnit_COUNT,
+  ThresholdUnit_PERCENTAGE,
+  ThresholdUnit'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/ValidationConfiguration.hs b/gen/Amazonka/DataBrew/Types/ValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ValidationConfiguration.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ValidationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ValidationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.ValidationMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration for data quality validation. Used to select the Rulesets
+-- and Validation Mode to be used in the profile job. When
+-- ValidationConfiguration is null, the profile job will run without data
+-- quality validation.
+--
+-- /See:/ 'newValidationConfiguration' smart constructor.
+data ValidationConfiguration = ValidationConfiguration'
+  { -- | Mode of data quality validation. Default mode is “CHECK_ALL” which
+    -- verifies all rules defined in the selected ruleset.
+    validationMode :: Prelude.Maybe ValidationMode,
+    -- | The Amazon Resource Name (ARN) for the ruleset to be validated in the
+    -- profile job. The TargetArn of the selected ruleset should be the same as
+    -- the Amazon Resource Name (ARN) of the dataset that is associated with
+    -- the profile job.
+    rulesetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'validationMode', 'validationConfiguration_validationMode' - Mode of data quality validation. Default mode is “CHECK_ALL” which
+-- verifies all rules defined in the selected ruleset.
+--
+-- 'rulesetArn', 'validationConfiguration_rulesetArn' - The Amazon Resource Name (ARN) for the ruleset to be validated in the
+-- profile job. The TargetArn of the selected ruleset should be the same as
+-- the Amazon Resource Name (ARN) of the dataset that is associated with
+-- the profile job.
+newValidationConfiguration ::
+  -- | 'rulesetArn'
+  Prelude.Text ->
+  ValidationConfiguration
+newValidationConfiguration pRulesetArn_ =
+  ValidationConfiguration'
+    { validationMode =
+        Prelude.Nothing,
+      rulesetArn = pRulesetArn_
+    }
+
+-- | Mode of data quality validation. Default mode is “CHECK_ALL” which
+-- verifies all rules defined in the selected ruleset.
+validationConfiguration_validationMode :: Lens.Lens' ValidationConfiguration (Prelude.Maybe ValidationMode)
+validationConfiguration_validationMode = Lens.lens (\ValidationConfiguration' {validationMode} -> validationMode) (\s@ValidationConfiguration' {} a -> s {validationMode = a} :: ValidationConfiguration)
+
+-- | The Amazon Resource Name (ARN) for the ruleset to be validated in the
+-- profile job. The TargetArn of the selected ruleset should be the same as
+-- the Amazon Resource Name (ARN) of the dataset that is associated with
+-- the profile job.
+validationConfiguration_rulesetArn :: Lens.Lens' ValidationConfiguration Prelude.Text
+validationConfiguration_rulesetArn = Lens.lens (\ValidationConfiguration' {rulesetArn} -> rulesetArn) (\s@ValidationConfiguration' {} a -> s {rulesetArn = a} :: ValidationConfiguration)
+
+instance Data.FromJSON ValidationConfiguration where
+  parseJSON =
+    Data.withObject
+      "ValidationConfiguration"
+      ( \x ->
+          ValidationConfiguration'
+            Prelude.<$> (x Data..:? "ValidationMode")
+            Prelude.<*> (x Data..: "RulesetArn")
+      )
+
+instance Prelude.Hashable ValidationConfiguration where
+  hashWithSalt _salt ValidationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` validationMode
+      `Prelude.hashWithSalt` rulesetArn
+
+instance Prelude.NFData ValidationConfiguration where
+  rnf ValidationConfiguration' {..} =
+    Prelude.rnf validationMode
+      `Prelude.seq` Prelude.rnf rulesetArn
+
+instance Data.ToJSON ValidationConfiguration where
+  toJSON ValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ValidationMode" Data..=)
+              Prelude.<$> validationMode,
+            Prelude.Just ("RulesetArn" Data..= rulesetArn)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/Types/ValidationMode.hs b/gen/Amazonka/DataBrew/Types/ValidationMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ValidationMode.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ValidationMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ValidationMode
+  ( ValidationMode
+      ( ..,
+        ValidationMode_CHECK_ALL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ValidationMode = ValidationMode'
+  { fromValidationMode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ValidationMode_CHECK_ALL :: ValidationMode
+pattern ValidationMode_CHECK_ALL = ValidationMode' "CHECK_ALL"
+
+{-# COMPLETE
+  ValidationMode_CHECK_ALL,
+  ValidationMode'
+  #-}
diff --git a/gen/Amazonka/DataBrew/Types/ViewFrame.hs b/gen/Amazonka/DataBrew/Types/ViewFrame.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Types/ViewFrame.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Types.ViewFrame
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Types.ViewFrame where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types.AnalyticsMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the data being transformed during an action.
+--
+-- /See:/ 'newViewFrame' smart constructor.
+data ViewFrame = ViewFrame'
+  { -- | Controls if analytics computation is enabled or disabled. Enabled by
+    -- default.
+    analytics :: Prelude.Maybe AnalyticsMode,
+    -- | The number of columns to include in the view frame, beginning with the
+    -- @StartColumnIndex@ value and ignoring any columns in the @HiddenColumns@
+    -- list.
+    columnRange :: Prelude.Maybe Prelude.Natural,
+    -- | A list of columns to hide in the view frame.
+    hiddenColumns :: Prelude.Maybe [Prelude.Text],
+    -- | The number of rows to include in the view frame, beginning with the
+    -- @StartRowIndex@ value.
+    rowRange :: Prelude.Maybe Prelude.Int,
+    -- | The starting index for the range of rows to return in the view frame.
+    startRowIndex :: Prelude.Maybe Prelude.Natural,
+    -- | The starting index for the range of columns to return in the view frame.
+    startColumnIndex :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ViewFrame' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analytics', 'viewFrame_analytics' - Controls if analytics computation is enabled or disabled. Enabled by
+-- default.
+--
+-- 'columnRange', 'viewFrame_columnRange' - The number of columns to include in the view frame, beginning with the
+-- @StartColumnIndex@ value and ignoring any columns in the @HiddenColumns@
+-- list.
+--
+-- 'hiddenColumns', 'viewFrame_hiddenColumns' - A list of columns to hide in the view frame.
+--
+-- 'rowRange', 'viewFrame_rowRange' - The number of rows to include in the view frame, beginning with the
+-- @StartRowIndex@ value.
+--
+-- 'startRowIndex', 'viewFrame_startRowIndex' - The starting index for the range of rows to return in the view frame.
+--
+-- 'startColumnIndex', 'viewFrame_startColumnIndex' - The starting index for the range of columns to return in the view frame.
+newViewFrame ::
+  -- | 'startColumnIndex'
+  Prelude.Natural ->
+  ViewFrame
+newViewFrame pStartColumnIndex_ =
+  ViewFrame'
+    { analytics = Prelude.Nothing,
+      columnRange = Prelude.Nothing,
+      hiddenColumns = Prelude.Nothing,
+      rowRange = Prelude.Nothing,
+      startRowIndex = Prelude.Nothing,
+      startColumnIndex = pStartColumnIndex_
+    }
+
+-- | Controls if analytics computation is enabled or disabled. Enabled by
+-- default.
+viewFrame_analytics :: Lens.Lens' ViewFrame (Prelude.Maybe AnalyticsMode)
+viewFrame_analytics = Lens.lens (\ViewFrame' {analytics} -> analytics) (\s@ViewFrame' {} a -> s {analytics = a} :: ViewFrame)
+
+-- | The number of columns to include in the view frame, beginning with the
+-- @StartColumnIndex@ value and ignoring any columns in the @HiddenColumns@
+-- list.
+viewFrame_columnRange :: Lens.Lens' ViewFrame (Prelude.Maybe Prelude.Natural)
+viewFrame_columnRange = Lens.lens (\ViewFrame' {columnRange} -> columnRange) (\s@ViewFrame' {} a -> s {columnRange = a} :: ViewFrame)
+
+-- | A list of columns to hide in the view frame.
+viewFrame_hiddenColumns :: Lens.Lens' ViewFrame (Prelude.Maybe [Prelude.Text])
+viewFrame_hiddenColumns = Lens.lens (\ViewFrame' {hiddenColumns} -> hiddenColumns) (\s@ViewFrame' {} a -> s {hiddenColumns = a} :: ViewFrame) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of rows to include in the view frame, beginning with the
+-- @StartRowIndex@ value.
+viewFrame_rowRange :: Lens.Lens' ViewFrame (Prelude.Maybe Prelude.Int)
+viewFrame_rowRange = Lens.lens (\ViewFrame' {rowRange} -> rowRange) (\s@ViewFrame' {} a -> s {rowRange = a} :: ViewFrame)
+
+-- | The starting index for the range of rows to return in the view frame.
+viewFrame_startRowIndex :: Lens.Lens' ViewFrame (Prelude.Maybe Prelude.Natural)
+viewFrame_startRowIndex = Lens.lens (\ViewFrame' {startRowIndex} -> startRowIndex) (\s@ViewFrame' {} a -> s {startRowIndex = a} :: ViewFrame)
+
+-- | The starting index for the range of columns to return in the view frame.
+viewFrame_startColumnIndex :: Lens.Lens' ViewFrame Prelude.Natural
+viewFrame_startColumnIndex = Lens.lens (\ViewFrame' {startColumnIndex} -> startColumnIndex) (\s@ViewFrame' {} a -> s {startColumnIndex = a} :: ViewFrame)
+
+instance Prelude.Hashable ViewFrame where
+  hashWithSalt _salt ViewFrame' {..} =
+    _salt
+      `Prelude.hashWithSalt` analytics
+      `Prelude.hashWithSalt` columnRange
+      `Prelude.hashWithSalt` hiddenColumns
+      `Prelude.hashWithSalt` rowRange
+      `Prelude.hashWithSalt` startRowIndex
+      `Prelude.hashWithSalt` startColumnIndex
+
+instance Prelude.NFData ViewFrame where
+  rnf ViewFrame' {..} =
+    Prelude.rnf analytics
+      `Prelude.seq` Prelude.rnf columnRange
+      `Prelude.seq` Prelude.rnf hiddenColumns
+      `Prelude.seq` Prelude.rnf rowRange
+      `Prelude.seq` Prelude.rnf startRowIndex
+      `Prelude.seq` Prelude.rnf startColumnIndex
+
+instance Data.ToJSON ViewFrame where
+  toJSON ViewFrame' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Analytics" Data..=) Prelude.<$> analytics,
+            ("ColumnRange" Data..=) Prelude.<$> columnRange,
+            ("HiddenColumns" Data..=) Prelude.<$> hiddenColumns,
+            ("RowRange" Data..=) Prelude.<$> rowRange,
+            ("StartRowIndex" Data..=) Prelude.<$> startRowIndex,
+            Prelude.Just
+              ("StartColumnIndex" Data..= startColumnIndex)
+          ]
+      )
diff --git a/gen/Amazonka/DataBrew/UntagResource.hs b/gen/Amazonka/DataBrew/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UntagResource.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes metadata tags from a DataBrew resource.
+module Amazonka.DataBrew.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | A DataBrew resource from which you want to remove a tag or tags. The
+    -- value for this parameter is an Amazon Resource Name (ARN).
+    resourceArn :: Prelude.Text,
+    -- | The tag keys (names) of one or more tags to be removed.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - A DataBrew resource from which you want to remove a tag or tags. The
+-- value for this parameter is an Amazon Resource Name (ARN).
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys (names) of one or more tags to be removed.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | A DataBrew resource from which you want to remove a tag or tags. The
+-- value for this parameter is an Amazon Resource Name (ARN).
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys (names) of one or more tags to be removed.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataBrew/UpdateDataset.hs b/gen/Amazonka/DataBrew/UpdateDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateDataset.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the definition of an existing DataBrew dataset.
+module Amazonka.DataBrew.UpdateDataset
+  ( -- * Creating a Request
+    UpdateDataset (..),
+    newUpdateDataset,
+
+    -- * Request Lenses
+    updateDataset_format,
+    updateDataset_formatOptions,
+    updateDataset_pathOptions,
+    updateDataset_name,
+    updateDataset_input,
+
+    -- * Destructuring the Response
+    UpdateDatasetResponse (..),
+    newUpdateDatasetResponse,
+
+    -- * Response Lenses
+    updateDatasetResponse_httpStatus,
+    updateDatasetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDataset' smart constructor.
+data UpdateDataset = UpdateDataset'
+  { -- | The file format of a dataset that is created from an Amazon S3 file or
+    -- folder.
+    format :: Prelude.Maybe InputFormat,
+    formatOptions :: Prelude.Maybe FormatOptions,
+    -- | A set of options that defines how DataBrew interprets an Amazon S3 path
+    -- of the dataset.
+    pathOptions :: Prelude.Maybe PathOptions,
+    -- | The name of the dataset to be updated.
+    name :: Prelude.Text,
+    input :: Input
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'updateDataset_format' - The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+--
+-- 'formatOptions', 'updateDataset_formatOptions' - Undocumented member.
+--
+-- 'pathOptions', 'updateDataset_pathOptions' - A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+--
+-- 'name', 'updateDataset_name' - The name of the dataset to be updated.
+--
+-- 'input', 'updateDataset_input' - Undocumented member.
+newUpdateDataset ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'input'
+  Input ->
+  UpdateDataset
+newUpdateDataset pName_ pInput_ =
+  UpdateDataset'
+    { format = Prelude.Nothing,
+      formatOptions = Prelude.Nothing,
+      pathOptions = Prelude.Nothing,
+      name = pName_,
+      input = pInput_
+    }
+
+-- | The file format of a dataset that is created from an Amazon S3 file or
+-- folder.
+updateDataset_format :: Lens.Lens' UpdateDataset (Prelude.Maybe InputFormat)
+updateDataset_format = Lens.lens (\UpdateDataset' {format} -> format) (\s@UpdateDataset' {} a -> s {format = a} :: UpdateDataset)
+
+-- | Undocumented member.
+updateDataset_formatOptions :: Lens.Lens' UpdateDataset (Prelude.Maybe FormatOptions)
+updateDataset_formatOptions = Lens.lens (\UpdateDataset' {formatOptions} -> formatOptions) (\s@UpdateDataset' {} a -> s {formatOptions = a} :: UpdateDataset)
+
+-- | A set of options that defines how DataBrew interprets an Amazon S3 path
+-- of the dataset.
+updateDataset_pathOptions :: Lens.Lens' UpdateDataset (Prelude.Maybe PathOptions)
+updateDataset_pathOptions = Lens.lens (\UpdateDataset' {pathOptions} -> pathOptions) (\s@UpdateDataset' {} a -> s {pathOptions = a} :: UpdateDataset)
+
+-- | The name of the dataset to be updated.
+updateDataset_name :: Lens.Lens' UpdateDataset Prelude.Text
+updateDataset_name = Lens.lens (\UpdateDataset' {name} -> name) (\s@UpdateDataset' {} a -> s {name = a} :: UpdateDataset)
+
+-- | Undocumented member.
+updateDataset_input :: Lens.Lens' UpdateDataset Input
+updateDataset_input = Lens.lens (\UpdateDataset' {input} -> input) (\s@UpdateDataset' {} a -> s {input = a} :: UpdateDataset)
+
+instance Core.AWSRequest UpdateDataset where
+  type
+    AWSResponse UpdateDataset =
+      UpdateDatasetResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDatasetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateDataset where
+  hashWithSalt _salt UpdateDataset' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` formatOptions
+      `Prelude.hashWithSalt` pathOptions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` input
+
+instance Prelude.NFData UpdateDataset where
+  rnf UpdateDataset' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf formatOptions
+      `Prelude.seq` Prelude.rnf pathOptions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf input
+
+instance Data.ToHeaders UpdateDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDataset where
+  toJSON UpdateDataset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("FormatOptions" Data..=) Prelude.<$> formatOptions,
+            ("PathOptions" Data..=) Prelude.<$> pathOptions,
+            Prelude.Just ("Input" Data..= input)
+          ]
+      )
+
+instance Data.ToPath UpdateDataset where
+  toPath UpdateDataset' {..} =
+    Prelude.mconcat ["/datasets/", Data.toBS name]
+
+instance Data.ToQuery UpdateDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDatasetResponse' smart constructor.
+data UpdateDatasetResponse = UpdateDatasetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the dataset that you updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateDatasetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateDatasetResponse_name' - The name of the dataset that you updated.
+newUpdateDatasetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateDatasetResponse
+newUpdateDatasetResponse pHttpStatus_ pName_ =
+  UpdateDatasetResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+updateDatasetResponse_httpStatus :: Lens.Lens' UpdateDatasetResponse Prelude.Int
+updateDatasetResponse_httpStatus = Lens.lens (\UpdateDatasetResponse' {httpStatus} -> httpStatus) (\s@UpdateDatasetResponse' {} a -> s {httpStatus = a} :: UpdateDatasetResponse)
+
+-- | The name of the dataset that you updated.
+updateDatasetResponse_name :: Lens.Lens' UpdateDatasetResponse Prelude.Text
+updateDatasetResponse_name = Lens.lens (\UpdateDatasetResponse' {name} -> name) (\s@UpdateDatasetResponse' {} a -> s {name = a} :: UpdateDatasetResponse)
+
+instance Prelude.NFData UpdateDatasetResponse where
+  rnf UpdateDatasetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/UpdateProfileJob.hs b/gen/Amazonka/DataBrew/UpdateProfileJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateProfileJob.hs
@@ -0,0 +1,367 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateProfileJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the definition of an existing profile job.
+module Amazonka.DataBrew.UpdateProfileJob
+  ( -- * Creating a Request
+    UpdateProfileJob (..),
+    newUpdateProfileJob,
+
+    -- * Request Lenses
+    updateProfileJob_configuration,
+    updateProfileJob_encryptionKeyArn,
+    updateProfileJob_encryptionMode,
+    updateProfileJob_jobSample,
+    updateProfileJob_logSubscription,
+    updateProfileJob_maxCapacity,
+    updateProfileJob_maxRetries,
+    updateProfileJob_timeout,
+    updateProfileJob_validationConfigurations,
+    updateProfileJob_name,
+    updateProfileJob_outputLocation,
+    updateProfileJob_roleArn,
+
+    -- * Destructuring the Response
+    UpdateProfileJobResponse (..),
+    newUpdateProfileJobResponse,
+
+    -- * Response Lenses
+    updateProfileJobResponse_httpStatus,
+    updateProfileJobResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateProfileJob' smart constructor.
+data UpdateProfileJob = UpdateProfileJob'
+  { -- | Configuration for profile jobs. Used to select columns, do evaluations,
+    -- and override default parameters of evaluations. When configuration is
+    -- null, the profile job will run with default settings.
+    configuration :: Prelude.Maybe ProfileConfiguration,
+    -- | The Amazon Resource Name (ARN) of an encryption key that is used to
+    -- protect the job.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The encryption mode for the job, which can be one of the following:
+    --
+    -- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+    --
+    -- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+    encryptionMode :: Prelude.Maybe EncryptionMode,
+    -- | Sample configuration for Profile Jobs only. Determines the number of
+    -- rows on which the Profile job will be executed. If a JobSample value is
+    -- not provided for profile jobs, the default value will be used. The
+    -- default value is CUSTOM_ROWS for the mode parameter and 20000 for the
+    -- size parameter.
+    jobSample :: Prelude.Maybe JobSample,
+    -- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+    -- enabled, CloudWatch writes one log stream for each job run.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | The maximum number of compute nodes that DataBrew can use when the job
+    -- processes data.
+    maxCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of times to retry the job after a job run fails.
+    maxRetries :: Prelude.Maybe Prelude.Natural,
+    -- | The job\'s timeout in minutes. A job that attempts to run longer than
+    -- this timeout period ends with a status of @TIMEOUT@.
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | List of validation configurations that are applied to the profile job.
+    validationConfigurations :: Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration),
+    -- | The name of the job to be updated.
+    name :: Prelude.Text,
+    outputLocation :: S3Location,
+    -- | The Amazon Resource Name (ARN) of the Identity and Access Management
+    -- (IAM) role to be assumed when DataBrew runs the job.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProfileJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'updateProfileJob_configuration' - Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+--
+-- 'encryptionKeyArn', 'updateProfileJob_encryptionKeyArn' - The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+--
+-- 'encryptionMode', 'updateProfileJob_encryptionMode' - The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+--
+-- 'jobSample', 'updateProfileJob_jobSample' - Sample configuration for Profile Jobs only. Determines the number of
+-- rows on which the Profile job will be executed. If a JobSample value is
+-- not provided for profile jobs, the default value will be used. The
+-- default value is CUSTOM_ROWS for the mode parameter and 20000 for the
+-- size parameter.
+--
+-- 'logSubscription', 'updateProfileJob_logSubscription' - Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+--
+-- 'maxCapacity', 'updateProfileJob_maxCapacity' - The maximum number of compute nodes that DataBrew can use when the job
+-- processes data.
+--
+-- 'maxRetries', 'updateProfileJob_maxRetries' - The maximum number of times to retry the job after a job run fails.
+--
+-- 'timeout', 'updateProfileJob_timeout' - The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+--
+-- 'validationConfigurations', 'updateProfileJob_validationConfigurations' - List of validation configurations that are applied to the profile job.
+--
+-- 'name', 'updateProfileJob_name' - The name of the job to be updated.
+--
+-- 'outputLocation', 'updateProfileJob_outputLocation' - Undocumented member.
+--
+-- 'roleArn', 'updateProfileJob_roleArn' - The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+newUpdateProfileJob ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'outputLocation'
+  S3Location ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  UpdateProfileJob
+newUpdateProfileJob pName_ pOutputLocation_ pRoleArn_ =
+  UpdateProfileJob'
+    { configuration = Prelude.Nothing,
+      encryptionKeyArn = Prelude.Nothing,
+      encryptionMode = Prelude.Nothing,
+      jobSample = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      maxCapacity = Prelude.Nothing,
+      maxRetries = Prelude.Nothing,
+      timeout = Prelude.Nothing,
+      validationConfigurations = Prelude.Nothing,
+      name = pName_,
+      outputLocation = pOutputLocation_,
+      roleArn = pRoleArn_
+    }
+
+-- | Configuration for profile jobs. Used to select columns, do evaluations,
+-- and override default parameters of evaluations. When configuration is
+-- null, the profile job will run with default settings.
+updateProfileJob_configuration :: Lens.Lens' UpdateProfileJob (Prelude.Maybe ProfileConfiguration)
+updateProfileJob_configuration = Lens.lens (\UpdateProfileJob' {configuration} -> configuration) (\s@UpdateProfileJob' {} a -> s {configuration = a} :: UpdateProfileJob)
+
+-- | The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+updateProfileJob_encryptionKeyArn :: Lens.Lens' UpdateProfileJob (Prelude.Maybe Prelude.Text)
+updateProfileJob_encryptionKeyArn = Lens.lens (\UpdateProfileJob' {encryptionKeyArn} -> encryptionKeyArn) (\s@UpdateProfileJob' {} a -> s {encryptionKeyArn = a} :: UpdateProfileJob)
+
+-- | The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+updateProfileJob_encryptionMode :: Lens.Lens' UpdateProfileJob (Prelude.Maybe EncryptionMode)
+updateProfileJob_encryptionMode = Lens.lens (\UpdateProfileJob' {encryptionMode} -> encryptionMode) (\s@UpdateProfileJob' {} a -> s {encryptionMode = a} :: UpdateProfileJob)
+
+-- | Sample configuration for Profile Jobs only. Determines the number of
+-- rows on which the Profile job will be executed. If a JobSample value is
+-- not provided for profile jobs, the default value will be used. The
+-- default value is CUSTOM_ROWS for the mode parameter and 20000 for the
+-- size parameter.
+updateProfileJob_jobSample :: Lens.Lens' UpdateProfileJob (Prelude.Maybe JobSample)
+updateProfileJob_jobSample = Lens.lens (\UpdateProfileJob' {jobSample} -> jobSample) (\s@UpdateProfileJob' {} a -> s {jobSample = a} :: UpdateProfileJob)
+
+-- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+updateProfileJob_logSubscription :: Lens.Lens' UpdateProfileJob (Prelude.Maybe LogSubscription)
+updateProfileJob_logSubscription = Lens.lens (\UpdateProfileJob' {logSubscription} -> logSubscription) (\s@UpdateProfileJob' {} a -> s {logSubscription = a} :: UpdateProfileJob)
+
+-- | The maximum number of compute nodes that DataBrew can use when the job
+-- processes data.
+updateProfileJob_maxCapacity :: Lens.Lens' UpdateProfileJob (Prelude.Maybe Prelude.Int)
+updateProfileJob_maxCapacity = Lens.lens (\UpdateProfileJob' {maxCapacity} -> maxCapacity) (\s@UpdateProfileJob' {} a -> s {maxCapacity = a} :: UpdateProfileJob)
+
+-- | The maximum number of times to retry the job after a job run fails.
+updateProfileJob_maxRetries :: Lens.Lens' UpdateProfileJob (Prelude.Maybe Prelude.Natural)
+updateProfileJob_maxRetries = Lens.lens (\UpdateProfileJob' {maxRetries} -> maxRetries) (\s@UpdateProfileJob' {} a -> s {maxRetries = a} :: UpdateProfileJob)
+
+-- | The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+updateProfileJob_timeout :: Lens.Lens' UpdateProfileJob (Prelude.Maybe Prelude.Natural)
+updateProfileJob_timeout = Lens.lens (\UpdateProfileJob' {timeout} -> timeout) (\s@UpdateProfileJob' {} a -> s {timeout = a} :: UpdateProfileJob)
+
+-- | List of validation configurations that are applied to the profile job.
+updateProfileJob_validationConfigurations :: Lens.Lens' UpdateProfileJob (Prelude.Maybe (Prelude.NonEmpty ValidationConfiguration))
+updateProfileJob_validationConfigurations = Lens.lens (\UpdateProfileJob' {validationConfigurations} -> validationConfigurations) (\s@UpdateProfileJob' {} a -> s {validationConfigurations = a} :: UpdateProfileJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the job to be updated.
+updateProfileJob_name :: Lens.Lens' UpdateProfileJob Prelude.Text
+updateProfileJob_name = Lens.lens (\UpdateProfileJob' {name} -> name) (\s@UpdateProfileJob' {} a -> s {name = a} :: UpdateProfileJob)
+
+-- | Undocumented member.
+updateProfileJob_outputLocation :: Lens.Lens' UpdateProfileJob S3Location
+updateProfileJob_outputLocation = Lens.lens (\UpdateProfileJob' {outputLocation} -> outputLocation) (\s@UpdateProfileJob' {} a -> s {outputLocation = a} :: UpdateProfileJob)
+
+-- | The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+updateProfileJob_roleArn :: Lens.Lens' UpdateProfileJob Prelude.Text
+updateProfileJob_roleArn = Lens.lens (\UpdateProfileJob' {roleArn} -> roleArn) (\s@UpdateProfileJob' {} a -> s {roleArn = a} :: UpdateProfileJob)
+
+instance Core.AWSRequest UpdateProfileJob where
+  type
+    AWSResponse UpdateProfileJob =
+      UpdateProfileJobResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateProfileJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateProfileJob where
+  hashWithSalt _salt UpdateProfileJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` encryptionKeyArn
+      `Prelude.hashWithSalt` encryptionMode
+      `Prelude.hashWithSalt` jobSample
+      `Prelude.hashWithSalt` logSubscription
+      `Prelude.hashWithSalt` maxCapacity
+      `Prelude.hashWithSalt` maxRetries
+      `Prelude.hashWithSalt` timeout
+      `Prelude.hashWithSalt` validationConfigurations
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData UpdateProfileJob where
+  rnf UpdateProfileJob' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf encryptionMode
+      `Prelude.seq` Prelude.rnf jobSample
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf maxCapacity
+      `Prelude.seq` Prelude.rnf maxRetries
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf validationConfigurations
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders UpdateProfileJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateProfileJob where
+  toJSON UpdateProfileJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Configuration" Data..=) Prelude.<$> configuration,
+            ("EncryptionKeyArn" Data..=)
+              Prelude.<$> encryptionKeyArn,
+            ("EncryptionMode" Data..=)
+              Prelude.<$> encryptionMode,
+            ("JobSample" Data..=) Prelude.<$> jobSample,
+            ("LogSubscription" Data..=)
+              Prelude.<$> logSubscription,
+            ("MaxCapacity" Data..=) Prelude.<$> maxCapacity,
+            ("MaxRetries" Data..=) Prelude.<$> maxRetries,
+            ("Timeout" Data..=) Prelude.<$> timeout,
+            ("ValidationConfigurations" Data..=)
+              Prelude.<$> validationConfigurations,
+            Prelude.Just
+              ("OutputLocation" Data..= outputLocation),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath UpdateProfileJob where
+  toPath UpdateProfileJob' {..} =
+    Prelude.mconcat ["/profileJobs/", Data.toBS name]
+
+instance Data.ToQuery UpdateProfileJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateProfileJobResponse' smart constructor.
+data UpdateProfileJobResponse = UpdateProfileJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job that was updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProfileJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateProfileJobResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateProfileJobResponse_name' - The name of the job that was updated.
+newUpdateProfileJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateProfileJobResponse
+newUpdateProfileJobResponse pHttpStatus_ pName_ =
+  UpdateProfileJobResponse'
+    { httpStatus =
+        pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+updateProfileJobResponse_httpStatus :: Lens.Lens' UpdateProfileJobResponse Prelude.Int
+updateProfileJobResponse_httpStatus = Lens.lens (\UpdateProfileJobResponse' {httpStatus} -> httpStatus) (\s@UpdateProfileJobResponse' {} a -> s {httpStatus = a} :: UpdateProfileJobResponse)
+
+-- | The name of the job that was updated.
+updateProfileJobResponse_name :: Lens.Lens' UpdateProfileJobResponse Prelude.Text
+updateProfileJobResponse_name = Lens.lens (\UpdateProfileJobResponse' {name} -> name) (\s@UpdateProfileJobResponse' {} a -> s {name = a} :: UpdateProfileJobResponse)
+
+instance Prelude.NFData UpdateProfileJobResponse where
+  rnf UpdateProfileJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/UpdateProject.hs b/gen/Amazonka/DataBrew/UpdateProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateProject.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the definition of an existing DataBrew project.
+module Amazonka.DataBrew.UpdateProject
+  ( -- * Creating a Request
+    UpdateProject (..),
+    newUpdateProject,
+
+    -- * Request Lenses
+    updateProject_sample,
+    updateProject_roleArn,
+    updateProject_name,
+
+    -- * Destructuring the Response
+    UpdateProjectResponse (..),
+    newUpdateProjectResponse,
+
+    -- * Response Lenses
+    updateProjectResponse_lastModifiedDate,
+    updateProjectResponse_httpStatus,
+    updateProjectResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateProject' smart constructor.
+data UpdateProject = UpdateProject'
+  { sample :: Prelude.Maybe Sample,
+    -- | The Amazon Resource Name (ARN) of the IAM role to be assumed for this
+    -- request.
+    roleArn :: Prelude.Text,
+    -- | The name of the project to be updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sample', 'updateProject_sample' - Undocumented member.
+--
+-- 'roleArn', 'updateProject_roleArn' - The Amazon Resource Name (ARN) of the IAM role to be assumed for this
+-- request.
+--
+-- 'name', 'updateProject_name' - The name of the project to be updated.
+newUpdateProject ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateProject
+newUpdateProject pRoleArn_ pName_ =
+  UpdateProject'
+    { sample = Prelude.Nothing,
+      roleArn = pRoleArn_,
+      name = pName_
+    }
+
+-- | Undocumented member.
+updateProject_sample :: Lens.Lens' UpdateProject (Prelude.Maybe Sample)
+updateProject_sample = Lens.lens (\UpdateProject' {sample} -> sample) (\s@UpdateProject' {} a -> s {sample = a} :: UpdateProject)
+
+-- | The Amazon Resource Name (ARN) of the IAM role to be assumed for this
+-- request.
+updateProject_roleArn :: Lens.Lens' UpdateProject Prelude.Text
+updateProject_roleArn = Lens.lens (\UpdateProject' {roleArn} -> roleArn) (\s@UpdateProject' {} a -> s {roleArn = a} :: UpdateProject)
+
+-- | The name of the project to be updated.
+updateProject_name :: Lens.Lens' UpdateProject Prelude.Text
+updateProject_name = Lens.lens (\UpdateProject' {name} -> name) (\s@UpdateProject' {} a -> s {name = a} :: UpdateProject)
+
+instance Core.AWSRequest UpdateProject where
+  type
+    AWSResponse UpdateProject =
+      UpdateProjectResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateProjectResponse'
+            Prelude.<$> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateProject where
+  hashWithSalt _salt UpdateProject' {..} =
+    _salt
+      `Prelude.hashWithSalt` sample
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateProject where
+  rnf UpdateProject' {..} =
+    Prelude.rnf sample
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateProject where
+  toJSON UpdateProject' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Sample" Data..=) Prelude.<$> sample,
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath UpdateProject where
+  toPath UpdateProject' {..} =
+    Prelude.mconcat ["/projects/", Data.toBS name]
+
+instance Data.ToQuery UpdateProject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateProjectResponse' smart constructor.
+data UpdateProjectResponse = UpdateProjectResponse'
+  { -- | The date and time that the project was last modified.
+    lastModifiedDate :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the project that you updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastModifiedDate', 'updateProjectResponse_lastModifiedDate' - The date and time that the project was last modified.
+--
+-- 'httpStatus', 'updateProjectResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateProjectResponse_name' - The name of the project that you updated.
+newUpdateProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateProjectResponse
+newUpdateProjectResponse pHttpStatus_ pName_ =
+  UpdateProjectResponse'
+    { lastModifiedDate =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The date and time that the project was last modified.
+updateProjectResponse_lastModifiedDate :: Lens.Lens' UpdateProjectResponse (Prelude.Maybe Prelude.UTCTime)
+updateProjectResponse_lastModifiedDate = Lens.lens (\UpdateProjectResponse' {lastModifiedDate} -> lastModifiedDate) (\s@UpdateProjectResponse' {} a -> s {lastModifiedDate = a} :: UpdateProjectResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+updateProjectResponse_httpStatus :: Lens.Lens' UpdateProjectResponse Prelude.Int
+updateProjectResponse_httpStatus = Lens.lens (\UpdateProjectResponse' {httpStatus} -> httpStatus) (\s@UpdateProjectResponse' {} a -> s {httpStatus = a} :: UpdateProjectResponse)
+
+-- | The name of the project that you updated.
+updateProjectResponse_name :: Lens.Lens' UpdateProjectResponse Prelude.Text
+updateProjectResponse_name = Lens.lens (\UpdateProjectResponse' {name} -> name) (\s@UpdateProjectResponse' {} a -> s {name = a} :: UpdateProjectResponse)
+
+instance Prelude.NFData UpdateProjectResponse where
+  rnf UpdateProjectResponse' {..} =
+    Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/UpdateRecipe.hs b/gen/Amazonka/DataBrew/UpdateRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateRecipe.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the definition of the @LATEST_WORKING@ version of a DataBrew
+-- recipe.
+module Amazonka.DataBrew.UpdateRecipe
+  ( -- * Creating a Request
+    UpdateRecipe (..),
+    newUpdateRecipe,
+
+    -- * Request Lenses
+    updateRecipe_description,
+    updateRecipe_steps,
+    updateRecipe_name,
+
+    -- * Destructuring the Response
+    UpdateRecipeResponse (..),
+    newUpdateRecipeResponse,
+
+    -- * Response Lenses
+    updateRecipeResponse_httpStatus,
+    updateRecipeResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRecipe' smart constructor.
+data UpdateRecipe = UpdateRecipe'
+  { -- | A description of the recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | One or more steps to be performed by the recipe. Each step consists of
+    -- an action, and the conditions under which the action should succeed.
+    steps :: Prelude.Maybe [RecipeStep],
+    -- | The name of the recipe to be updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateRecipe_description' - A description of the recipe.
+--
+-- 'steps', 'updateRecipe_steps' - One or more steps to be performed by the recipe. Each step consists of
+-- an action, and the conditions under which the action should succeed.
+--
+-- 'name', 'updateRecipe_name' - The name of the recipe to be updated.
+newUpdateRecipe ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateRecipe
+newUpdateRecipe pName_ =
+  UpdateRecipe'
+    { description = Prelude.Nothing,
+      steps = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A description of the recipe.
+updateRecipe_description :: Lens.Lens' UpdateRecipe (Prelude.Maybe Prelude.Text)
+updateRecipe_description = Lens.lens (\UpdateRecipe' {description} -> description) (\s@UpdateRecipe' {} a -> s {description = a} :: UpdateRecipe)
+
+-- | One or more steps to be performed by the recipe. Each step consists of
+-- an action, and the conditions under which the action should succeed.
+updateRecipe_steps :: Lens.Lens' UpdateRecipe (Prelude.Maybe [RecipeStep])
+updateRecipe_steps = Lens.lens (\UpdateRecipe' {steps} -> steps) (\s@UpdateRecipe' {} a -> s {steps = a} :: UpdateRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the recipe to be updated.
+updateRecipe_name :: Lens.Lens' UpdateRecipe Prelude.Text
+updateRecipe_name = Lens.lens (\UpdateRecipe' {name} -> name) (\s@UpdateRecipe' {} a -> s {name = a} :: UpdateRecipe)
+
+instance Core.AWSRequest UpdateRecipe where
+  type AWSResponse UpdateRecipe = UpdateRecipeResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRecipeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateRecipe where
+  hashWithSalt _salt UpdateRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` steps
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateRecipe where
+  rnf UpdateRecipe' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf steps
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRecipe where
+  toJSON UpdateRecipe' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Steps" Data..=) Prelude.<$> steps
+          ]
+      )
+
+instance Data.ToPath UpdateRecipe where
+  toPath UpdateRecipe' {..} =
+    Prelude.mconcat ["/recipes/", Data.toBS name]
+
+instance Data.ToQuery UpdateRecipe where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRecipeResponse' smart constructor.
+data UpdateRecipeResponse = UpdateRecipeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the recipe that was updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateRecipeResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateRecipeResponse_name' - The name of the recipe that was updated.
+newUpdateRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateRecipeResponse
+newUpdateRecipeResponse pHttpStatus_ pName_ =
+  UpdateRecipeResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+updateRecipeResponse_httpStatus :: Lens.Lens' UpdateRecipeResponse Prelude.Int
+updateRecipeResponse_httpStatus = Lens.lens (\UpdateRecipeResponse' {httpStatus} -> httpStatus) (\s@UpdateRecipeResponse' {} a -> s {httpStatus = a} :: UpdateRecipeResponse)
+
+-- | The name of the recipe that was updated.
+updateRecipeResponse_name :: Lens.Lens' UpdateRecipeResponse Prelude.Text
+updateRecipeResponse_name = Lens.lens (\UpdateRecipeResponse' {name} -> name) (\s@UpdateRecipeResponse' {} a -> s {name = a} :: UpdateRecipeResponse)
+
+instance Prelude.NFData UpdateRecipeResponse where
+  rnf UpdateRecipeResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/UpdateRecipeJob.hs b/gen/Amazonka/DataBrew/UpdateRecipeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateRecipeJob.hs
@@ -0,0 +1,341 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateRecipeJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the definition of an existing DataBrew recipe job.
+module Amazonka.DataBrew.UpdateRecipeJob
+  ( -- * Creating a Request
+    UpdateRecipeJob (..),
+    newUpdateRecipeJob,
+
+    -- * Request Lenses
+    updateRecipeJob_dataCatalogOutputs,
+    updateRecipeJob_databaseOutputs,
+    updateRecipeJob_encryptionKeyArn,
+    updateRecipeJob_encryptionMode,
+    updateRecipeJob_logSubscription,
+    updateRecipeJob_maxCapacity,
+    updateRecipeJob_maxRetries,
+    updateRecipeJob_outputs,
+    updateRecipeJob_timeout,
+    updateRecipeJob_name,
+    updateRecipeJob_roleArn,
+
+    -- * Destructuring the Response
+    UpdateRecipeJobResponse (..),
+    newUpdateRecipeJobResponse,
+
+    -- * Response Lenses
+    updateRecipeJobResponse_httpStatus,
+    updateRecipeJobResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRecipeJob' smart constructor.
+data UpdateRecipeJob = UpdateRecipeJob'
+  { -- | One or more artifacts that represent the Glue Data Catalog output from
+    -- running the job.
+    dataCatalogOutputs :: Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput),
+    -- | Represents a list of JDBC database output objects which defines the
+    -- output destination for a DataBrew recipe job to write into.
+    databaseOutputs :: Prelude.Maybe (Prelude.NonEmpty DatabaseOutput),
+    -- | The Amazon Resource Name (ARN) of an encryption key that is used to
+    -- protect the job.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The encryption mode for the job, which can be one of the following:
+    --
+    -- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+    --
+    -- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+    encryptionMode :: Prelude.Maybe EncryptionMode,
+    -- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+    -- enabled, CloudWatch writes one log stream for each job run.
+    logSubscription :: Prelude.Maybe LogSubscription,
+    -- | The maximum number of nodes that DataBrew can consume when the job
+    -- processes data.
+    maxCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of times to retry the job after a job run fails.
+    maxRetries :: Prelude.Maybe Prelude.Natural,
+    -- | One or more artifacts that represent the output from running the job.
+    outputs :: Prelude.Maybe (Prelude.NonEmpty Output),
+    -- | The job\'s timeout in minutes. A job that attempts to run longer than
+    -- this timeout period ends with a status of @TIMEOUT@.
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the job to update.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Identity and Access Management
+    -- (IAM) role to be assumed when DataBrew runs the job.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRecipeJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataCatalogOutputs', 'updateRecipeJob_dataCatalogOutputs' - One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+--
+-- 'databaseOutputs', 'updateRecipeJob_databaseOutputs' - Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+--
+-- 'encryptionKeyArn', 'updateRecipeJob_encryptionKeyArn' - The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+--
+-- 'encryptionMode', 'updateRecipeJob_encryptionMode' - The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+--
+-- 'logSubscription', 'updateRecipeJob_logSubscription' - Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+--
+-- 'maxCapacity', 'updateRecipeJob_maxCapacity' - The maximum number of nodes that DataBrew can consume when the job
+-- processes data.
+--
+-- 'maxRetries', 'updateRecipeJob_maxRetries' - The maximum number of times to retry the job after a job run fails.
+--
+-- 'outputs', 'updateRecipeJob_outputs' - One or more artifacts that represent the output from running the job.
+--
+-- 'timeout', 'updateRecipeJob_timeout' - The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+--
+-- 'name', 'updateRecipeJob_name' - The name of the job to update.
+--
+-- 'roleArn', 'updateRecipeJob_roleArn' - The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+newUpdateRecipeJob ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  UpdateRecipeJob
+newUpdateRecipeJob pName_ pRoleArn_ =
+  UpdateRecipeJob'
+    { dataCatalogOutputs =
+        Prelude.Nothing,
+      databaseOutputs = Prelude.Nothing,
+      encryptionKeyArn = Prelude.Nothing,
+      encryptionMode = Prelude.Nothing,
+      logSubscription = Prelude.Nothing,
+      maxCapacity = Prelude.Nothing,
+      maxRetries = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      timeout = Prelude.Nothing,
+      name = pName_,
+      roleArn = pRoleArn_
+    }
+
+-- | One or more artifacts that represent the Glue Data Catalog output from
+-- running the job.
+updateRecipeJob_dataCatalogOutputs :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe (Prelude.NonEmpty DataCatalogOutput))
+updateRecipeJob_dataCatalogOutputs = Lens.lens (\UpdateRecipeJob' {dataCatalogOutputs} -> dataCatalogOutputs) (\s@UpdateRecipeJob' {} a -> s {dataCatalogOutputs = a} :: UpdateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a list of JDBC database output objects which defines the
+-- output destination for a DataBrew recipe job to write into.
+updateRecipeJob_databaseOutputs :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe (Prelude.NonEmpty DatabaseOutput))
+updateRecipeJob_databaseOutputs = Lens.lens (\UpdateRecipeJob' {databaseOutputs} -> databaseOutputs) (\s@UpdateRecipeJob' {} a -> s {databaseOutputs = a} :: UpdateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of an encryption key that is used to
+-- protect the job.
+updateRecipeJob_encryptionKeyArn :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe Prelude.Text)
+updateRecipeJob_encryptionKeyArn = Lens.lens (\UpdateRecipeJob' {encryptionKeyArn} -> encryptionKeyArn) (\s@UpdateRecipeJob' {} a -> s {encryptionKeyArn = a} :: UpdateRecipeJob)
+
+-- | The encryption mode for the job, which can be one of the following:
+--
+-- -   @SSE-KMS@ - Server-side encryption with keys managed by KMS.
+--
+-- -   @SSE-S3@ - Server-side encryption with keys managed by Amazon S3.
+updateRecipeJob_encryptionMode :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe EncryptionMode)
+updateRecipeJob_encryptionMode = Lens.lens (\UpdateRecipeJob' {encryptionMode} -> encryptionMode) (\s@UpdateRecipeJob' {} a -> s {encryptionMode = a} :: UpdateRecipeJob)
+
+-- | Enables or disables Amazon CloudWatch logging for the job. If logging is
+-- enabled, CloudWatch writes one log stream for each job run.
+updateRecipeJob_logSubscription :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe LogSubscription)
+updateRecipeJob_logSubscription = Lens.lens (\UpdateRecipeJob' {logSubscription} -> logSubscription) (\s@UpdateRecipeJob' {} a -> s {logSubscription = a} :: UpdateRecipeJob)
+
+-- | The maximum number of nodes that DataBrew can consume when the job
+-- processes data.
+updateRecipeJob_maxCapacity :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe Prelude.Int)
+updateRecipeJob_maxCapacity = Lens.lens (\UpdateRecipeJob' {maxCapacity} -> maxCapacity) (\s@UpdateRecipeJob' {} a -> s {maxCapacity = a} :: UpdateRecipeJob)
+
+-- | The maximum number of times to retry the job after a job run fails.
+updateRecipeJob_maxRetries :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe Prelude.Natural)
+updateRecipeJob_maxRetries = Lens.lens (\UpdateRecipeJob' {maxRetries} -> maxRetries) (\s@UpdateRecipeJob' {} a -> s {maxRetries = a} :: UpdateRecipeJob)
+
+-- | One or more artifacts that represent the output from running the job.
+updateRecipeJob_outputs :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe (Prelude.NonEmpty Output))
+updateRecipeJob_outputs = Lens.lens (\UpdateRecipeJob' {outputs} -> outputs) (\s@UpdateRecipeJob' {} a -> s {outputs = a} :: UpdateRecipeJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The job\'s timeout in minutes. A job that attempts to run longer than
+-- this timeout period ends with a status of @TIMEOUT@.
+updateRecipeJob_timeout :: Lens.Lens' UpdateRecipeJob (Prelude.Maybe Prelude.Natural)
+updateRecipeJob_timeout = Lens.lens (\UpdateRecipeJob' {timeout} -> timeout) (\s@UpdateRecipeJob' {} a -> s {timeout = a} :: UpdateRecipeJob)
+
+-- | The name of the job to update.
+updateRecipeJob_name :: Lens.Lens' UpdateRecipeJob Prelude.Text
+updateRecipeJob_name = Lens.lens (\UpdateRecipeJob' {name} -> name) (\s@UpdateRecipeJob' {} a -> s {name = a} :: UpdateRecipeJob)
+
+-- | The Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role to be assumed when DataBrew runs the job.
+updateRecipeJob_roleArn :: Lens.Lens' UpdateRecipeJob Prelude.Text
+updateRecipeJob_roleArn = Lens.lens (\UpdateRecipeJob' {roleArn} -> roleArn) (\s@UpdateRecipeJob' {} a -> s {roleArn = a} :: UpdateRecipeJob)
+
+instance Core.AWSRequest UpdateRecipeJob where
+  type
+    AWSResponse UpdateRecipeJob =
+      UpdateRecipeJobResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRecipeJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateRecipeJob where
+  hashWithSalt _salt UpdateRecipeJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataCatalogOutputs
+      `Prelude.hashWithSalt` databaseOutputs
+      `Prelude.hashWithSalt` encryptionKeyArn
+      `Prelude.hashWithSalt` encryptionMode
+      `Prelude.hashWithSalt` logSubscription
+      `Prelude.hashWithSalt` maxCapacity
+      `Prelude.hashWithSalt` maxRetries
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` timeout
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData UpdateRecipeJob where
+  rnf UpdateRecipeJob' {..} =
+    Prelude.rnf dataCatalogOutputs
+      `Prelude.seq` Prelude.rnf databaseOutputs
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf encryptionMode
+      `Prelude.seq` Prelude.rnf logSubscription
+      `Prelude.seq` Prelude.rnf maxCapacity
+      `Prelude.seq` Prelude.rnf maxRetries
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders UpdateRecipeJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRecipeJob where
+  toJSON UpdateRecipeJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataCatalogOutputs" Data..=)
+              Prelude.<$> dataCatalogOutputs,
+            ("DatabaseOutputs" Data..=)
+              Prelude.<$> databaseOutputs,
+            ("EncryptionKeyArn" Data..=)
+              Prelude.<$> encryptionKeyArn,
+            ("EncryptionMode" Data..=)
+              Prelude.<$> encryptionMode,
+            ("LogSubscription" Data..=)
+              Prelude.<$> logSubscription,
+            ("MaxCapacity" Data..=) Prelude.<$> maxCapacity,
+            ("MaxRetries" Data..=) Prelude.<$> maxRetries,
+            ("Outputs" Data..=) Prelude.<$> outputs,
+            ("Timeout" Data..=) Prelude.<$> timeout,
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath UpdateRecipeJob where
+  toPath UpdateRecipeJob' {..} =
+    Prelude.mconcat ["/recipeJobs/", Data.toBS name]
+
+instance Data.ToQuery UpdateRecipeJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRecipeJobResponse' smart constructor.
+data UpdateRecipeJobResponse = UpdateRecipeJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the job that you updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRecipeJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateRecipeJobResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateRecipeJobResponse_name' - The name of the job that you updated.
+newUpdateRecipeJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateRecipeJobResponse
+newUpdateRecipeJobResponse pHttpStatus_ pName_ =
+  UpdateRecipeJobResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+updateRecipeJobResponse_httpStatus :: Lens.Lens' UpdateRecipeJobResponse Prelude.Int
+updateRecipeJobResponse_httpStatus = Lens.lens (\UpdateRecipeJobResponse' {httpStatus} -> httpStatus) (\s@UpdateRecipeJobResponse' {} a -> s {httpStatus = a} :: UpdateRecipeJobResponse)
+
+-- | The name of the job that you updated.
+updateRecipeJobResponse_name :: Lens.Lens' UpdateRecipeJobResponse Prelude.Text
+updateRecipeJobResponse_name = Lens.lens (\UpdateRecipeJobResponse' {name} -> name) (\s@UpdateRecipeJobResponse' {} a -> s {name = a} :: UpdateRecipeJobResponse)
+
+instance Prelude.NFData UpdateRecipeJobResponse where
+  rnf UpdateRecipeJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/UpdateRuleset.hs b/gen/Amazonka/DataBrew/UpdateRuleset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateRuleset.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateRuleset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates specified ruleset.
+module Amazonka.DataBrew.UpdateRuleset
+  ( -- * Creating a Request
+    UpdateRuleset (..),
+    newUpdateRuleset,
+
+    -- * Request Lenses
+    updateRuleset_description,
+    updateRuleset_name,
+    updateRuleset_rules,
+
+    -- * Destructuring the Response
+    UpdateRulesetResponse (..),
+    newUpdateRulesetResponse,
+
+    -- * Response Lenses
+    updateRulesetResponse_httpStatus,
+    updateRulesetResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRuleset' smart constructor.
+data UpdateRuleset = UpdateRuleset'
+  { -- | The description of the ruleset.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the ruleset to be updated.
+    name :: Prelude.Text,
+    -- | A list of rules that are defined with the ruleset. A rule includes one
+    -- or more checks to be validated on a DataBrew dataset.
+    rules :: Prelude.NonEmpty Rule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRuleset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateRuleset_description' - The description of the ruleset.
+--
+-- 'name', 'updateRuleset_name' - The name of the ruleset to be updated.
+--
+-- 'rules', 'updateRuleset_rules' - A list of rules that are defined with the ruleset. A rule includes one
+-- or more checks to be validated on a DataBrew dataset.
+newUpdateRuleset ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'rules'
+  Prelude.NonEmpty Rule ->
+  UpdateRuleset
+newUpdateRuleset pName_ pRules_ =
+  UpdateRuleset'
+    { description = Prelude.Nothing,
+      name = pName_,
+      rules = Lens.coerced Lens.# pRules_
+    }
+
+-- | The description of the ruleset.
+updateRuleset_description :: Lens.Lens' UpdateRuleset (Prelude.Maybe Prelude.Text)
+updateRuleset_description = Lens.lens (\UpdateRuleset' {description} -> description) (\s@UpdateRuleset' {} a -> s {description = a} :: UpdateRuleset)
+
+-- | The name of the ruleset to be updated.
+updateRuleset_name :: Lens.Lens' UpdateRuleset Prelude.Text
+updateRuleset_name = Lens.lens (\UpdateRuleset' {name} -> name) (\s@UpdateRuleset' {} a -> s {name = a} :: UpdateRuleset)
+
+-- | A list of rules that are defined with the ruleset. A rule includes one
+-- or more checks to be validated on a DataBrew dataset.
+updateRuleset_rules :: Lens.Lens' UpdateRuleset (Prelude.NonEmpty Rule)
+updateRuleset_rules = Lens.lens (\UpdateRuleset' {rules} -> rules) (\s@UpdateRuleset' {} a -> s {rules = a} :: UpdateRuleset) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateRuleset where
+  type
+    AWSResponse UpdateRuleset =
+      UpdateRulesetResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRulesetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateRuleset where
+  hashWithSalt _salt UpdateRuleset' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` rules
+
+instance Prelude.NFData UpdateRuleset where
+  rnf UpdateRuleset' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf rules
+
+instance Data.ToHeaders UpdateRuleset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRuleset where
+  toJSON UpdateRuleset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            Prelude.Just ("Rules" Data..= rules)
+          ]
+      )
+
+instance Data.ToPath UpdateRuleset where
+  toPath UpdateRuleset' {..} =
+    Prelude.mconcat ["/rulesets/", Data.toBS name]
+
+instance Data.ToQuery UpdateRuleset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRulesetResponse' smart constructor.
+data UpdateRulesetResponse = UpdateRulesetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the updated ruleset.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRulesetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateRulesetResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateRulesetResponse_name' - The name of the updated ruleset.
+newUpdateRulesetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateRulesetResponse
+newUpdateRulesetResponse pHttpStatus_ pName_ =
+  UpdateRulesetResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+updateRulesetResponse_httpStatus :: Lens.Lens' UpdateRulesetResponse Prelude.Int
+updateRulesetResponse_httpStatus = Lens.lens (\UpdateRulesetResponse' {httpStatus} -> httpStatus) (\s@UpdateRulesetResponse' {} a -> s {httpStatus = a} :: UpdateRulesetResponse)
+
+-- | The name of the updated ruleset.
+updateRulesetResponse_name :: Lens.Lens' UpdateRulesetResponse Prelude.Text
+updateRulesetResponse_name = Lens.lens (\UpdateRulesetResponse' {name} -> name) (\s@UpdateRulesetResponse' {} a -> s {name = a} :: UpdateRulesetResponse)
+
+instance Prelude.NFData UpdateRulesetResponse where
+  rnf UpdateRulesetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/UpdateSchedule.hs b/gen/Amazonka/DataBrew/UpdateSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/UpdateSchedule.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.UpdateSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the definition of an existing DataBrew schedule.
+module Amazonka.DataBrew.UpdateSchedule
+  ( -- * Creating a Request
+    UpdateSchedule (..),
+    newUpdateSchedule,
+
+    -- * Request Lenses
+    updateSchedule_jobNames,
+    updateSchedule_cronExpression,
+    updateSchedule_name,
+
+    -- * Destructuring the Response
+    UpdateScheduleResponse (..),
+    newUpdateScheduleResponse,
+
+    -- * Response Lenses
+    updateScheduleResponse_httpStatus,
+    updateScheduleResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSchedule' smart constructor.
+data UpdateSchedule = UpdateSchedule'
+  { -- | The name or names of one or more jobs to be run for this schedule.
+    jobNames :: Prelude.Maybe [Prelude.Text],
+    -- | The date or dates and time or times when the jobs are to be run. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+    -- in the /Glue DataBrew Developer Guide/.
+    cronExpression :: Prelude.Text,
+    -- | The name of the schedule to update.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobNames', 'updateSchedule_jobNames' - The name or names of one or more jobs to be run for this schedule.
+--
+-- 'cronExpression', 'updateSchedule_cronExpression' - The date or dates and time or times when the jobs are to be run. For
+-- more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+--
+-- 'name', 'updateSchedule_name' - The name of the schedule to update.
+newUpdateSchedule ::
+  -- | 'cronExpression'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateSchedule
+newUpdateSchedule pCronExpression_ pName_ =
+  UpdateSchedule'
+    { jobNames = Prelude.Nothing,
+      cronExpression = pCronExpression_,
+      name = pName_
+    }
+
+-- | The name or names of one or more jobs to be run for this schedule.
+updateSchedule_jobNames :: Lens.Lens' UpdateSchedule (Prelude.Maybe [Prelude.Text])
+updateSchedule_jobNames = Lens.lens (\UpdateSchedule' {jobNames} -> jobNames) (\s@UpdateSchedule' {} a -> s {jobNames = a} :: UpdateSchedule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date or dates and time or times when the jobs are to be run. For
+-- more information, see
+-- <https://docs.aws.amazon.com/databrew/latest/dg/jobs.cron.html Cron expressions>
+-- in the /Glue DataBrew Developer Guide/.
+updateSchedule_cronExpression :: Lens.Lens' UpdateSchedule Prelude.Text
+updateSchedule_cronExpression = Lens.lens (\UpdateSchedule' {cronExpression} -> cronExpression) (\s@UpdateSchedule' {} a -> s {cronExpression = a} :: UpdateSchedule)
+
+-- | The name of the schedule to update.
+updateSchedule_name :: Lens.Lens' UpdateSchedule Prelude.Text
+updateSchedule_name = Lens.lens (\UpdateSchedule' {name} -> name) (\s@UpdateSchedule' {} a -> s {name = a} :: UpdateSchedule)
+
+instance Core.AWSRequest UpdateSchedule where
+  type
+    AWSResponse UpdateSchedule =
+      UpdateScheduleResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateScheduleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance Prelude.Hashable UpdateSchedule where
+  hashWithSalt _salt UpdateSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobNames
+      `Prelude.hashWithSalt` cronExpression
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateSchedule where
+  rnf UpdateSchedule' {..} =
+    Prelude.rnf jobNames
+      `Prelude.seq` Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSchedule where
+  toJSON UpdateSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("JobNames" Data..=) Prelude.<$> jobNames,
+            Prelude.Just
+              ("CronExpression" Data..= cronExpression)
+          ]
+      )
+
+instance Data.ToPath UpdateSchedule where
+  toPath UpdateSchedule' {..} =
+    Prelude.mconcat ["/schedules/", Data.toBS name]
+
+instance Data.ToQuery UpdateSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateScheduleResponse' smart constructor.
+data UpdateScheduleResponse = UpdateScheduleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the schedule that was updated.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateScheduleResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateScheduleResponse_name' - The name of the schedule that was updated.
+newUpdateScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateScheduleResponse
+newUpdateScheduleResponse pHttpStatus_ pName_ =
+  UpdateScheduleResponse'
+    { httpStatus = pHttpStatus_,
+      name = pName_
+    }
+
+-- | The response's http status code.
+updateScheduleResponse_httpStatus :: Lens.Lens' UpdateScheduleResponse Prelude.Int
+updateScheduleResponse_httpStatus = Lens.lens (\UpdateScheduleResponse' {httpStatus} -> httpStatus) (\s@UpdateScheduleResponse' {} a -> s {httpStatus = a} :: UpdateScheduleResponse)
+
+-- | The name of the schedule that was updated.
+updateScheduleResponse_name :: Lens.Lens' UpdateScheduleResponse Prelude.Text
+updateScheduleResponse_name = Lens.lens (\UpdateScheduleResponse' {name} -> name) (\s@UpdateScheduleResponse' {} a -> s {name = a} :: UpdateScheduleResponse)
+
+instance Prelude.NFData UpdateScheduleResponse where
+  rnf UpdateScheduleResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DataBrew/Waiters.hs b/gen/Amazonka/DataBrew/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataBrew/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataBrew.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataBrew.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataBrew.Lens
+import Amazonka.DataBrew.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.DataBrew
+import Test.Amazonka.DataBrew.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "DataBrew"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/DataBrew.hs b/test/Test/Amazonka/DataBrew.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DataBrew.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.DataBrew
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.DataBrew
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/DataBrew/Internal.hs b/test/Test/Amazonka/DataBrew/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DataBrew/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.DataBrew.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.DataBrew.Internal where
diff --git a/test/Test/Amazonka/Gen/DataBrew.hs b/test/Test/Amazonka/Gen/DataBrew.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/DataBrew.hs
@@ -0,0 +1,918 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.DataBrew
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.DataBrew where
+
+import Amazonka.DataBrew
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.DataBrew.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestBatchDeleteRecipeVersion $
+--             newBatchDeleteRecipeVersion
+--
+--         , requestCreateDataset $
+--             newCreateDataset
+--
+--         , requestCreateProfileJob $
+--             newCreateProfileJob
+--
+--         , requestCreateProject $
+--             newCreateProject
+--
+--         , requestCreateRecipe $
+--             newCreateRecipe
+--
+--         , requestCreateRecipeJob $
+--             newCreateRecipeJob
+--
+--         , requestCreateRuleset $
+--             newCreateRuleset
+--
+--         , requestCreateSchedule $
+--             newCreateSchedule
+--
+--         , requestDeleteDataset $
+--             newDeleteDataset
+--
+--         , requestDeleteJob $
+--             newDeleteJob
+--
+--         , requestDeleteProject $
+--             newDeleteProject
+--
+--         , requestDeleteRecipeVersion $
+--             newDeleteRecipeVersion
+--
+--         , requestDeleteRuleset $
+--             newDeleteRuleset
+--
+--         , requestDeleteSchedule $
+--             newDeleteSchedule
+--
+--         , requestDescribeDataset $
+--             newDescribeDataset
+--
+--         , requestDescribeJob $
+--             newDescribeJob
+--
+--         , requestDescribeJobRun $
+--             newDescribeJobRun
+--
+--         , requestDescribeProject $
+--             newDescribeProject
+--
+--         , requestDescribeRecipe $
+--             newDescribeRecipe
+--
+--         , requestDescribeRuleset $
+--             newDescribeRuleset
+--
+--         , requestDescribeSchedule $
+--             newDescribeSchedule
+--
+--         , requestListDatasets $
+--             newListDatasets
+--
+--         , requestListJobRuns $
+--             newListJobRuns
+--
+--         , requestListJobs $
+--             newListJobs
+--
+--         , requestListProjects $
+--             newListProjects
+--
+--         , requestListRecipeVersions $
+--             newListRecipeVersions
+--
+--         , requestListRecipes $
+--             newListRecipes
+--
+--         , requestListRulesets $
+--             newListRulesets
+--
+--         , requestListSchedules $
+--             newListSchedules
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPublishRecipe $
+--             newPublishRecipe
+--
+--         , requestSendProjectSessionAction $
+--             newSendProjectSessionAction
+--
+--         , requestStartJobRun $
+--             newStartJobRun
+--
+--         , requestStartProjectSession $
+--             newStartProjectSession
+--
+--         , requestStopJobRun $
+--             newStopJobRun
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDataset $
+--             newUpdateDataset
+--
+--         , requestUpdateProfileJob $
+--             newUpdateProfileJob
+--
+--         , requestUpdateProject $
+--             newUpdateProject
+--
+--         , requestUpdateRecipe $
+--             newUpdateRecipe
+--
+--         , requestUpdateRecipeJob $
+--             newUpdateRecipeJob
+--
+--         , requestUpdateRuleset $
+--             newUpdateRuleset
+--
+--         , requestUpdateSchedule $
+--             newUpdateSchedule
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchDeleteRecipeVersion $
+--             newBatchDeleteRecipeVersionResponse
+--
+--         , responseCreateDataset $
+--             newCreateDatasetResponse
+--
+--         , responseCreateProfileJob $
+--             newCreateProfileJobResponse
+--
+--         , responseCreateProject $
+--             newCreateProjectResponse
+--
+--         , responseCreateRecipe $
+--             newCreateRecipeResponse
+--
+--         , responseCreateRecipeJob $
+--             newCreateRecipeJobResponse
+--
+--         , responseCreateRuleset $
+--             newCreateRulesetResponse
+--
+--         , responseCreateSchedule $
+--             newCreateScheduleResponse
+--
+--         , responseDeleteDataset $
+--             newDeleteDatasetResponse
+--
+--         , responseDeleteJob $
+--             newDeleteJobResponse
+--
+--         , responseDeleteProject $
+--             newDeleteProjectResponse
+--
+--         , responseDeleteRecipeVersion $
+--             newDeleteRecipeVersionResponse
+--
+--         , responseDeleteRuleset $
+--             newDeleteRulesetResponse
+--
+--         , responseDeleteSchedule $
+--             newDeleteScheduleResponse
+--
+--         , responseDescribeDataset $
+--             newDescribeDatasetResponse
+--
+--         , responseDescribeJob $
+--             newDescribeJobResponse
+--
+--         , responseDescribeJobRun $
+--             newDescribeJobRunResponse
+--
+--         , responseDescribeProject $
+--             newDescribeProjectResponse
+--
+--         , responseDescribeRecipe $
+--             newDescribeRecipeResponse
+--
+--         , responseDescribeRuleset $
+--             newDescribeRulesetResponse
+--
+--         , responseDescribeSchedule $
+--             newDescribeScheduleResponse
+--
+--         , responseListDatasets $
+--             newListDatasetsResponse
+--
+--         , responseListJobRuns $
+--             newListJobRunsResponse
+--
+--         , responseListJobs $
+--             newListJobsResponse
+--
+--         , responseListProjects $
+--             newListProjectsResponse
+--
+--         , responseListRecipeVersions $
+--             newListRecipeVersionsResponse
+--
+--         , responseListRecipes $
+--             newListRecipesResponse
+--
+--         , responseListRulesets $
+--             newListRulesetsResponse
+--
+--         , responseListSchedules $
+--             newListSchedulesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePublishRecipe $
+--             newPublishRecipeResponse
+--
+--         , responseSendProjectSessionAction $
+--             newSendProjectSessionActionResponse
+--
+--         , responseStartJobRun $
+--             newStartJobRunResponse
+--
+--         , responseStartProjectSession $
+--             newStartProjectSessionResponse
+--
+--         , responseStopJobRun $
+--             newStopJobRunResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDataset $
+--             newUpdateDatasetResponse
+--
+--         , responseUpdateProfileJob $
+--             newUpdateProfileJobResponse
+--
+--         , responseUpdateProject $
+--             newUpdateProjectResponse
+--
+--         , responseUpdateRecipe $
+--             newUpdateRecipeResponse
+--
+--         , responseUpdateRecipeJob $
+--             newUpdateRecipeJobResponse
+--
+--         , responseUpdateRuleset $
+--             newUpdateRulesetResponse
+--
+--         , responseUpdateSchedule $
+--             newUpdateScheduleResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchDeleteRecipeVersion :: BatchDeleteRecipeVersion -> TestTree
+requestBatchDeleteRecipeVersion =
+  req
+    "BatchDeleteRecipeVersion"
+    "fixture/BatchDeleteRecipeVersion.yaml"
+
+requestCreateDataset :: CreateDataset -> TestTree
+requestCreateDataset =
+  req
+    "CreateDataset"
+    "fixture/CreateDataset.yaml"
+
+requestCreateProfileJob :: CreateProfileJob -> TestTree
+requestCreateProfileJob =
+  req
+    "CreateProfileJob"
+    "fixture/CreateProfileJob.yaml"
+
+requestCreateProject :: CreateProject -> TestTree
+requestCreateProject =
+  req
+    "CreateProject"
+    "fixture/CreateProject.yaml"
+
+requestCreateRecipe :: CreateRecipe -> TestTree
+requestCreateRecipe =
+  req
+    "CreateRecipe"
+    "fixture/CreateRecipe.yaml"
+
+requestCreateRecipeJob :: CreateRecipeJob -> TestTree
+requestCreateRecipeJob =
+  req
+    "CreateRecipeJob"
+    "fixture/CreateRecipeJob.yaml"
+
+requestCreateRuleset :: CreateRuleset -> TestTree
+requestCreateRuleset =
+  req
+    "CreateRuleset"
+    "fixture/CreateRuleset.yaml"
+
+requestCreateSchedule :: CreateSchedule -> TestTree
+requestCreateSchedule =
+  req
+    "CreateSchedule"
+    "fixture/CreateSchedule.yaml"
+
+requestDeleteDataset :: DeleteDataset -> TestTree
+requestDeleteDataset =
+  req
+    "DeleteDataset"
+    "fixture/DeleteDataset.yaml"
+
+requestDeleteJob :: DeleteJob -> TestTree
+requestDeleteJob =
+  req
+    "DeleteJob"
+    "fixture/DeleteJob.yaml"
+
+requestDeleteProject :: DeleteProject -> TestTree
+requestDeleteProject =
+  req
+    "DeleteProject"
+    "fixture/DeleteProject.yaml"
+
+requestDeleteRecipeVersion :: DeleteRecipeVersion -> TestTree
+requestDeleteRecipeVersion =
+  req
+    "DeleteRecipeVersion"
+    "fixture/DeleteRecipeVersion.yaml"
+
+requestDeleteRuleset :: DeleteRuleset -> TestTree
+requestDeleteRuleset =
+  req
+    "DeleteRuleset"
+    "fixture/DeleteRuleset.yaml"
+
+requestDeleteSchedule :: DeleteSchedule -> TestTree
+requestDeleteSchedule =
+  req
+    "DeleteSchedule"
+    "fixture/DeleteSchedule.yaml"
+
+requestDescribeDataset :: DescribeDataset -> TestTree
+requestDescribeDataset =
+  req
+    "DescribeDataset"
+    "fixture/DescribeDataset.yaml"
+
+requestDescribeJob :: DescribeJob -> TestTree
+requestDescribeJob =
+  req
+    "DescribeJob"
+    "fixture/DescribeJob.yaml"
+
+requestDescribeJobRun :: DescribeJobRun -> TestTree
+requestDescribeJobRun =
+  req
+    "DescribeJobRun"
+    "fixture/DescribeJobRun.yaml"
+
+requestDescribeProject :: DescribeProject -> TestTree
+requestDescribeProject =
+  req
+    "DescribeProject"
+    "fixture/DescribeProject.yaml"
+
+requestDescribeRecipe :: DescribeRecipe -> TestTree
+requestDescribeRecipe =
+  req
+    "DescribeRecipe"
+    "fixture/DescribeRecipe.yaml"
+
+requestDescribeRuleset :: DescribeRuleset -> TestTree
+requestDescribeRuleset =
+  req
+    "DescribeRuleset"
+    "fixture/DescribeRuleset.yaml"
+
+requestDescribeSchedule :: DescribeSchedule -> TestTree
+requestDescribeSchedule =
+  req
+    "DescribeSchedule"
+    "fixture/DescribeSchedule.yaml"
+
+requestListDatasets :: ListDatasets -> TestTree
+requestListDatasets =
+  req
+    "ListDatasets"
+    "fixture/ListDatasets.yaml"
+
+requestListJobRuns :: ListJobRuns -> TestTree
+requestListJobRuns =
+  req
+    "ListJobRuns"
+    "fixture/ListJobRuns.yaml"
+
+requestListJobs :: ListJobs -> TestTree
+requestListJobs =
+  req
+    "ListJobs"
+    "fixture/ListJobs.yaml"
+
+requestListProjects :: ListProjects -> TestTree
+requestListProjects =
+  req
+    "ListProjects"
+    "fixture/ListProjects.yaml"
+
+requestListRecipeVersions :: ListRecipeVersions -> TestTree
+requestListRecipeVersions =
+  req
+    "ListRecipeVersions"
+    "fixture/ListRecipeVersions.yaml"
+
+requestListRecipes :: ListRecipes -> TestTree
+requestListRecipes =
+  req
+    "ListRecipes"
+    "fixture/ListRecipes.yaml"
+
+requestListRulesets :: ListRulesets -> TestTree
+requestListRulesets =
+  req
+    "ListRulesets"
+    "fixture/ListRulesets.yaml"
+
+requestListSchedules :: ListSchedules -> TestTree
+requestListSchedules =
+  req
+    "ListSchedules"
+    "fixture/ListSchedules.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPublishRecipe :: PublishRecipe -> TestTree
+requestPublishRecipe =
+  req
+    "PublishRecipe"
+    "fixture/PublishRecipe.yaml"
+
+requestSendProjectSessionAction :: SendProjectSessionAction -> TestTree
+requestSendProjectSessionAction =
+  req
+    "SendProjectSessionAction"
+    "fixture/SendProjectSessionAction.yaml"
+
+requestStartJobRun :: StartJobRun -> TestTree
+requestStartJobRun =
+  req
+    "StartJobRun"
+    "fixture/StartJobRun.yaml"
+
+requestStartProjectSession :: StartProjectSession -> TestTree
+requestStartProjectSession =
+  req
+    "StartProjectSession"
+    "fixture/StartProjectSession.yaml"
+
+requestStopJobRun :: StopJobRun -> TestTree
+requestStopJobRun =
+  req
+    "StopJobRun"
+    "fixture/StopJobRun.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDataset :: UpdateDataset -> TestTree
+requestUpdateDataset =
+  req
+    "UpdateDataset"
+    "fixture/UpdateDataset.yaml"
+
+requestUpdateProfileJob :: UpdateProfileJob -> TestTree
+requestUpdateProfileJob =
+  req
+    "UpdateProfileJob"
+    "fixture/UpdateProfileJob.yaml"
+
+requestUpdateProject :: UpdateProject -> TestTree
+requestUpdateProject =
+  req
+    "UpdateProject"
+    "fixture/UpdateProject.yaml"
+
+requestUpdateRecipe :: UpdateRecipe -> TestTree
+requestUpdateRecipe =
+  req
+    "UpdateRecipe"
+    "fixture/UpdateRecipe.yaml"
+
+requestUpdateRecipeJob :: UpdateRecipeJob -> TestTree
+requestUpdateRecipeJob =
+  req
+    "UpdateRecipeJob"
+    "fixture/UpdateRecipeJob.yaml"
+
+requestUpdateRuleset :: UpdateRuleset -> TestTree
+requestUpdateRuleset =
+  req
+    "UpdateRuleset"
+    "fixture/UpdateRuleset.yaml"
+
+requestUpdateSchedule :: UpdateSchedule -> TestTree
+requestUpdateSchedule =
+  req
+    "UpdateSchedule"
+    "fixture/UpdateSchedule.yaml"
+
+-- Responses
+
+responseBatchDeleteRecipeVersion :: BatchDeleteRecipeVersionResponse -> TestTree
+responseBatchDeleteRecipeVersion =
+  res
+    "BatchDeleteRecipeVersionResponse"
+    "fixture/BatchDeleteRecipeVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteRecipeVersion)
+
+responseCreateDataset :: CreateDatasetResponse -> TestTree
+responseCreateDataset =
+  res
+    "CreateDatasetResponse"
+    "fixture/CreateDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDataset)
+
+responseCreateProfileJob :: CreateProfileJobResponse -> TestTree
+responseCreateProfileJob =
+  res
+    "CreateProfileJobResponse"
+    "fixture/CreateProfileJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProfileJob)
+
+responseCreateProject :: CreateProjectResponse -> TestTree
+responseCreateProject =
+  res
+    "CreateProjectResponse"
+    "fixture/CreateProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProject)
+
+responseCreateRecipe :: CreateRecipeResponse -> TestTree
+responseCreateRecipe =
+  res
+    "CreateRecipeResponse"
+    "fixture/CreateRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRecipe)
+
+responseCreateRecipeJob :: CreateRecipeJobResponse -> TestTree
+responseCreateRecipeJob =
+  res
+    "CreateRecipeJobResponse"
+    "fixture/CreateRecipeJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRecipeJob)
+
+responseCreateRuleset :: CreateRulesetResponse -> TestTree
+responseCreateRuleset =
+  res
+    "CreateRulesetResponse"
+    "fixture/CreateRulesetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRuleset)
+
+responseCreateSchedule :: CreateScheduleResponse -> TestTree
+responseCreateSchedule =
+  res
+    "CreateScheduleResponse"
+    "fixture/CreateScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSchedule)
+
+responseDeleteDataset :: DeleteDatasetResponse -> TestTree
+responseDeleteDataset =
+  res
+    "DeleteDatasetResponse"
+    "fixture/DeleteDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDataset)
+
+responseDeleteJob :: DeleteJobResponse -> TestTree
+responseDeleteJob =
+  res
+    "DeleteJobResponse"
+    "fixture/DeleteJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteJob)
+
+responseDeleteProject :: DeleteProjectResponse -> TestTree
+responseDeleteProject =
+  res
+    "DeleteProjectResponse"
+    "fixture/DeleteProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProject)
+
+responseDeleteRecipeVersion :: DeleteRecipeVersionResponse -> TestTree
+responseDeleteRecipeVersion =
+  res
+    "DeleteRecipeVersionResponse"
+    "fixture/DeleteRecipeVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRecipeVersion)
+
+responseDeleteRuleset :: DeleteRulesetResponse -> TestTree
+responseDeleteRuleset =
+  res
+    "DeleteRulesetResponse"
+    "fixture/DeleteRulesetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRuleset)
+
+responseDeleteSchedule :: DeleteScheduleResponse -> TestTree
+responseDeleteSchedule =
+  res
+    "DeleteScheduleResponse"
+    "fixture/DeleteScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSchedule)
+
+responseDescribeDataset :: DescribeDatasetResponse -> TestTree
+responseDescribeDataset =
+  res
+    "DescribeDatasetResponse"
+    "fixture/DescribeDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDataset)
+
+responseDescribeJob :: DescribeJobResponse -> TestTree
+responseDescribeJob =
+  res
+    "DescribeJobResponse"
+    "fixture/DescribeJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeJob)
+
+responseDescribeJobRun :: DescribeJobRunResponse -> TestTree
+responseDescribeJobRun =
+  res
+    "DescribeJobRunResponse"
+    "fixture/DescribeJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeJobRun)
+
+responseDescribeProject :: DescribeProjectResponse -> TestTree
+responseDescribeProject =
+  res
+    "DescribeProjectResponse"
+    "fixture/DescribeProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeProject)
+
+responseDescribeRecipe :: DescribeRecipeResponse -> TestTree
+responseDescribeRecipe =
+  res
+    "DescribeRecipeResponse"
+    "fixture/DescribeRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRecipe)
+
+responseDescribeRuleset :: DescribeRulesetResponse -> TestTree
+responseDescribeRuleset =
+  res
+    "DescribeRulesetResponse"
+    "fixture/DescribeRulesetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRuleset)
+
+responseDescribeSchedule :: DescribeScheduleResponse -> TestTree
+responseDescribeSchedule =
+  res
+    "DescribeScheduleResponse"
+    "fixture/DescribeScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSchedule)
+
+responseListDatasets :: ListDatasetsResponse -> TestTree
+responseListDatasets =
+  res
+    "ListDatasetsResponse"
+    "fixture/ListDatasetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDatasets)
+
+responseListJobRuns :: ListJobRunsResponse -> TestTree
+responseListJobRuns =
+  res
+    "ListJobRunsResponse"
+    "fixture/ListJobRunsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListJobRuns)
+
+responseListJobs :: ListJobsResponse -> TestTree
+responseListJobs =
+  res
+    "ListJobsResponse"
+    "fixture/ListJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListJobs)
+
+responseListProjects :: ListProjectsResponse -> TestTree
+responseListProjects =
+  res
+    "ListProjectsResponse"
+    "fixture/ListProjectsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProjects)
+
+responseListRecipeVersions :: ListRecipeVersionsResponse -> TestTree
+responseListRecipeVersions =
+  res
+    "ListRecipeVersionsResponse"
+    "fixture/ListRecipeVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecipeVersions)
+
+responseListRecipes :: ListRecipesResponse -> TestTree
+responseListRecipes =
+  res
+    "ListRecipesResponse"
+    "fixture/ListRecipesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecipes)
+
+responseListRulesets :: ListRulesetsResponse -> TestTree
+responseListRulesets =
+  res
+    "ListRulesetsResponse"
+    "fixture/ListRulesetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRulesets)
+
+responseListSchedules :: ListSchedulesResponse -> TestTree
+responseListSchedules =
+  res
+    "ListSchedulesResponse"
+    "fixture/ListSchedulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSchedules)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePublishRecipe :: PublishRecipeResponse -> TestTree
+responsePublishRecipe =
+  res
+    "PublishRecipeResponse"
+    "fixture/PublishRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PublishRecipe)
+
+responseSendProjectSessionAction :: SendProjectSessionActionResponse -> TestTree
+responseSendProjectSessionAction =
+  res
+    "SendProjectSessionActionResponse"
+    "fixture/SendProjectSessionActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendProjectSessionAction)
+
+responseStartJobRun :: StartJobRunResponse -> TestTree
+responseStartJobRun =
+  res
+    "StartJobRunResponse"
+    "fixture/StartJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartJobRun)
+
+responseStartProjectSession :: StartProjectSessionResponse -> TestTree
+responseStartProjectSession =
+  res
+    "StartProjectSessionResponse"
+    "fixture/StartProjectSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartProjectSession)
+
+responseStopJobRun :: StopJobRunResponse -> TestTree
+responseStopJobRun =
+  res
+    "StopJobRunResponse"
+    "fixture/StopJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopJobRun)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateDataset :: UpdateDatasetResponse -> TestTree
+responseUpdateDataset =
+  res
+    "UpdateDatasetResponse"
+    "fixture/UpdateDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDataset)
+
+responseUpdateProfileJob :: UpdateProfileJobResponse -> TestTree
+responseUpdateProfileJob =
+  res
+    "UpdateProfileJobResponse"
+    "fixture/UpdateProfileJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateProfileJob)
+
+responseUpdateProject :: UpdateProjectResponse -> TestTree
+responseUpdateProject =
+  res
+    "UpdateProjectResponse"
+    "fixture/UpdateProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateProject)
+
+responseUpdateRecipe :: UpdateRecipeResponse -> TestTree
+responseUpdateRecipe =
+  res
+    "UpdateRecipeResponse"
+    "fixture/UpdateRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRecipe)
+
+responseUpdateRecipeJob :: UpdateRecipeJobResponse -> TestTree
+responseUpdateRecipeJob =
+  res
+    "UpdateRecipeJobResponse"
+    "fixture/UpdateRecipeJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRecipeJob)
+
+responseUpdateRuleset :: UpdateRulesetResponse -> TestTree
+responseUpdateRuleset =
+  res
+    "UpdateRulesetResponse"
+    "fixture/UpdateRulesetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRuleset)
+
+responseUpdateSchedule :: UpdateScheduleResponse -> TestTree
+responseUpdateSchedule =
+  res
+    "UpdateScheduleResponse"
+    "fixture/UpdateScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSchedule)
