Utilizzo di Amazon S3 come sorgente per AWS DMS - AWS Database Migration Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di Amazon S3 come sorgente per AWS DMS

Puoi migrare i dati da un bucket Amazon S3 utilizzando. AWS DMS Per eseguire questa operazione dovrai fornire l'accesso a un bucket Amazon S3 contenente uno o più file di dati. In questo bucket S3, includi un file JSON che descriva la mappatura tra i dati e le tabelle di database dei dati in questi file.

I file di dati di origine devono essere presenti nel bucket Amazon S3 prima dell'avvio del pieno carico. Specifica il nome del bucket tramite il parametro bucketName.

I file di dati di origine possono avere i seguenti formati:

Per i file di dati di origine in formato con valori separati da virgole (.csv), denominateli utilizzando la seguente convenzione di denominazione. In questa convenzione, schemaName è lo schema di origine e tableName è il nome di una tabella all'interno di tale schema.

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

Ad esempio, supponi che i file di dati siano in mybucket nel seguente percorso Amazon S3.

s3://mybucket/hr/employee

In fase di caricamento, AWS DMS si presuppone che il nome dello schema di origine sia e che il nome della tabella di origine siahr. employee

Oltre a bucketName (obbligatorio), puoi facoltativamente fornire un bucketFolder parametro per AWS DMS specificare dove cercare i file di dati nel bucket Amazon S3. Continuando l'esempio precedente, se lo hai bucketFolder impostato susourcedata, AWS DMS legge i file di dati nel percorso seguente.

s3://mybucket/sourcedata/hr/employee

Puoi specificare il delimitatore di colonna, di riga, l'indicatore di valori null e altri parametri utilizzando gli attributi di connessione aggiuntivi. Per ulteriori informazioni, consulta Impostazioni degli endpoint per Amazon S3 come origine per AWS DMS.

Puoi specificare il proprietario del bucket e impedire lo sniping utilizzando l'impostazione dell'endpoint ExpectedBucketOwner Amazon S3, come illustrato di seguito. Quindi, quando effettui una richiesta per testare una connessione o eseguire una migrazione, S3 controlla l'ID account del proprietario del bucket rispetto al parametro specificato.

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

Definizione di tabelle esterne per Amazon S3 come origine per AWS DMS

Oltre ai file di dati, devi fornire anche una definizione di tabella esterna. Una definizione di tabella esterna è un documento JSON che descrive come AWS DMS interpretare i dati di Amazon S3. La dimensione massima di questo documento è 2 MB. Se crei un endpoint di origine utilizzando la console di AWS DMS gestione, puoi inserire il codice JSON direttamente nella casella di mappatura delle tabelle. Se utilizzi AWS Command Line Interface (AWS CLI) o l' AWS DMS API per eseguire le migrazioni, puoi creare un file JSON per specificare la definizione della tabella esterna.

Ad esempio, supponi di avere un file di dati che include quanto segue.

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

Di seguito è riportato un esempio di definizione di tabella esterna per questi dati.

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

Gli elementi in questo documento JSON sono i seguenti:

TableCount: il numero di tabelle di origine. In questo esempio è presente una sola tabella.

Tables: un array costituito da una mappa JSON per tabella di origine. In questo esempio è presente una sola mappa. Ogni mappa è formata dai seguenti elementi:

  • TableName: il nome della tabella di origine.

  • TablePath: il percorso nel bucket Amazon S3 in cui AWS DMS può trovare il file completo del caricamento dei dati. Se è specificato un valore bucketFolder, questo valore viene anteposto al percorso.

  • TableOwner: il nome dello schema per la tabella.

  • TableColumns: un array di una o più mappe, ognuna delle quali descrive una colonna nella tabella di origine:

    • ColumnName: il nome di una colonna nella tabella di origine.

    • ColumnType: il tipo di dati della colonna. Per informazioni sui tipi di dati validi, consulta Tipi di dati di origine per Amazon S3.

    • ColumnLength: il numero di byte della colonna. La lunghezza massima delle colonne è limitata a 2147483647 byte (2.047 MegaBytes) poiché una sorgente S3 non supporta la modalità FULL LOB. ColumnLengthè valido per i seguenti tipi di dati:

      • BYTE

      • STRING

    • ColumnNullable: un valore booleano che è true se questa colonna può contenere valori NULL (predefinito = false).

    • ColumnIsPk: un valore booleano che è true se questa colonna è parte della chiave primaria (predefinito = false).

    • ColumnDateFormat: il formato della data di input per una colonna con i tipi DATE, TIME e DATETIME e utilizzato per analizzare una stringa di dati in un oggetto data. I valori possibili includono:

      - YYYY-MM-dd HH:mm:ss - YYYY-MM-dd HH:mm:ss.F - YYYY/MM/dd HH:mm:ss - YYYY/MM/dd HH:mm:ss.F - MM/dd/YYYY HH:mm:ss - MM/dd/YYYY HH:mm:ss.F - YYYYMMdd HH:mm:ss - YYYYMMdd HH:mm:ss.F
  • TableColumnsTotal: il numero totale di colonne. Questo numero deve corrispondere al numero di elementi nella matrice TableColumns.

