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.
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:
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.
Após a caixa RDBMS, adicione outra Caixa SQL para soltar o acionador:
DROP EVENT TRIGGER IF EXISTS trg_create_table;