{-# 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.SageMaker.Types.DatasetDefinition
-- 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.SageMaker.Types.DatasetDefinition 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
import Amazonka.SageMaker.Types.AthenaDatasetDefinition
import Amazonka.SageMaker.Types.DataDistributionType
import Amazonka.SageMaker.Types.InputMode
import Amazonka.SageMaker.Types.RedshiftDatasetDefinition

-- | Configuration for Dataset Definition inputs. The Dataset Definition
-- input must specify exactly one of either @AthenaDatasetDefinition@ or
-- @RedshiftDatasetDefinition@ types.
--
-- /See:/ 'newDatasetDefinition' smart constructor.
data DatasetDefinition = DatasetDefinition'
  { DatasetDefinition -> Maybe AthenaDatasetDefinition
athenaDatasetDefinition :: Prelude.Maybe AthenaDatasetDefinition,
    -- | Whether the generated dataset is @FullyReplicated@ or @ShardedByS3Key@
    -- (default).
    DatasetDefinition -> Maybe DataDistributionType
dataDistributionType :: Prelude.Maybe DataDistributionType,
    -- | Whether to use @File@ or @Pipe@ input mode. In @File@ (default) mode,
    -- Amazon SageMaker copies the data from the input source onto the local
    -- Amazon Elastic Block Store (Amazon EBS) volumes before starting your
    -- training algorithm. This is the most commonly used input mode. In @Pipe@
    -- mode, Amazon SageMaker streams input data from the source directly to
    -- your algorithm without using the EBS volume.
    DatasetDefinition -> Maybe InputMode
inputMode :: Prelude.Maybe InputMode,
    -- | The local path where you want Amazon SageMaker to download the Dataset
    -- Definition inputs to run a processing job. @LocalPath@ is an absolute
    -- path to the input data. This is a required parameter when @AppManaged@
    -- is @False@ (default).
    DatasetDefinition -> Maybe Text
localPath :: Prelude.Maybe Prelude.Text,
    DatasetDefinition -> Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition :: Prelude.Maybe RedshiftDatasetDefinition
  }
  deriving (DatasetDefinition -> DatasetDefinition -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DatasetDefinition -> DatasetDefinition -> Bool
$c/= :: DatasetDefinition -> DatasetDefinition -> Bool
== :: DatasetDefinition -> DatasetDefinition -> Bool
$c== :: DatasetDefinition -> DatasetDefinition -> Bool
Prelude.Eq, ReadPrec [DatasetDefinition]
ReadPrec DatasetDefinition
Int -> ReadS DatasetDefinition
ReadS [DatasetDefinition]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DatasetDefinition]
$creadListPrec :: ReadPrec [DatasetDefinition]
readPrec :: ReadPrec DatasetDefinition
$creadPrec :: ReadPrec DatasetDefinition
readList :: ReadS [DatasetDefinition]
$creadList :: ReadS [DatasetDefinition]
readsPrec :: Int -> ReadS DatasetDefinition
$creadsPrec :: Int -> ReadS DatasetDefinition
Prelude.Read, Int -> DatasetDefinition -> ShowS
[DatasetDefinition] -> ShowS
DatasetDefinition -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DatasetDefinition] -> ShowS
$cshowList :: [DatasetDefinition] -> ShowS
show :: DatasetDefinition -> String
$cshow :: DatasetDefinition -> String
showsPrec :: Int -> DatasetDefinition -> ShowS
$cshowsPrec :: Int -> DatasetDefinition -> ShowS
Prelude.Show, forall x. Rep DatasetDefinition x -> DatasetDefinition
forall x. DatasetDefinition -> Rep DatasetDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DatasetDefinition x -> DatasetDefinition
$cfrom :: forall x. DatasetDefinition -> Rep DatasetDefinition x
Prelude.Generic)

-- |
-- Create a value of 'DatasetDefinition' 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:
--
-- 'athenaDatasetDefinition', 'datasetDefinition_athenaDatasetDefinition' - Undocumented member.
--
-- 'dataDistributionType', 'datasetDefinition_dataDistributionType' - Whether the generated dataset is @FullyReplicated@ or @ShardedByS3Key@
-- (default).
--
-- 'inputMode', 'datasetDefinition_inputMode' - Whether to use @File@ or @Pipe@ input mode. In @File@ (default) mode,
-- Amazon SageMaker copies the data from the input source onto the local
-- Amazon Elastic Block Store (Amazon EBS) volumes before starting your
-- training algorithm. This is the most commonly used input mode. In @Pipe@
-- mode, Amazon SageMaker streams input data from the source directly to
-- your algorithm without using the EBS volume.
--
-- 'localPath', 'datasetDefinition_localPath' - The local path where you want Amazon SageMaker to download the Dataset
-- Definition inputs to run a processing job. @LocalPath@ is an absolute
-- path to the input data. This is a required parameter when @AppManaged@
-- is @False@ (default).
--
-- 'redshiftDatasetDefinition', 'datasetDefinition_redshiftDatasetDefinition' - Undocumented member.
newDatasetDefinition ::
  DatasetDefinition
