Chargez BLOB des fichiers en TEXT utilisant le codage de fichiers dans Aurora Postgre -Compatible SQL - Recommandations AWS

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.

Chargez BLOB des fichiers en TEXT utilisant le codage de fichiers dans Aurora Postgre -Compatible SQL

Créé par Bhanu Ganesh Gudivada (AWS) et Jeevan Shetty () AWS

Environnement : Production

Source : base de données Oracle locale

Cible : compatible avec Aurora Postgre SQL

Type R : Ré-architecte

Charge de travail : Oracle ; logiciel libre

Technologies : migration ; bases de données

AWSservices : Amazon Aurora

Récapitulatif

Au cours de la migration, il arrive souvent que vous deviez traiter des données structurées et non structurées chargées à partir de fichiers sur un système de fichiers local. Les données peuvent également se trouver dans un jeu de caractères différent de celui de la base de données.

Ces fichiers contiennent les types de données suivants :

  • Métadonnées : ces données décrivent la structure du fichier.

  • Données semi-structurées : il s'agit de chaînes textuelles dans un format spécifique, tel que JSON ou. XML Vous pouvez peut-être faire des assertions à propos de ces données, par exemple « commencera toujours par « < » ou « ne contient aucun caractère de nouvelle ligne ».

  • Texte intégral — Ces données contiennent généralement tous les types de caractères, y compris les caractères de nouvelle ligne et les guillemets. Il peut également être composé de caractères multioctets en UTF -8.

  • Données binaires : ces données peuvent contenir des octets ou des combinaisons d'octets, y compris des valeurs nulles et des end-of-file marqueurs.

Le chargement d'une combinaison de ces types de données peut s'avérer difficile.

Le modèle peut être utilisé avec les bases de données Oracle sur site, les bases de données Oracle qui se trouvent sur des instances Amazon Elastic Compute Cloud (AmazonEC2) sur le cloud Amazon Web Services (AWS) et Amazon Relational Database Service (RDSAmazon) pour les bases de données Oracle. Par exemple, ce modèle utilise Amazon Aurora Postgre SQL -Compatible Edition.

Dans Oracle Database, à l'aide d'un pointeur BFILE (fichier binaire), du DBMS_LOB package et des fonctions du système Oracle, vous pouvez charger à partir d'un fichier et le convertir au format CLOB par codage de caractères. Postgre SQL ne prenant pas en charge le type de BLOB données lors de la migration vers une base de données Amazon Aurora Postgre SQL -Compatible Edition, ces fonctions doivent être converties en scripts compatibles avec Postgre. SQL

Ce modèle propose deux approches pour charger un fichier dans une seule colonne de base de données d'une base de données SQL compatible avec Amazon Aurora Postgre :

  • Approche 1 — Vous importez des données depuis votre compartiment Amazon Simple Storage Service (Amazon S3) en utilisant table_import_from_s3 la fonction de l'extension avec aws_s3 l'option d'encodage.

  • Approche 2 — Vous codez en hexadécimal à l'extérieur de la base de données, puis vous le décodez pour afficher à TEXT l'intérieur de la base de données.

Nous vous recommandons d'utiliser Approach 1 car Aurora Postgre SQL -Compatible est directement intégré à l'aws_s3extension.

Ce modèle utilise l'exemple du chargement d'un fichier plat contenant un modèle d'e-mail, comportant des caractères multioctets et un formatage distinct, dans une base de données SQL compatible avec Amazon Aurora Postgre.

Conditions préalables et limitations

Prérequis

  • Un AWS compte actif

  • Une RDS instance Amazon ou une instance compatible avec Aurora Postgre SQL

  • Compréhension de base du système SQL de gestion de base de données relationnelle () RDBMS

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

  • Connaissance des fonctions du système dans Oracle et Postgre SQL

  • RPMPackage HexDump - XXD -0.1.1 (inclus avec Amazon Linux 2)

    Remarque : le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez Amazon Linux 2 FAQs.

Limites

  • Pour le type de TEXT données, la plus longue chaîne de caractères pouvant être stockée est d'environ 1 Go.

Versions du produit

Architecture

Pile technologique cible

  • Compatible avec Aurora Postgre SQL

Architecture cible

Approche 1 — Utilisation de aws_s3.table_import_from_s3

À partir d'un serveur sur site, un fichier contenant un modèle d'e-mail avec des caractères multioctets et un formatage personnalisé est transféré vers Amazon S3. La fonction de base de données personnalisée fournie par ce modèle utilise la aws_s3.table_import_from_s3 fonction with file_encoding pour charger des fichiers dans la base de données et renvoyer les résultats de la requête sous forme de type de TEXT données.

Processus en quatre étapes depuis le serveur sur site jusqu'à la TEXT sortie de la base de données Aurora.
  1. Les fichiers sont transférés vers le compartiment S3 intermédiaire.

  2. Les fichiers sont chargés dans la base de données SQL compatible avec Amazon Aurora Postgre.

  3. À l'aide du pgAdmin client, la fonction personnalisée load_file_into_clob est déployée dans la base de données Aurora.

  4. La fonction personnalisée est utilisée en interne table_import_from_s3 avec file_encoding. La sortie de la fonction est obtenue en utilisant array_to_string et array_agg comme TEXT sortie.

