Carica BLOB i file TEXT utilizzando la codifica dei file in SQL Aurora Postgre -Compatible - Prontuario AWS

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à.

Carica BLOB i file TEXT utilizzando la codifica dei file in SQL Aurora Postgre -Compatible

Creato da Bhanu Ganesh Gudivada () e Jeevan Shetty () AWS AWS

Ambiente: produzione

Fonte: database Oracle locale

Obiettivo: Aurora Postgre -Compatibile SQL

Tipo R: Re-architect

Carico di lavoro: Oracle; open source

Tecnologie: migrazione; database

AWSservizi: Amazon Aurora

Riepilogo

Spesso durante la migrazione, ci sono casi in cui è necessario elaborare dati strutturati e non strutturati caricati da file su un file system locale. I dati potrebbero anche essere in un set di caratteri diverso dal set di caratteri del database.

Questi file contengono i seguenti tipi di dati:

  • Metadati: questi dati descrivono la struttura del file.

  • Dati semistrutturati: si tratta di stringhe di testo in un formato specifico, ad esempio o. JSON XML Potresti essere in grado di fare affermazioni su tali dati, ad esempio «inizierà sempre con '<'" o «non contiene caratteri di nuova riga».

  • Testo completo: questi dati in genere contengono tutti i tipi di caratteri, inclusi i caratteri di nuova riga e le virgolette. Potrebbe anche essere composto da caratteri multibyte in -8. UTF

  • Dati binari: questi dati possono contenere byte o combinazioni di byte, inclusi valori nulli e marcatori. end-of-file

Caricare una combinazione di questi tipi di dati può essere difficile.

Il modello può essere utilizzato con database Oracle locali, database Oracle che si trovano su istanze Amazon Elastic Compute Cloud (AmazonEC2) su Amazon Web Services (AWS) Cloud e Amazon Relational Database Service (RDSAmazon) per database Oracle. Ad esempio, questo modello utilizza Amazon Aurora SQL Postgre -Compatible Edition.

In Oracle Database, con l'aiuto di un puntatore BFILE (file binario), del DBMS_LOB pacchetto e delle funzioni di sistema Oracle, puoi caricare dal file e convertirlo con la codifica dei caratteri. CLOB Poiché Postgre SQL non supporta il tipo di BLOB dati durante la migrazione a un database Amazon Aurora Postgre SQL -Compatible Edition, queste funzioni devono essere convertite in script compatibili con Postgre. SQL

Questo modello fornisce due approcci per caricare un file in una singola colonna di database in un database compatibile con Amazon Aurora SQL Postgre:

  • Approccio 1: importi i dati dal tuo bucket Amazon Simple Storage Service (Amazon S3) utilizzando table_import_from_s3 la funzione dell'estensione con l'opzione aws_s3 encode.

  • Approccio 2: si codifica in formato esadecimale all'esterno del database, quindi si decodifica per visualizzare all'interno del database. TEXT

Si consiglia di utilizzare Approach 1 perché Aurora Postgre SQL -Compatible ha un'integrazione diretta con l'estensione. aws_s3

Questo modello utilizza l'esempio del caricamento di un file flat contenente un modello di e-mail, con caratteri multibyte e una formattazione distinta, in un database compatibile con Amazon Aurora Postgre. SQL

Prerequisiti e limitazioni

Prerequisiti

  • Un account attivo AWS

  • Un'RDSistanza Amazon o un'istanza compatibile con Aurora SQL Postgre

  • Una conoscenza di base del sistema di gestione di SQL database relazionali () RDBMS

  • Un bucket Amazon Simple Storage Service (Amazon S3).

  • Conoscenza delle funzioni di sistema in Oracle e Postgre SQL

  • RPMPackage HexDump - XXD -0.1.1 (incluso con Amazon Linux 2)

    Nota: Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta Amazon Linux 2 FAQs.

Limitazioni

  • Per il tipo di TEXT dati, la stringa di caratteri più lunga possibile che può essere memorizzata è di circa 1 GB.

Versioni del prodotto

Architettura

Stack tecnologico Target

  • Aurora Postgre -Compatibile SQL

Architettura Target

Approccio 1: utilizzo di aws_s3.table_import_from_s3

Da un server locale, un file contenente un modello di e-mail con caratteri multibyte e formattazione personalizzata viene trasferito su Amazon S3. La funzione di database personalizzata fornita da questo modello utilizza la aws_s3.table_import_from_s3 funzione with file_encoding per caricare file nel database e restituire i risultati delle query come tipo di dati. TEXT