newDatasetDefinition :: DatasetDefinition
newDatasetDefinition =
  DatasetDefinition'
    { $sel:athenaDatasetDefinition:DatasetDefinition' :: Maybe AthenaDatasetDefinition
athenaDatasetDefinition =
        forall a. Maybe a
Prelude.Nothing,
      $sel:dataDistributionType:DatasetDefinition' :: Maybe DataDistributionType
dataDistributionType = forall a. Maybe a
Prelude.Nothing,
      $sel:inputMode:DatasetDefinition' :: Maybe InputMode
inputMode = forall a. Maybe a
Prelude.Nothing,
      $sel:localPath:DatasetDefinition' :: Maybe Text
localPath = forall a. Maybe a
Prelude.Nothing,
      $sel:redshiftDatasetDefinition:DatasetDefinition' :: Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition = forall a. Maybe a
Prelude.Nothing
    }

-- | Undocumented member.
datasetDefinition_athenaDatasetDefinition :: Lens.Lens' DatasetDefinition (Prelude.Maybe AthenaDatasetDefinition)
datasetDefinition_athenaDatasetDefinition :: Lens' DatasetDefinition (Maybe AthenaDatasetDefinition)
datasetDefinition_athenaDatasetDefinition = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDefinition' {Maybe AthenaDatasetDefinition
athenaDatasetDefinition :: Maybe AthenaDatasetDefinition
$sel:athenaDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe AthenaDatasetDefinition
athenaDatasetDefinition} -> Maybe AthenaDatasetDefinition
athenaDatasetDefinition) (\s :: DatasetDefinition
s@DatasetDefinition' {} Maybe AthenaDatasetDefinition
a -> DatasetDefinition
s {$sel:athenaDatasetDefinition:DatasetDefinition' :: Maybe AthenaDatasetDefinition
athenaDatasetDefinition = Maybe AthenaDatasetDefinition
a} :: DatasetDefinition)

-- | Whether the generated dataset is @FullyReplicated@ or @ShardedByS3Key@
-- (default).
datasetDefinition_dataDistributionType :: Lens.Lens' DatasetDefinition (Prelude.Maybe DataDistributionType)
datasetDefinition_dataDistributionType :: Lens' DatasetDefinition (Maybe DataDistributionType)
datasetDefinition_dataDistributionType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDefinition' {Maybe DataDistributionType
dataDistributionType :: Maybe DataDistributionType
$sel:dataDistributionType:DatasetDefinition' :: DatasetDefinition -> Maybe DataDistributionType
dataDistributionType} -> Maybe DataDistributionType
dataDistributionType) (\s :: DatasetDefinition
s@DatasetDefinition' {} Maybe DataDistributionType
a -> DatasetDefinition
s {$sel:dataDistributionType:DatasetDefinition' :: Maybe DataDistributionType
dataDistributionType = Maybe DataDistributionType
a} :: DatasetDefinition)

-- | Whether to use @File@ or @Pipe@ input mode. In @File@ (default) mode,
-- Amazon SageMaker copies the data from the input source onto the local
-- Amazon Elastic Block Store (Amazon EBS) volumes before starting your
-- training algorithm. This is the most commonly used input mode. In @Pipe@
-- mode, Amazon SageMaker streams input data from the source directly to
-- your algorithm without using the EBS volume.
datasetDefinition_inputMode :: Lens.Lens' DatasetDefinition (Prelude.Maybe InputMode)
datasetDefinition_inputMode :: Lens' DatasetDefinition (Maybe InputMode)
datasetDefinition_inputMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDefinition' {Maybe InputMode
inputMode :: Maybe InputMode
$sel:inputMode:DatasetDefinition' :: DatasetDefinition -> Maybe InputMode
inputMode} -> Maybe InputMode
inputMode) (\s :: DatasetDefinition
s@DatasetDefinition' {} Maybe InputMode
a -> DatasetDefinition
s {$sel:inputMode:DatasetDefinition' :: Maybe InputMode
inputMode = Maybe InputMode
a} :: DatasetDefinition)

-- | The local path where you want Amazon SageMaker to download the Dataset
-- Definition inputs to run a processing job. @LocalPath@ is an absolute
-- path to the input data. This is a required parameter when @AppManaged@
-- is @False@ (default).
datasetDefinition_localPath :: Lens.Lens' DatasetDefinition (Prelude.Maybe Prelude.Text)
datasetDefinition_localPath :: Lens' DatasetDefinition (Maybe Text)
datasetDefinition_localPath = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDefinition' {Maybe Text
localPath :: Maybe Text
$sel:localPath:DatasetDefinition' :: DatasetDefinition -> Maybe Text
localPath} -> Maybe Text
localPath) (\s :: DatasetDefinition
s@DatasetDefinition' {} Maybe Text
a -> DatasetDefinition
s {$sel:localPath:DatasetDefinition' :: Maybe Text
localPath = Maybe Text
a} :: DatasetDefinition)