Approche 2 — Encodage en hexadécimal à l'extérieur de la base de données et décodage pour affichage à TEXT l'intérieur de la base de données

Un fichier provenant d'un serveur local ou d'un système de fichiers local est converti en vidage hexadécimal. Le fichier est ensuite importé dans Postgre SQL sous forme de TEXT champ.

Processus en trois étapes utilisant le vidage hexadécimal.
  1. Convertissez le fichier en vidage hexadécimal dans la ligne de commande à l'aide de l'xxd -poption.

  2. Téléchargez les fichiers de vidage hexadécimal dans Aurora Postgre SQL -Compatible à l'aide de l'\copyoption, puis décodez les fichiers de vidage hexadécimal en binaire.

  3. Codez les données binaires à renvoyer sous la formeTEXT.

Outils

AWSservices

Autres outils

  • pgAdmin4 est une plateforme d'administration et de développement open source pour PostgreSQL. pgAdmin4 peut être utilisé sous Linux, Unix, Mac OS et Windows pour gérer SQL Postgre. 

Épopées

TâcheDescriptionCompétences requises

Lancez une instance EC2.

Pour obtenir des instructions sur le lancement d'une instance, consultez Lancer votre instance.

DBA

Installez l' pgAdmin outil SQL client Postgre.

Téléchargez et installez pgAdmin.

DBA

Créez une IAM politique.

Créez une politique AWS Identity and Access Management (IAM) nommée aurora-s3-access-pol qui accorde l'accès au compartiment S3 dans lequel les fichiers seront stockés. Utilisez le code suivant, en le <bucket-name> remplaçant par le nom de votre compartiment 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

Créez un IAM rôle pour l'importation d'objets depuis Amazon S3 vers Aurora Postgre SQL -Compatible.

Utilisez le code suivant pour créer un IAM rôle nommé aurora-s3-import-role avec la relation de AssumeRoleconfiance. AssumeRolepermet à Aurora d'accéder à d'autres AWS services en votre nom.

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

Associez le IAM rôle au cluster.

Pour associer le IAM rôle au cluster de base de données SQL compatible Aurora Postgre, exécutez la commande suivante AWSCLI. Modifiez <Account-ID> l'ID du AWS compte qui héberge la base de données SQL compatible Aurora Postgre. Cela permet à la base de données SQL compatible Aurora Postgre d'accéder au compartiment 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

Téléchargez l'exemple sur Amazon S3.

  1. Dans la section Informations supplémentaires de ce modèle, copiez le code du modèle d'e-mail dans un fichier nommésalary.event.notification.email.vm.

  2. Téléchargez le fichier vers le compartiment S3.

DBA, propriétaire de l'application

Déployez la fonction personnalisée.

  1. Dans la section Informations supplémentaires, copiez le contenu du load_file_into_clob SQL fichier de fonctions personnalisé dans un tableau temporaire.

  2. Connectez-vous à la base de données SQL compatible Aurora Postgre et déployez-la dans le schéma de base de données à l'aide du pgAdmin client.

Propriétaire de l'application, DBA

Exécutez la fonction personnalisée pour importer les données dans la base de données.

Exécutez la SQL commande suivante en remplaçant les éléments entre crochets par les valeurs appropriées.

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

Remplacez les éléments entre crochets par les valeurs appropriées, comme indiqué dans l'exemple suivant, avant d'exécuter la commande.

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

La commande charge le fichier depuis Amazon S3 et renvoie le résultat sous la formeTEXT.

Propriétaire de l'application, DBA
TâcheDescriptionCompétences requises

Convertissez le fichier modèle en un dump hexadécimal.

L'utilitaire Hexdump affiche le contenu des fichiers binaires en hexadécimal, décimal, octal ou. ASCII La hexdump commande fait partie du util-linux package et est préinstallée dans les distributions Linux. Le RPM package Hexdump fait également partie d'Amazon Linux 2. (Remarque : le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez Amazon Linux 2 FAQs.)

Pour convertir le contenu du fichier en un dump hexadécimal, exécutez la commande shell suivante.

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

Remplacez le chemin et le fichier par les valeurs appropriées, comme indiqué dans l'exemple suivant.

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

Chargez le fichier hexdump dans le schéma de base de données.

Utilisez les commandes suivantes pour charger le fichier hexdump dans la base de données compatible Aurora PostgreSQL.

  1. Connectez-vous à la base de SQL données Aurora Postgre et créez une nouvelle table appeléeemail_template_hex.

    CREATE TABLE email_template_hex(hex_data TEXT);
  2. Chargez les fichiers du système de fichiers local dans le schéma de base de données à l'aide de la commande suivante.

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

    Remplacez le chemin par son emplacement sur votre système de fichiers local.

    \copy email_template_hex FROM '/tmp/employee.salary.event.notification.email.vm.hex';
  3. Créez une autre table appeléeemail_template_bytea.

    CREATE TABLE email_template_bytea(hex_data bytea);
  4. Insérez les données de email_template_hex dansemail_template_bytea.

    INSERT INTO email_template_bytea (hex_data) (SELECT decode(hex_data, 'hex') FROM email_template_hex limit 1);
  5. Pour renvoyer du code hexadécimal sous forme de TEXT données, exécutez la commande suivante.

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

Ressources connexes

Références

Didacticiels

Informations supplémentaires

Fonction personnalisée 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$;

Modèle d'e-mail

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