Processo in quattro fasi dal server locale all'TEXToutput del database Aurora.
  1. I file vengono trasferiti nel bucket S3 di staging.

  2. I file vengono caricati nel database compatibile con Amazon Aurora SQL Postgre.

  3. Utilizzando il pgAdmin client, la funzione personalizzata load_file_into_clob viene distribuita nel database Aurora.

  4. La funzione personalizzata utilizza table_import_from_s3 internamente file_encoding. L'output della funzione viene ottenuto utilizzando array_to_string e come output. array_agg TEXT

Approccio 2: codifica in formato esadecimale all'esterno del database e decodifica per la visualizzazione all'interno del database TEXT

Un file proveniente da un server locale o da un file system locale viene convertito in un dump esadecimale. Quindi il file viene importato in Postgre SQL come campo. TEXT

Processo in tre fasi utilizzando Hex dump.
  1. Converti il file in un dump esadecimale nella riga di comando utilizzando l'opzione. xxd -p

  2. Carica i file di dump esadecimali in Aurora SQL Postgre -Compatible utilizzando \copy l'opzione, quindi decodifica i file di dump esadecimali in formato binario.

  3. Codifica i dati binari per restituirli come. TEXT

Strumenti

AWSservizi

Altri strumenti

  • pgAdmin4 è una piattaforma di amministrazione e sviluppo open source per SQL Postgre. pgAdmin4 può essere utilizzato su Linux, Unix, mac OS e Windows per gestire Postgre. SQL 

Epiche

AttivitàDescrizioneCompetenze richieste

Avviare un'istanza EC2.

Per istruzioni sull'avvio di un'istanza, consulta Launch your istance.

DBA

Installa lo strumento client Postgre. SQL pgAdmin

Scaricare e installare pgAdmin.

DBA

Crea una politica. IAM

Crea una policy AWS Identity and Access Management (IAM) denominata aurora-s3-access-pol che garantisca l'accesso al bucket S3 in cui verranno archiviati i file. Usa il codice seguente, sostituendolo <bucket-name> con il nome del tuo bucket S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*", "arn:aws:s3:::<bucket-name>" ] } ] }
DBA

Crea un IAM ruolo per l'importazione di oggetti da Amazon S3 a Aurora Postgre -Compatible. SQL

Usa il codice seguente per creare un IAM ruolo denominato aurora-s3-import-role con la relazione di fiducia. AssumeRole AssumeRoleconsente ad Aurora di accedere ad altri AWS servizi per tuo conto.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow","Principal": { "Service": "rds.amazonaws.com" },"Action": "sts:AssumeRole" } ] }
DBA

Associa il IAM ruolo al cluster.

Per associare il IAM ruolo al cluster di database Aurora Postgre SQL -Compatible, esegui il comando seguente. AWS CLI Passa <Account-ID> all'ID dell'AWSaccount che ospita il database compatibile con Aurora SQL Postgre. Ciò consente al database SQL compatibile con Aurora Postgre di accedere al bucket S3.

aws rds add-role-to-db-cluster --db-cluster-identifier aurora-postgres-cl --feature-name s3Import --role-arn arn:aws:iam::<Account-ID>:role/aurora-s3-import-role
DBA

Carica l'esempio su Amazon S3.

  1. Nella sezione Informazioni aggiuntive di questo modello, copia il codice del modello di e-mail in un file denominatosalary.event.notification.email.vm.

  2. Carica il file nel bucket S3.

DBA, Proprietario dell'app

Implementa la funzione personalizzata.

  1. Dalla sezione Informazioni aggiuntive, copia il contenuto del load_file_into_clob SQL file di funzione personalizzato in una tabella temporanea.

  2. Accedi al database SQL compatibile con Aurora Postgre e distribuiscilo nello schema del database utilizzando il client. pgAdmin

Proprietario dell'app, DBA

Esegui la funzione personalizzata per importare i dati nel database.

Esegui il SQL comando seguente, sostituendo gli elementi tra parentesi angolari con i valori appropriati.

select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);

Sostituite gli elementi tra parentesi angolari con i valori appropriati, come illustrato nell'esempio seguente, prima di eseguire il comando.

Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);

Il comando carica il file da Amazon S3 e restituisce l'output come. TEXT

Proprietario dell'app, DBA
AttivitàDescrizioneCompetenze richieste

Converti il file modello in un dump esadecimale.

L'utilità Hexdump visualizza il contenuto dei file binari in formato esadecimale, decimale, ottale o. ASCII Il hexdump comando fa parte del pacchetto e viene preinstallato nelle distribuzioni Linuxutil-linux. Anche il RPM pacchetto Hexdump fa parte di Amazon Linux 2. (Nota: Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta Amazon Linux 2 FAQs.)

Per convertire il contenuto del file in un dump esadecimale, esegui il seguente comando shell.

xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex>

Sostituite il percorso e il file con i valori appropriati, come mostrato nell'esempio seguente.

xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex
DBA

Carica il file hexdump nello schema del database.

Usa i seguenti comandi per caricare il file hexdump nel database Aurora Postgre -Compatible. SQL

  1. Accedi al SQL database Aurora Postgre e crea una nuova tabella chiamata. email_template_hex

    CREATE TABLE email_template_hex(hex_data TEXT);
  2. Caricate i file dal file system locale nello schema DB utilizzando il seguente comando.

    \copy email_template_hex FROM '/path/file.hex';

    Sostituisci il percorso con la posizione sul file system locale.

    \copy email_template_hex FROM '/tmp/employee.salary.event.notification.email.vm.hex';
  3. Crea un'altra tabella chiamataemail_template_bytea.

    CREATE TABLE email_template_bytea(hex_data bytea);
  4. Inserisci i dati da email_template_hex inemail_template_bytea.

    INSERT INTO email_template_bytea (hex_data) (SELECT decode(hex_data, 'hex') FROM email_template_hex limit 1);
  5. Per restituire il codice bytea esadecimale come TEXT dati, esegui il comando seguente.

    SELECT encode(hex_data::bytea, 'escape') FROM email_template_bytea;
DBA

Risorse correlate

Riferimenti

Tutorial

Informazioni aggiuntive

funzione personalizzata load_file_into_clob

CREATE OR REPLACE FUNCTION load_file_into_clob( s3_bucket_name text, s3_bucket_region text, file_name text, file_delimiter character DEFAULT '&'::bpchar, file_encoding text DEFAULT 'UTF8'::text) RETURNS text LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ DECLARE blob_data BYTEA; clob_data TEXT; l_table_name CHARACTER VARYING(50) := 'file_upload_hex'; l_column_name CHARACTER VARYING(50) := 'template'; l_return_text TEXT; l_option_text CHARACTER VARYING(150); l_sql_stmt CHARACTER VARYING(500); BEGIN EXECUTE format ('CREATE TEMPORARY TABLE %I (%I text, id_serial serial)', l_table_name, l_column_name); l_sql_stmt := 'select ''(format text, delimiter ''''' || file_delimiter || ''''', encoding ''''' || file_encoding || ''''')'' '; EXECUTE FORMAT(l_sql_stmt) INTO l_option_text; EXECUTE FORMAT('SELECT aws_s3.table_import_from_s3($1,$2,$6, aws_commons.create_s3_uri($3,$4,$5))') INTO l_return_text USING l_table_name, l_column_name, s3_bucket_name, file_name,s3_bucket_region,l_option_text; EXECUTE format('select array_to_string(array_agg(%I order by id_serial),E''\n'') from %I', l_column_name, l_table_name) INTO clob_data; drop table file_upload_hex; RETURN clob_data; END; $BODY$;

Modello di email

###################################################################################### ## ## ## johndoe Template Type: email ## ## File: johndoe.salary.event.notification.email.vm ## ## Author: Aimée Étienne Date 1/10/2021 ## ## Purpose: Email template used by EmplmanagerEJB to inform a johndoe they ## ## have been given access to a salary event ## ## Template Attributes: ## ## invitedUser - PersonDetails object for the invited user ## ## salaryEvent - OfferDetails object for the event the user was given access ## ## buyercollege - CompDetails object for the college owning the salary event ## ## salaryCoordinator - PersonDetails of the salary coordinator for the event ## ## idp - Identity Provider of the email recipient ## ## httpWebRoot - HTTP address of the server ## ## ## ###################################################################################### $!invitedUser.firstname $!invitedUser.lastname, Ce courriel confirme que vous avez ete invite par $!salaryCoordinator.firstname $!salaryCoordinator.lastname de $buyercollege.collegeName a participer a l'evenement "$salaryEvent.offeringtitle" sur johndoeMaster Sourcing Intelligence. Votre nom d'utilisateur est $!invitedUser.username Veuillez suivre le lien ci-dessous pour acceder a l'evenement. ${httpWebRoot}/myDashboard.do?idp=$!{idp} Si vous avez oublie votre mot de passe, utilisez le lien "Mot de passe oublie" situe sur l'ecran de connexion et entrez votre nom d'utilisateur ci-dessus. Si vous avez des questions ou des preoccupations, nous vous invitons a communiquer avec le coordonnateur de l'evenement $!salaryCoordinator.firstname $!salaryCoordinator.lastname au ${salaryCoordinator.workphone}. ******* johndoeMaster Sourcing Intelligence est une plateforme de soumission en ligne pour les equipements, les materiaux et les services. Si vous avez des difficultes ou des questions, envoyez un courriel a support@johndoeMaster.com pour obtenir de l'aide.