-- | Undocumented member.
datasetDefinition_redshiftDatasetDefinition :: Lens.Lens' DatasetDefinition (Prelude.Maybe RedshiftDatasetDefinition)
datasetDefinition_redshiftDatasetDefinition :: Lens' DatasetDefinition (Maybe RedshiftDatasetDefinition)
datasetDefinition_redshiftDatasetDefinition = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDefinition' {Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition :: Maybe RedshiftDatasetDefinition
$sel:redshiftDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition} -> Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition) (\s :: DatasetDefinition
s@DatasetDefinition' {} Maybe RedshiftDatasetDefinition
a -> DatasetDefinition
s {$sel:redshiftDatasetDefinition:DatasetDefinition' :: Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition = Maybe RedshiftDatasetDefinition
a} :: DatasetDefinition)

instance Data.FromJSON DatasetDefinition where
  parseJSON :: Value -> Parser DatasetDefinition
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DatasetDefinition"
      ( \Object
x ->
          Maybe AthenaDatasetDefinition
-> Maybe DataDistributionType
-> Maybe InputMode
-> Maybe Text
-> Maybe RedshiftDatasetDefinition
-> DatasetDefinition
DatasetDefinition'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AthenaDatasetDefinition")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DataDistributionType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"InputMode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"LocalPath")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RedshiftDatasetDefinition")
      )

instance Prelude.Hashable DatasetDefinition where
  hashWithSalt :: Int -> DatasetDefinition -> Int
hashWithSalt Int
_salt DatasetDefinition' {Maybe Text
Maybe AthenaDatasetDefinition
Maybe DataDistributionType
Maybe InputMode
Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition :: Maybe RedshiftDatasetDefinition
localPath :: Maybe Text
inputMode :: Maybe InputMode
dataDistributionType :: Maybe DataDistributionType
athenaDatasetDefinition :: Maybe AthenaDatasetDefinition
$sel:redshiftDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe RedshiftDatasetDefinition
$sel:localPath:DatasetDefinition' :: DatasetDefinition -> Maybe Text
$sel:inputMode:DatasetDefinition' :: DatasetDefinition -> Maybe InputMode
$sel:dataDistributionType:DatasetDefinition' :: DatasetDefinition -> Maybe DataDistributionType
$sel:athenaDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe AthenaDatasetDefinition
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AthenaDatasetDefinition
athenaDatasetDefinition
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataDistributionType
dataDistributionType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InputMode
inputMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
localPath
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition

instance Prelude.NFData DatasetDefinition where
  rnf :: DatasetDefinition -> ()
rnf DatasetDefinition' {Maybe Text
Maybe AthenaDatasetDefinition
Maybe DataDistributionType
Maybe InputMode
Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition :: Maybe RedshiftDatasetDefinition
localPath :: Maybe Text
inputMode :: Maybe InputMode
dataDistributionType :: Maybe DataDistributionType
athenaDatasetDefinition :: Maybe AthenaDatasetDefinition
$sel:redshiftDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe RedshiftDatasetDefinition
$sel:localPath:DatasetDefinition' :: DatasetDefinition -> Maybe Text
$sel:inputMode:DatasetDefinition' :: DatasetDefinition -> Maybe InputMode
$sel:dataDistributionType:DatasetDefinition' :: DatasetDefinition -> Maybe DataDistributionType
$sel:athenaDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe AthenaDatasetDefinition
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AthenaDatasetDefinition
athenaDatasetDefinition
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DataDistributionType
dataDistributionType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InputMode
inputMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
localPath
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition

instance Data.ToJSON DatasetDefinition where
  toJSON :: DatasetDefinition -> Value
toJSON DatasetDefinition' {Maybe Text
Maybe AthenaDatasetDefinition
Maybe DataDistributionType
Maybe InputMode
Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition :: Maybe RedshiftDatasetDefinition
localPath :: Maybe Text
inputMode :: Maybe InputMode
dataDistributionType :: Maybe DataDistributionType
athenaDatasetDefinition :: Maybe AthenaDatasetDefinition
$sel:redshiftDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe RedshiftDatasetDefinition
$sel:localPath:DatasetDefinition' :: DatasetDefinition -> Maybe Text
$sel:inputMode:DatasetDefinition' :: DatasetDefinition -> Maybe InputMode
$sel:dataDistributionType:DatasetDefinition' :: DatasetDefinition -> Maybe DataDistributionType
$sel:athenaDatasetDefinition:DatasetDefinition' :: DatasetDefinition -> Maybe AthenaDatasetDefinition
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AthenaDatasetDefinition" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AthenaDatasetDefinition
athenaDatasetDefinition,
            (Key
"DataDistributionType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DataDistributionType
dataDistributionType,
            (Key
"InputMode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe InputMode
inputMode,
            (Key
"LocalPath" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
localPath,
            (Key
"RedshiftDatasetDefinition" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RedshiftDatasetDefinition
redshiftDatasetDefinition
          ]
      )