Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation d'Amazon Kinesis Data Streams comme cible pour AWS Database Migration Service
Vous pouvez l'utiliser AWS DMS pour migrer des données vers un flux de données Amazon Kinesis. Les flux de données Amazon Kinesis font partie du service Amazon Kinesis Data Streams. Vous pouvez utiliser des flux de données Kinesis pour collecter et traiter des flux volumineux d’enregistrements de données en temps réel.
Un flux de données Kinesis se compose de partitions. Les partitions sont des séquences d'enregistrements de données identifiées de manière unique dans un flux. Pour plus d’informations sur les partitions dans Amazon Kinesis Data Streams, consultez Partition dans le Guide du développeur Amazon Kinesis Data Streams.
AWS Database Migration Service publie des enregistrements dans un flux de données Kinesis à l'aide de JSON. Au cours de la conversion, AWS DMS sérialise chaque enregistrement de la base de données source dans une paire attribut-valeur au format JSON ou un format de message JSON_UNFORMATED. Un format de message JSON_UNFORMATED est une chaîne JSON à une seule ligne avec un délimiteur de nouvelle ligne. Il permet à Amazon Data Firehose de fournir des données Kinesis à une destination Amazon S3, puis de les interroger à l'aide de différents moteurs de requête, dont Amazon Athena.
Utilisez le mappage d'objet pour migrer vos données de n'importe quelle source de données prise en charge vers un flux cible. Avec le mappage d'objet, vous déterminez la façon de structurer les enregistrements de données dans le flux. Vous définissez également une clé de partition pour chaque table, que Kinesis Data Streams utilise pour regrouper les données dans ses partitions.
Lors de la AWS DMS création de tables sur un point de terminaison cible Kinesis Data Streams, il crée autant de tables que dans le point de terminaison de la base de données source. AWS DMS définit également plusieurs valeurs de paramètres Kinesis Data Streams. Le coût de création de la table dépend de la quantité de données et du nombre de tables à migrer.
Note
L'option Mode SSL de la AWS DMS console ou de l'API ne s'applique pas à certains services de streaming de données et NoSQL tels que Kinesis et DynamoDB. Ils sont sécurisés par défaut, ce qui AWS DMS montre que le paramètre du mode SSL est égal à aucun (mode SSL = aucun). Vous n’avez pas besoin de fournir de configuration supplémentaire pour que votre point de terminaison utilise le protocole SSL. Par exemple, lorsque Kinesis est utilisé comme point de terminaison cible, il est sécurisé par défaut. Tous les appels d'API adressés à Kinesis utilisent le protocole SSL, il n'est donc pas nécessaire d'ajouter une option SSL supplémentaire sur le AWS DMS terminal. Vous pouvez placer et récupérer des données en toute sécurité via des points de terminaison SSL à l’aide du protocole HTTPS, utilisé par AWS DMS par défaut lors de la connexion à un flux de données Kinesis.
Paramètres de point de terminaison Kinesis Data Streams
Lorsque vous utilisez les points de terminaison cibles de Kinesis Data Streams, vous pouvez obtenir les détails des transactions et des contrôles à l'aide de l'option KinesisSettings
de l'API. AWS DMS
Vous pouvez définir les paramètres de connexion de l’une des manières suivantes :
Dans la AWS DMS console, à l'aide des paramètres du point de terminaison.
Dans la CLI, en utilisant l'
kinesis-settings
option de la CreateEndpointcommande.
Dans l’interface CLI, utilisez les paramètres de demande de l’option kinesis-settings
suivants :
Note
La prise en charge des paramètres de point de terminaison IncludeNullAndEmpty
est disponible dans AWS DMS versions 3.4.1 et ultérieures. Mais la prise en charge des autres paramètres de point de terminaison suivants pour les cibles Kinesis Data Streams est disponible dans AWS DMS.
MessageFormat
: format de sortie pour les enregistrements créés sur le point de terminaison. Le format du message estJSON
(par défaut) ouJSON_UNFORMATTED
(une seule ligne sans onglet).-
IncludeControlDetails
: affiche des informations de contrôle détaillées pour la définition de table, la définition de colonne et les modifications de table et de colonne dans la sortie du message Kinesis. L’argument par défaut estfalse
. -
IncludeNullAndEmpty
: inclut les colonnes NULL et vides dans la cible. L’argument par défaut estfalse
. -
IncludePartitionValue
: affiche la valeur de partition dans la sortie du message Kinesis, sauf si le type de partition estschema-table-type
. L’argument par défaut estfalse
. -
IncludeTableAlterOperations
: inclut toutes les opérations DDL (Data Definition Language) qui modifient la table dans les données de contrôle, telles querename-table
,drop-table
,add-column
,drop-column
etrename-column
. L’argument par défaut estfalse
. -
IncludeTransactionDetails
: fournit des informations détaillées sur les transactions à partir de la base de données source. Ces informations comprennent un horodatage de validation, une position de journal et des valeurs pourtransaction_id
,previous_transaction_id
ettransaction_record_id
(le décalage d'enregistrement dans une transaction). L’argument par défaut estfalse
. -
PartitionIncludeSchemaTable
: préfixe les noms de schéma et de table aux valeurs de partition, lorsque le type de partition estprimary-key-type
. Cela augmente la distribution des données entre les fragments Kinesis. Par exemple, supposons qu'un schémaSysBench
comporte des milliers de tables et que chaque table n'ait qu'une plage limitée pour une clé primaire. Dans ce cas, la même clé primaire est envoyée à partir de milliers de tables vers le même fragment, ce qui provoque une limitation. L’argument par défaut estfalse
.
L’exemple suivant illustre l’option kinesis-settings
utilisée avec un exemple de commande create-endpoint
émise à l’aide d’ AWS CLI.
aws dms create-endpoint --endpoint-identifier=$target_name --engine-name kinesis --endpoint-type target --region us-east-1 --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::333333333333:role/dms-kinesis-role, StreamArn=arn:aws:kinesis:us-east-1:333333333333:stream/dms-kinesis-target-doc,MessageFormat=json-unformatted, IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true, IncludeTableAlterOperations=true
Paramètres de tâche de chargement complet multithread
Pour accélérer le transfert, AWS DMS prend en charge le chargement complet multithread vers une instance cible Kinesis Data Streams. DMS prend en charge ce traitement multithread avec des paramètres de tâche, notamment les suivants :
-
MaxFullLoadSubTasks
: utilisez cette option pour indiquer le nombre maximal de tables sources à charger en parallèle. DMS charge chaque table dans sa table cible Kinesis correspondante à l’aide d’une sous-tâche dédiée. La valeur par défaut est 8 ; la valeur maximale 49. -
ParallelLoadThreads
— Utilisez cette option pour spécifier le nombre de threads AWS DMS utilisés pour charger chaque table dans sa table cible Kinesis. La valeur maximale pour une cible Kinesis Data Streams est de 32. Vous pouvez demander une augmentation de cette limite maximale. -
ParallelLoadBufferSize
: utilisez cette option pour spécifier le nombre maximal d’enregistrements à stocker dans la mémoire tampon utilisée par les threads de chargement parallèles pour charger les données dans la cible Kinesis. La valeur par défaut est 50. La valeur maximale est 1 000. Utilisez ce paramètre avecParallelLoadThreads
.ParallelLoadBufferSize
est valide uniquement dans le cas de plusieurs threads. -
ParallelLoadQueuesPerThread
: utilisez cette option pour spécifier le nombre de files d’attente auxquelles chaque thread simultané accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour la cible. La valeur par défaut est 1. Toutefois, pour les cibles Kinesis de différentes tailles de charge utile, la plage valide est comprise entre 5 et 512 files d’attente par thread.
Paramètres de tâche de chargement CDC multithread
Vous pouvez utiliser les paramètres de tâche afin d’améliorer les performances de la capture des données de modification (CDC) pour les points de terminaison cibles de streaming des données en temps réel, comme Kinesis et modifier le comportement de l’appel d’API PutRecords
. Pour ce faire, vous pouvez spécifier le nombre de threads simultanés, les files d'attente par thread et le nombre d'enregistrements à stocker dans un tampon à l'aide de la tâche ParallelApply*
. Par exemple, supposons que vous souhaitiez effectuer un chargement CDC et appliquer 128 threads en parallèle. Vous souhaitez également accéder à 64 files d'attente par thread, avec 50 enregistrements stockés par tampon.
Pour améliorer les performances du CDC, AWS DMS prend en charge les paramètres de tâche suivants :
-
ParallelApplyThreads
— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Kinesis. La valeur par défaut est zéro (0) et la valeur maximale est 32. -
ParallelApplyBufferSize
: spécifie le nombre maximal d’enregistrements à stocker dans chaque file d’attente de mémoire tampon pour que les threads simultanés soient transférés vers un point de terminaison cible Kinesis lors d’un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsqueParallelApplyThreads
spécifie plusieurs threads. -
ParallelApplyQueuesPerThread
: spécifie le nombre de files d’attente auxquelles chaque thread accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour un point de terminaison Kinesis pendant la CDC. La valeur par défaut est 1 et la valeur maximale est 512.
Lorsque vous utilisez les paramètres de tâche ParallelApply*
, la valeur par défaut partition-key-type
est la valeur primary-key
de la table, pas schema-name.table-name
.
Utilisation d’une image antérieure pour afficher les valeurs d’origine des lignes CDC pour un flux de données Kinesis en tant que cible
Lorsque vous écrivez des mises à jour de CDC sur une cible de diffusion de données comme Kinesis, vous pouvez afficher les valeurs d’origine d’une ligne de base de données source avant de les modifier par une mise à jour. Pour ce faire, AWS DMS remplit une image antérieure des événements de mise à jour en fonction des données fournies par le moteur de base de données source.
Différents moteurs de base de données source fournissent différentes quantités d'informations pour une image antérieure :
-
Oracle met uniquement à jour des colonnes si elles changent.
-
PostgreSQL fournit uniquement des données pour les colonnes qui font partie de la clé primaire (modifiée ou non). Pour fournir des données pour toutes les colonnes (modifiées ou non), vous devez définir
REPLICA_IDENTITY
surFULL
au lieu deDEFAULT
. Notez que vous devez choisir la valeur deREPLICA_IDENTITY
avec soin pour chaque table. Si vous définissezREPLICA_IDENTITY
surFULL
, toutes les valeurs de colonne sont écrites en continu dans la journalisation WAL. Cela peut entraîner des problèmes de performances ou de ressources avec les tables qui sont fréquemment mises à jour. -
MySQL fournit généralement des données pour toutes les colonnes, à l’exception des types de données BLOB et CLOB (modifiés ou non).
Pour activer avant l'imagerie pour ajouter des valeurs d'origine de la base de données source à la sortie AWS DMS , utilisez le paramètre de tâche BeforeImageSettings
ou le paramètre add-before-image-columns
. Ce paramètre applique une règle de transformation de colonne.
BeforeImageSettings
ajoute un nouvel attribut JSON à chaque opération de mise à jour avec des valeurs collectées à partir du système de base de données source, comme indiqué ci-dessous.
"BeforeImageSettings": { "EnableBeforeImage": boolean, "FieldName": string, "ColumnFilter": pk-only (default) / non-lob / all (but only one) }
Note
S'applique uniquement BeforeImageSettings
aux AWS DMS tâches contenant un composant CDC, telles que les tâches à chargement complet plus CDC (qui migrent les données existantes et répliquent les modifications en cours), ou aux tâches CDC uniquement (qui répliquent uniquement les modifications de données). N’appliquez pas les BeforeImageSettings
aux tâches à pleine charge uniquement.
Pour les options BeforeImageSettings
, les conditions suivantes s'appliquent :
-
Définissez l'option
EnableBeforeImage
surtrue
pour activer la génération d’image antérieure. L’argument par défaut estfalse
. -
Utilisez l'option
FieldName
pour attribuer un nom au nouvel attribut JSON. QuandEnableBeforeImage
esttrue
,FieldName
est obligatoire et ne peut pas être vide. -
L'option
ColumnFilter
spécifie une colonne à ajouter en utilisant la génération d’image antérieure. Pour ajouter uniquement des colonnes faisant partie des clés primaires de la table, utilisez la valeur par défaut,pk-only
. Pour ajouter une colonne ayant une valeur d'image antérieure, utilisezall
. Notez que l’image antérieure ne contient pas de colonnes avec des types de données LOB, tels que CLOB ou BLOB."BeforeImageSettings": { "EnableBeforeImage": true, "FieldName": "before-image", "ColumnFilter": "pk-only" }
Note
Les cibles Amazon S3 ne prennent pas en charge BeforeImageSettings
. Pour les cibles S3, utilisez uniquement la règle de transformation add-before-image-columns
à effectuer avant la génération d’images pendant la CDC.
Utilisation d'une règle de transformation d'image antérieure
Au lieu des paramètres de tâche, vous pouvez utiliser le paramètre add-before-image-columns
, qui applique une règle de transformation de colonne. Avec ce paramètre, vous pouvez activer la génération d’image antérieure pendant la CDC sur des cibles de streaming de données comme Kinesis.
En utilisant add-before-image-columns
dans une règle de transformation, vous pouvez exercer un contrôle plus précis sur les résultats de l'image antérieure. Les règles de transformation vous permettent d'utiliser un localisateur d'objets qui vous fournit un contrôle sur les tables sélectionnées pour la règle. En outre, vous pouvez enchaîner les règles de transformation, ce qui permet d'appliquer différentes règles à différentes tables. Vous pouvez ensuite manipuler les colonnes produites à l'aide d'autres règles.
Note
N'utilisez pas le paramètre add-before-image-columns
avec le paramètre de tâche BeforeImageSettings
dans la même tâche. N’utilisez pas les deux, pour une seule tâche.
Un type de règle transformation
avec le paramètre add-before-image-columns
d'une colonne doit fournir une section before-image-def
. Vous en trouverez un exemple ci-dessous.
{ "rule-type": "transformation", … "rule-target": "column", "rule-action": "add-before-image-columns", "before-image-def":{ "column-filter": one-of (pk-only / non-lob / all), "column-prefix": string, "column-suffix": string, } }
La valeur de column-prefix
est ajoutée à un nom de colonne et la valeur par défaut de column-prefix
est BI_
. La valeur de column-suffix
est ajoutée au nom de la colonne et la valeur par défaut est vide. Ne définissez pas les deux column-prefix
et column-suffix
sur des chaînes vides.
Choisissez une valeur pour column-filter
. Pour ajouter uniquement les colonnes qui font partie des clés primaires de la table, choisissez pk-only
. Choisissez non-lob
d'ajouter uniquement des colonnes qui ne sont pas de type LOB. Ou choisissez all
d'ajouter une colonne qui a une valeur d’image antérieure.
Exemple de règle de transformation d'image antérieure
La règle de transformation de l'exemple suivant ajoute une nouvelle colonne appelée BI_emp_no
dans la cible. Ainsi, une instruction comme UPDATE
employees SET emp_no = 3 WHERE emp_no = 1;
remplit le champ BI_emp_no
avec 1. Lorsque vous écrivez des mises à jour de CDC sur des cibles Amazon S3, la colonne BI_emp_no
permet de savoir quelle ligne d’origine a été mise à jour.
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "employees" }, "rule-action": "add-before-image-columns", "before-image-def": { "column-prefix": "BI_", "column-suffix": "", "column-filter": "pk-only" } } ] }
Pour plus d'informations sur l'utilisation de l'action de règle add-before-image-columns
, consultez Règles et actions de transformation.
Conditions préalables à l'utilisation d'un flux de données Kinesis comme cible pour AWS Database Migration Service
Rôle IAM pour l'utilisation d'un flux de données Kinesis comme cible pour AWS Database Migration Service
Avant de configurer un flux de données Kinesis comme cible AWS DMS, assurez-vous de créer un rôle IAM. Ce rôle doit permettre d' AWS DMS assumer et d'accorder l'accès aux flux de données Kinesis vers lesquels la migration est en cours de migration. L'ensemble d'autorisations d'accès minimum est indiqué dans la stratégie IAM suivante.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Le rôle que vous utilisez pour la migration vers un flux de données Kinesis doit bénéficier des autorisations suivantes.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:
region
:accountID
:stream/streamName
" } ] }
Accès à un flux de données Kinesis en tant que cible pour AWS Database Migration Service
Dans les AWS DMS versions 3.4.7 et supérieures, pour vous connecter à un point de terminaison Kinesis, vous devez effectuer l'une des opérations suivantes :
Configurez DMS pour qu’il utilise les points de terminaison d’un VPC. Pour plus d’informations sur la configuration de DMS pour qu’il utilise les points de terminaison d’un VPC, consultez Configuration de points de terminaison de VPC en tant que points de terminaison sources et cibles AWS DMS.
Configurez DMS pour qu’il utilise des routes publiques, c’est-à-dire qu’il rende votre instance de réplication publique. Pour plus d’informations sur les instances de réplication publiques, consultez Instances de réplication publiques et privées.
Limitations liées à l'utilisation de Kinesis Data Streams comme cible pour AWS Database Migration Service
Les limitations suivantes s’appliquent lorsque vous utilisez Kinesis Data Streams en tant que cible :
-
AWS DMS publie chaque mise à jour d'un seul enregistrement de la base de données source sous la forme d'un enregistrement de données dans un flux de données Kinesis donné, quelles que soient les transactions. Toutefois, vous pouvez inclure des détails de transaction pour chaque enregistrement de données à l'aide des paramètres pertinents de l'API
KinesisSettings
. -
Le Mode LOB complet n'est pas pris en charge.
-
La taille LOB maximale prise en charge est de 1 Mo.
-
Kinesis Data Streams ne prend pas en charge la déduplication. Les applications qui consomment des données d'un flux doivent gérer les enregistrements en double. Pour plus d’informations, consultez Gestion des enregistrements en double dans le Guide du développeur Amazon Kinesis Data Streams.
-
AWS DMS prend en charge les deux formes suivantes pour les clés de partition :
-
SchemaName.TableName
: une combinaison du nom du schéma et du nom de la table. -
${AttributeName}
: la valeur d'un des champs du fichier JSON, ou la clé primaire de la table dans la base de données source.
-
-
Pour en savoir plus sur le chiffrement de vos données au repos dans Kinesis Data Streams, consultez Protection des données dans Kinesis Data Streams dans le Guide du développeur AWS Key Management Service .
-
BatchApply
n’est pas pris en charge pour un point de terminaison Kinesis. L’utilisation de l’application par lots (par exemple, le paramètre de tâche de métadonnées cibleBatchApplyEnabled
) pour une cible Kinesis peut entraîner une perte de données. -
Les cibles Kinesis ne sont prises en charge que pour un flux de données Kinesis dans le même AWS compte et le même Région AWS que l'instance de réplication.
-
Lors de la migration depuis une source MySQL, les BeforeImage données n'incluent pas les types de données CLOB et BLOB. Pour de plus amples informations, veuillez consulter Utilisation d’une image antérieure pour afficher les valeurs d’origine des lignes CDC pour un flux de données Kinesis en tant que cible.
-
AWS DMS ne prend pas en charge la migration de valeurs de type de
BigInt
données comportant plus de 16 chiffres. Pour contourner cette limitation, vous pouvez utiliser la règle de transformation suivante pour convertir la colonneBigInt
en chaîne. Pour plus d’informations sur les règles de transformation, consultez Règles et actions de transformation.{ "rule-type": "transformation", "rule-id": "id", "rule-name": "name", "rule-target": "column", "object-locator": { "schema-name": "valid object-mapping rule action", "table-name": "", "column-name": "" }, "rule-action": "change-data-type", "data-type": { "type": "string", "length": 20 } }
Utilisation du mappage d’objet pour migrer les données vers un flux de données Kinesis
AWS DMS utilise des règles de mappage de tables pour mapper les données de la source vers le flux de données Kinesis cible. Pour mapper des données vers un flux cible, vous utilisez un type de règles de mappage de tables qu'on appelle le mappage d'objet. Utilisez le mappage d’objet pour définir la façon dont les enregistrements de données de la source sont mappés aux enregistrements de données publiés dans le flux de données Kinesis.
Les flux de données Kinesis ne disposent pas d’une structure prédéfinie autre que le fait d’avoir une clé de partition. Dans une règle de mappage d'objets, les valeurs possibles de partition-key-type
pour un enregistrement de données sont schema-table
, transaction-id
, primary-key
, constant
et attribute-name
.
Pour créer une règle de mappage d'objet, spécifiez rule-type
comme object-mapping
. Cette règle spécifie le type de mappage d'objet que vous souhaitez utiliser.
La structure de la règle est la suivante.
{ "rules": [ { "rule-type": "object-mapping", "rule-id": "
id
", "rule-name": "name
", "rule-action": "valid object-mapping rule action
", "object-locator": { "schema-name": "case-sensitive schema name
", "table-name": "" } } ] }
AWS DMS prend actuellement en charge map-record-to-record
et map-record-to-document
en tant que seules valeurs valides pour le rule-action
paramètre. Ces paramètres affectent les valeurs qui ne sont pas exclues de la liste d’attributs exclude-columns
. Les map-record-to-document
valeurs map-record-to-record
et indiquent le mode de AWS DMS gestion de ces enregistrements par défaut. Ces valeurs n'affectent en aucune façon les mappages d'attributs.
Utilisez map-record-to-record
lors d’une migration d’une base de données relationnelle vers un flux de données Kinesis. Ce type de règle utilise la valeur taskResourceId.schemaName.tableName
de la base de données relationnelle comme clé de partition dans le flux de données Kinesis et crée un attribut pour chaque colonne de la base de données source.
Lorsque vous utilisez map-record-to-record
, notez ce qui suit :
Ce paramètre n’affecte que les colonnes exclues par la liste
exclude-columns
.Pour chacune de ces colonnes, AWS DMS crée un attribut correspondant dans le sujet cible.
AWS DMS crée cet attribut correspondant, que la colonne source soit utilisée ou non dans un mappage d'attributs.
Utilisez map-record-to-document
pour placer des colonnes sources dans un document unique à plat du flux cible approprié en utilisant le nom d’attribut « _doc ». AWS DMS place les données dans un mappage unique à plat sur la source appelée « _doc
». Ce placement s'applique à toute colonne de la table source non listée dans la liste d'attributs exclude-columns
.
Une manière de comprendre map-record-to-record
est de le voir en action. Dans cet exemple, imaginons que vous commencez avec une ligne de table d'une base de données relationnelle, présentant la structure et les données suivantes :
FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth |
---|---|---|---|---|---|---|---|
Randy |
Marsh | 5 |
221B Baker Street |
1234567890 |
31 Spooner Street, Quahog |
9876543210 |
02/29/1988 |
Pour migrer ces informations d’un schéma nommé Test
vers un flux de données Kinesis, vous créez des règles pour mapper les données au flux cible. La règle suivante illustre ce mappage.
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToKinesis", "rule-action": "map-record-to-record", "object-locator": { "schema-name": "Test", "table-name": "Customers" } } ] }
L’exemple qui suit illustre le format d’enregistrement résultant dans le flux de données Kinesis :
-
StreamName: XXX
-
PartitionKey: Test.Customers //SchmaName.TableName
-
Data : //The following JSON message
{ "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "HomeAddress": "221B Baker Street", "HomePhone": "1234567890", "WorkAddress": "31 Spooner Street, Quahog", "WorkPhone": "9876543210", "DateOfBirth": "02/29/1988" }
Supposons toutefois que vous utilisiez les mêmes règles, mais que vous redéfinissiez le paramètre rule-action
sur map-record-to-document
et que vous excluiez certaines colonnes. La règle suivante illustre ce mappage.
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToKinesis", "rule-action": "map-record-to-document", "object-locator": { "schema-name": "Test", "table-name": "Customers" }, "mapping-parameters": { "exclude-columns": [ "homeaddress", "homephone", "workaddress", "workphone" ] } } ] }
Dans ce cas, les colonnes non répertoriées dans le paramètre exclude-columns
, FirstName
, LastName
, StoreId
et DateOfBirth
, sont mappées à _doc
. L’exemple qui suit illustre le format d’enregistrement résultant.
{ "data":{ "_doc":{ "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "DateOfBirth": "02/29/1988" } } }
Restructuration de données avec le mappage d'attribut
Vous pouvez restructurer les données lors de leur migration vers un flux de données Kinesis à l’aide d’un mappage d’attribut. Par exemple, vous pourriez vouloir regrouper plusieurs champs de la source en un seul champ dans la cible. Le mappage d'attribut suivant illustre comment restructurer les données.
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "TransformToKinesis", "rule-action": "map-record-to-record", "target-table-name": "CustomerData", "object-locator": { "schema-name": "Test", "table-name": "Customers" }, "mapping-parameters": { "partition-key-type": "attribute-name", "partition-key-name": "CustomerName", "exclude-columns": [ "firstname", "lastname", "homeaddress", "homephone", "workaddress", "workphone" ], "attribute-mappings": [ { "target-attribute-name": "CustomerName", "attribute-type": "scalar", "attribute-sub-type": "string", "value": "${lastname}, ${firstname}" }, { "target-attribute-name": "ContactDetails", "attribute-type": "document", "attribute-sub-type": "json", "value": { "Home": { "Address": "${homeaddress}", "Phone": "${homephone}" }, "Work": { "Address": "${workaddress}", "Phone": "${workphone}" } } } ] } } ] }
Pour définir une valeur constante pour partition-key
, spécifiez une valeur partition-key
. Par exemple, vous pouvez le faire pour forcer le stockage de toutes les données dans une seule partition. Le mappage suivant illustre cette approche.
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "object-mapping", "rule-id": "1", "rule-name": "TransformToKinesis", "rule-action": "map-record-to-document", "object-locator": { "schema-name": "Test", "table-name": "Customer" }, "mapping-parameters": { "partition-key": { "value": "ConstantPartitionKey" }, "exclude-columns": [ "FirstName", "LastName", "HomeAddress", "HomePhone", "WorkAddress", "WorkPhone" ], "attribute-mappings": [ { "attribute-name": "CustomerName", "value": "${FirstName},${LastName}" }, { "attribute-name": "ContactDetails", "value": { "Home": { "Address": "${HomeAddress}", "Phone": "${HomePhone}" }, "Work": { "Address": "${WorkAddress}", "Phone": "${WorkPhone}" } } }, { "attribute-name": "DateOfBirth", "value": "${DateOfBirth}" } ] } } ] }
Note
La valeur partition-key
d'un enregistrement de contrôle correspondant à une table spécifique est TaskId.SchemaName.TableName
. La valeur partition-key
d'un enregistrement de contrôle correspondant à une tâche spécifique est le TaskId
de cet enregistrement. La spécification d'une valeur partition-key
dans le mappage d'objet n'a aucun impact sur la partition-key
d'un enregistrement de contrôle.
Format de message pour Kinesis Data Streams
La sortie JSON est simplement une liste de paires clé-valeur. Un format de message JSON_UNFORMATED est une chaîne JSON à une seule ligne avec un délimiteur de nouvelle ligne.
AWS DMS fournit les champs réservés suivants pour faciliter la consommation des données issues des Kinesis Data Streams :
- RecordType
-
Les enregistrements peuvent être de type Données ou Contrôle. Les enregistrements de données représentent les lignes réelles de la source. Les enregistrements de contrôle sont destinés à des événements importants dans le flux, par exemple un redémarrage de la tâche.
- Opération
-
Pour les enregistrements de données, l'opération peut être
load
,insert
,update
oudelete
.Pour les enregistrements de contrôle, l’opération peut être
create-table
,rename-table
,drop-table
,change-columns
,add-column
,drop-column
,rename-column
oucolumn-type-change
. - SchemaName
-
Schéma source de l'enregistrement. Ce champ peut être vide pour un enregistrement de contrôle.
- TableName
-
Table source de l'enregistrement. Ce champ peut être vide pour un enregistrement de contrôle.
- Horodatage
-
Horodatage de la construction du message JSON. Le champ est formaté selon le format ISO 8601.