Se non si specifica diversamente, AWS DMS si presuppone che ColumnLength sia zero.

Nota

Nelle versioni supportate di AWS DMS, i dati di origine S3 possono contenere anche una colonna operativa opzionale come prima colonna prima del valore della TableName colonna. Questa colonna operazione identifica l'operazione (INSERT) utilizzata per migrare i dati a un endpoint di destinazione S3 durante un carico completo.

Se presente, il valore di questa colonna è il carattere iniziale della parola chiave (I) dell’operazione INSERT. Se specificato, questa colonna generalmente indica che la sorgente di S3 è stata creata da DMS come target S3 durante una migrazione precedente.

Nelle versioni di DMS precedenti alla 3.4.2, questa colonna non era presente nei dati di origine S3 creati da un precedente pieno carico DMS. Aggiungere questa colonna ai dati target S3 consente al formato di tutte le righe scritte nel target S3 di essere coerenti se sono scritte durante un pieno carico o durante un carico CDC. Per ulteriori informazioni sulle opzioni per la formattazione dei dati target S3, vedere Indicazione delle operazioni del DB di origine nei dati S3 migrati.

Per una colonna di tipo NUMERIC, devi specificare la precisione e la dimensione. La precisione è il numero totale di cifre in un numero e la dimensione è il numero di cifre a destra del separatore decimale. Puoi utilizzare gli elementi ColumnScale e ColumnPrecision come illustrato di seguito.

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

Per una colonna di tipo DATETIME con dati che contengono frazioni di secondo, specifica la scala. La scala è il numero di cifre per le frazioni di secondo e può variare da 0 a 9. Puoi utilizzare l'elemento ColumnScale per questo scopo, come illustrato di seguito.

... { "ColumnName": "HireDate", "ColumnType": "DATETIME", "ColumnScale": "3" } ...

Se non specifichi diversamente, AWS DMS assume che ColumnScale sia zero e tronca la frazione di secondo.

Utilizzo della CDC con Amazon S3 come origine per AWS DMS

Dopo aver AWS DMS eseguito un caricamento completo dei dati, può opzionalmente replicare le modifiche ai dati sull'endpoint di destinazione. A tale scopo, carichi i file di acquisizione dei dati di modifica (file CDC) nel tuo bucket Amazon S3. AWS DMS legge questi file CDC quando li carichi e quindi applica le modifiche all'endpoint di destinazione.

I file CDC sono denominati come segue:

CDC00001.csv CDC00002.csv CDC00003.csv ...
Nota

Per replicare i file CDC nella cartella dei dati di modifica caricarli correttamente in un ordine lessicale (sequenziale). Ad esempio, caricare il file CDC00002.csv prima del file CDC00003.csv. In caso contrario, CDC00002.csv viene ignorato e non viene replicato se lo si carica dopo CDC00003.csv. Ma il file CDC00004.csv viene replicato correttamente se caricato dopo CDC00003.csv.

Per indicare dove è AWS DMS possibile trovare i file, specificare il parametro. cdcPath Continuando con l'esempio precedente, se imposti cdcPath su changedata, AWS DMS legge i file CDC dal seguente percorso.

s3://mybucket/changedata

Se imposti su cdcPath su changedata e bucketFolder su myFolder, AWS DMS legge i file CDC nel seguente percorso.

s3://mybucket/myFolder/changedata

