Environnement
Campaign Classic v8
Problème/Symptômes
Si quelqu’un souhaite récupérer les données d’une base de données externe Google Big Query, mais que le tableau contient une colonne de chaîne pour laquelle certaines valeurs dépassent 255 caractères, cet article peut les aider. Pour cela, ils utilisent l’activité Systèmes de gestion de base de données relationnelle (SGBD) et par défaut la taille du champ de chaîne est de 255 caractères maximum, mais si elle dépasse cette valeur, cela provoque une erreur SQL (Structured Query Language) :
"PGS-220000 PostgreSQL error: ERROR: value too long for type character varying(255) CONTEXT: COPY wkf124720_17_1, line 1, column scol: "aaaaaaaaaaaaaaa...."
Lorsque nous tentons de modifier la longueur du champ directement dans le code XML (Extensible Markup Language) du workflow (manuellement ou via le code JS), mais cette activité ne permet pas de modifier le schéma ni de gérer les champs de chaîne d’une longueur supérieure à 255.
Étapes:
Créez un workflow et utilisez le chargement des données d’activité (SGBD) pour récupérer à partir d’une base de données externe Google Big Query les valeurs d’une colonne de chaîne qui dépasse 255 caractères.
La taille par défaut du champ de chaîne ne peut excéder 255 caractères pour l'activité SGBDR et supérieure à cette valeur entraîne une erreur SQL.
Par défaut, la longueur maximale d’un champ de chaîne dans Adobe Campaign est de 255, c’est-à-dire par conception du produit : vous trouverez les bonnes pratiques et des informations supplémentaires dans la section Choix des types de données dans la documentation de Campaign Classic v7. En outre, voici un lien avec des options utiles pour trouver une solution (si un problème survient au moment de l'enrichissement) : Adobe Campaign Classic v7 et Campaign v8 : Contrôle de la longueur des champs du tableau WKF.
Si le problème provient de la première zone SGBDR, vous pouvez procéder comme suit :
Ajoutez une boîte SQL avec ce code avant la boîte SGBDR :
CREATE OR REPLACE FUNCTION trg_create_table_func()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
rec record;
BEGIN
FOR rec IN
SELECT table_name
FROM information_schema.columns
WHERE Lower(table_name) like 'wkf' || `<` %= instance.id %`>` || '_%' AND Lower(column_name)='sproducturl'
LOOP
EXECUTE format('ALTER TABLE IF EXISTS ONLY %I ALTER COLUMN sProductUrl TYPE VARCHAR(2000);', rec.table_name);
EXECUTE format('ALTER TABLE IF EXISTS ONLY %I ALTER COLUMN sDesignation TYPE VARCHAR(2000);', rec.table_name);
EXECUTE format('ALTER TABLE IF EXISTS ONLY %I ALTER COLUMN sUrlImage158 TYPE VARCHAR(2000);', rec.table_name);
EXECUTE format('ALTER TABLE IF EXISTS ONLY %I ALTER COLUMN sUrlImage358 TYPE VARCHAR(2000);', rec.table_name);
EXECUTE format('ALTER TABLE IF EXISTS ONLY %I ALTER COLUMN sUrlImage528 TYPE VARCHAR(2000);', rec.table_name);
END LOOP;
END
$$;
DROP EVENT TRIGGER IF EXISTS trg_create_table;
CREATE EVENT TRIGGER trg_create_table ON ddl_command_end
WHEN TAG IN ('CREATE TABLE')
EXECUTE PROCEDURE trg_create_table_func();
Cela permet de créer un déclencheur sur le "create table"
qui déclenchera une fonction permettant d’augmenter la longueur des colonnes souhaitées à 2 000 pour les tables wkfXXX du workflow.
Après la zone SGBDR, ajoutez une autre zone SQL pour déposer le déclencheur :
DROP EVENT TRIGGER IF EXISTS trg_create_table;