Recuperar dados do banco de dados externo, onde os valores excedem 255 caracteres

Descrição

Ambiente
Campaign Classic v8

Problema/Sintomas
Se alguém quiser recuperar os dados de um banco de dados Google Big Query externo, mas a tabela contiver uma coluna de string na qual alguns valores excedem 255 caracteres, esse artigo poderá ajudá-los. Para isso, eles usam a atividade Relational Database Management Systems (RDBMS) e, por padrão, o tamanho do campo de cadeia de caracteres é máximo de 255 caracteres, mas se ele exceder, isso causará um erro de Linguagem de Consulta Estruturada (SQL):

"PGS-220000 PostgreSQL error: ERROR: value too long for type character varying(255) CONTEXT: COPY wkf124720_17_1, line 1, column scol: "aaaaaaaaaaaaaaa...."

Quando tentamos alterar o comprimento do campo diretamente no código da Linguagem de marcação extensível (XML) do fluxo de trabalho (manualmente ou por meio do código JS), mas essa atividade não permite editar o esquema e gerenciar campos de cadeia de caracteres com comprimento maior que 255.

Etapas:

Crie um workflow e use o carregamento de dados da atividade (RDBMS) para recuperar de um banco de dados externo do Google Big Query de uma coluna de string que excede 255 caracteres.

A atividade RDBMS tem o tamanho padrão do campo de cadeia de caracteres com no máximo 255 caracteres e é maior do que isso causa um erro SQL.

Resolução

Por padrão, o comprimento máximo de um campo de string no Adobe Campaign é de 255, isso ocorre por design do produto: você encontrará quais são as práticas recomendadas e mais detalhes em Escolha dos tipos de dados na Documentação do Campaign Classic v7. Além disso, aqui está um link com opções úteis para encontrar uma solução (se o problema ocorrer no momento do enriquecimento): Adobe Campaign Classic v7 e Campaign v8: Controle do comprimento do campo da tabela WKF.

Se o problema surgir da primeira caixa RDBMS, siga estas etapas:

  1. Adicione uma Caixa SQL com este código antes da Caixa RDBMS:

    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();
    

    Isso permite criar um acionador na "create table" que acionará uma função permitindo aumentar o comprimento das colunas desejadas para 2000 para as tabelas wkfXXX do fluxo de trabalho.

  2. Após a caixa RDBMS, adicione outra Caixa SQL para soltar o acionador:

    DROP EVENT TRIGGER IF EXISTS trg_create_table;

Nesta página