I record in un file CDC sono formattati come segue:

  • Operazione: l'operazione di modifica da eseguire: INSERT o I, UPDATE o U, oppure DELETE o D. Queste parole chiave e i valori dei caratteri non fanno distinzione tra maiuscole e minuscole.

    Nota

    Nelle AWS DMS versioni supportate, AWS DMS può identificare l'operazione da eseguire per ogni record di caricamento in due modi. AWS DMS può eseguire questa operazione dal valore della parola chiave del record (ad esempio,INSERT) o dal carattere iniziale della parola chiave (ad esempio,I). Nelle versioni precedenti, AWS DMS riconosceva l'operazione di caricamento solo dal valore completo della parola chiave.

    Nelle versioni precedenti di AWS DMS, il valore completo della parola chiave veniva scritto per registrare i dati CDC. Inoltre, le versioni precedenti scrivevano il valore dell'operazione su qualsiasi destinazione S3 utilizzando solo la parola chiave iniziale.

    Il riconoscimento di entrambi i formati consente di AWS DMS gestire l'operazione indipendentemente da come viene scritta la colonna delle operazioni per creare i dati di origine S3. Questo approccio supporta l'utilizzo di dati di destinazione su S3 come sorgente per una successiva migrazione. Grazie a questo approccio, non è necessario modificare il formato di qualsiasi valore iniziale della parola chiave visualizzato nella colonna dell'operazione della successiva sorgente S3.

  • Nome tabella: il nome della tabella di origine.

  • Nome dello schema: il nome dello schema di origine.

  • Dati: una o più colonne che rappresentano i dati da modificare.

Di seguito è riportato un esempio di un file CDC per una tabella denominata employee.

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

Prerequisiti per l'utilizzo di Amazon S3 come sorgente per AWS DMS

Per utilizzare Amazon S3 come origine per AWS DMS, il bucket S3 di origine deve trovarsi nella stessa AWS regione dell'istanza di replica DMS che migra i dati. Inoltre, l'account AWS che utilizzi per la migrazione deve disporre dell'accesso in lettura al bucket di origine. Per la AWS DMS versione 3.4.7 e successive, DMS deve accedere al bucket di origine tramite un endpoint VPC o una route pubblica. Per informazioni sugli endpoint VPC, consulta. Configurazione degli endpoint VPC come endpoint di origine e di destinazione AWS DMS

Il ruolo AWS Identity and Access Management (IAM) assegnato all'account utente utilizzato per creare l'attività di migrazione deve disporre del seguente set di autorizzazioni.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Il ruolo AWS Identity and Access Management (IAM) assegnato all'account utente utilizzato per creare l'attività di migrazione deve disporre del seguente set di autorizzazioni se il controllo delle versioni è abilitato nel bucket Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "S3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Limitazioni nell'utilizzo di Amazon S3 come fonte per AWS DMS

Le seguenti limitazioni si applicano quando si utilizza Amazon S3 come origine:

  • Non abilitare il controllo delle versioni per S3. Se hai bisogno del controllo delle versioni S3, utilizza le policy del ciclo di vita per eliminare attivamente le vecchie versioni. In caso contrario, è possibile che si verifichino errori della connessione di test dell'endpoint a causa del timeout della chiamata list-object S3. Per creare una policy del ciclo di vita per un bucket S3, consulta Gestione del ciclo di vita dello storage. Per eliminare la versione di un oggetto S3, consulta Eliminazione di versioni di oggetti da un bucket con funzione Controllo delle versioni abilitata.

  • Un bucket S3 abilitato per VPC (VPC del gateway) è supportato nelle versioni 3.4.7 e successive.

  • MySQL converte time il tipo di dati in. string Per visualizzare time i valori dei tipi di dati in MySQL, definisci la colonna nella tabella di destinazione string come e imposta l'impostazione della modalità di preparazione della tabella Target dell'attività su Truncate.

  • AWS DMS utilizza il tipo di BYTE dati internamente per i dati di entrambi i tipi di dati. BYTE BYTES

  • Gli endpoint di origine S3 non supportano la funzionalità di ricarica delle tabelle DMS.

  • AWS DMS non supporta la modalità Full LOB con Amazon S3 come sorgente.

Le seguenti limitazioni si applicano all'utilizzo di file in formato Parquet in Amazon S3 come origine:

  • Le date incluse o non DDMMYYYY sono supportate per la funzionalità di partizionamento della data di S3 Parquet Source. MMYYYYDD

Impostazioni degli endpoint per Amazon S3 come origine per AWS DMS

È possibile utilizzare le impostazioni degli endpoint per configurare il database di origine Amazon S3 in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di origine utilizzando la AWS DMS console o utilizzando il create-endpoint comando in AWS CLI, con la --s3-settings '{"EndpointSetting": "value", ...}' sintassi JSON.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con Amazon S3 come origine.

Opzione Descrizione
BucketFolder

(Facoltativo) Un nome di cartella nel bucket S3. Se questo attributo è fornito, i file di dati di origine e i file CDC vengono letti dal percorso s3://myBucket/bucketFolder/schemaName/tableName/ e s3://myBucket/bucketFolder/ rispettivamente. Se questo attributo non è specificato, viene utilizzato il percorso schemaName/tableName/.

'{"BucketFolder": "sourceData"}'

BucketName

Nome del bucket S3.

'{"BucketName": "myBucket"}'

CdcPath La posizione dei file CDC. Questo attributo è necessario se un'attività acquisisce i dati modificati; altrimenti, è facoltativo. Se CdcPath è presente, AWS DMS legge i file CDC da questo percorso e replica le modifiche ai dati sull'endpoint di destinazione. Per ulteriori informazioni, consulta Utilizzo della CDC con Amazon S3 come origine per AWS DMS.

'{"CdcPath": "changeData"}'

CsvDelimiter

Delimitatore utilizzato per separare le colonne nei file di origine. L'impostazione predefinita è una virgola. Di seguito è riportato un esempio.

'{"CsvDelimiter": ","}'

CsvNullValue

Una stringa definita dall'utente che viene considerata nulla AWS DMS durante la lettura dall'origine. L'impostazione predefinita è una stringa vuota. Se non impostate questo parametro, AWS DMS considera una stringa vuota come un valore nullo. Se impostate questo parametro su una stringa come «\ N», AWS DMS tratta questa stringa come valore nullo e tratta le stringhe vuote come valore di stringa vuota.

CsvRowDelimiter

Delimitatore utilizzato per separare le righe nei file di origine. L'impostazione predefinita è una nuova riga (\n).

'{"CsvRowDelimiter": "\n"}'

DataFormat

Imposta questo valore su per leggere i dati Parquet in formato Parquet.

'{"DataFormat": "Parquet"}'

IgnoreHeaderRows

Quando questo valore è impostato su 1, AWS DMS ignora l'intestazione della prima riga in un file.csv. Il valore 1 abilita la funzionalità, il valore 0 la disabilita.

Il valore predefinito è 0.

'{"IgnoreHeaderRows": 1}'

Rfc4180

Quando questo valore è impostato su true o y, le virgolette di apertura devono essere seguite dalle virgolette di chiusura. Questa formattazione è conforme a RFC 4180. Quando questo valore è impostato su false o n, i valori letterali stringa vengono copiati sulla destinazione così come sono. In questo caso, un delimitatore (riga o colonna) segnala la fine del campo. Pertanto, non è possibile utilizzare un delimitatore come parte della stringa, perché segnala la fine del valore.

Il valore predefinito è true.

Valori validi: true, false, y, n

'{"Rfc4180": false}'

Tipi di dati di origine per Amazon S3

Migrazione dei dati che utilizza Amazon S3 come fonte per AWS DMS le esigenze di mappatura dei dati da Amazon S3 AWS DMS ai tipi di dati. Per ulteriori informazioni, consulta Definizione di tabelle esterne per Amazon S3 come origine per AWS DMS.

Per informazioni su come visualizzare il tipo di dati mappato nella destinazione, consulta la sezione relativa all'endpoint di destinazione che stai utilizzando.

Per ulteriori informazioni sui tipi di AWS DMS dati, consulta. Tipi di dati per AWS Database Migration Service

I seguenti tipi di AWS DMS dati vengono utilizzati con Amazon S3 come fonte:

Utilizzo di file in formato Parquet in Amazon S3 come origine per AWS DMS

Nella AWS DMS versione 3.5.3 e successive, è possibile utilizzare i file in formato Parquet in un bucket S3 come origine per la replica Full-Load o CDC.

DMS supporta solo i file in formato Parquet come origine generata da DMS migrando i dati su un endpoint di destinazione S3. I nomi dei file devono essere nel formato supportato, altrimenti DMS non li includerà nella migrazione.

Per i file di dati di origine in formato Parquet, devono trovarsi nella seguente cartella e convenzione di denominazione.

schema/table1/LOAD00001.parquet schema/table2/LOAD00002.parquet schema/table2/LOAD00003.parquet

Per i file di dati di origine per i dati CDC in formato Parquet, denominateli e memorizzateli utilizzando la seguente convenzione di cartella e denominazione.

schema/table/20230405-094615814.parquet schema/table/20230405-094615853.parquet schema/table/20230405-094615922.parquet

Per accedere ai file in formato Parquet, imposta le seguenti impostazioni dell'endpoint:

  • Imposta DataFormat su Parquet.

  • Non impostate l'cdcPathimpostazione. Assicuratevi di creare i file in formato Parquet nelle cartelle schema/tabella specificate.

Per ulteriori informazioni sulle impostazioni per gli endpoint S3, consulta S3Settings nell'API Reference.AWS Database Migration Service

Tipi di dati supportati per i file in formato Parquet

AWS DMS supporta i seguenti tipi di dati di origine e destinazione durante la migrazione di dati da file in formato Parquet. Assicurati che la tabella di destinazione contenga colonne con i tipi di dati corretti prima della migrazione.

Tipo di dati origine Tipo di dati di destinazione
BYTE BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL