Snowflake (Sincronización de datos)
Prisma Campaigns puede integrarse con Snowflake para que las instituciones financieras que mantienen sus datos centrales en un data warehouse de Snowflake puedan sincronizarlos directamente, sin necesidad de desplegar un agente, una capa de middleware ni un servidor SFTP.
Descripción general
Dos procedimientos almacenados de Snowpark Python invocan el API REST de DataSync de Prisma Campaigns: SEND_TO_PRISMA envía una tabla de Snowflake hacia un data sync de importación, y GET_FROM_PRISMA descarga la última exportación hacia una tabla de Snowflake. Usted configura el lado de Snowflake; su representante de Prisma Campaigns configura el esquema de clientes y los mapeos de columnas, y luego le entrega el ID de data sync y el API token que cada procedimiento necesita.
Complete los pasos siguientes con su equipo de Snowflake / ingeniería de datos. En paralelo, coordine con su representante de Prisma Campaigns para que los data syncs y las credenciales estén listos antes de probar los procedimientos.
Configurar el acceso de red en Snowflake
Snowflake bloquea todo el acceso de red externo de forma predeterminada, por lo que los procedimientos almacenados no podrán comunicarse con Prisma Campaigns hasta que usted cree una regla de red y una integración de acceso externo. Esto requiere el rol ACCOUNTADMIN (o un rol al que se le haya otorgado CREATE INTEGRATION).
-
Cree una regla de red que permita el tráfico de salida hacia su instancia de Prisma Campaigns, reemplazando el dominio a continuación por el suyo. Puede incluir más de un host, por ejemplo un sandbox y una instancia de producción:
USE ROLE ACCOUNTADMIN; CREATE OR REPLACE NETWORK RULE PRISMACUSTOMERS.PUBLIC.PRISMA_NETWORK_RULE MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('yourinstitution.prismacampaigns.com:443'); -
Cree una integración de acceso externo llamada
HTTP_EXT_INT. Ambos procedimientos almacenados hacen referencia a este nombre exacto en su cláusulaEXTERNAL_ACCESS_INTEGRATIONS, por lo que si utiliza un nombre distinto deberá actualizar la definición de los procedimientos en consecuencia:CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION HTTP_EXT_INT ALLOWED_NETWORK_RULES = (PRISMACUSTOMERS.PUBLIC.PRISMA_NETWORK_RULE) ENABLED = TRUE; GRANT USAGE ON INTEGRATION HTTP_EXT_INT TO ROLE DATA_ENGINEER;
Crear los procedimientos almacenados
-
Otorgue al rol que realizará el despliegue el permiso para crear procedimientos en la base de datos y el esquema de destino. Los ejemplos de esta guía utilizan
PRISMACUSTOMERS.PUBLIC:GRANT USAGE ON DATABASE PRISMACUSTOMERS TO ROLE DATA_ENGINEER; GRANT USAGE, CREATE PROCEDURE ON SCHEMA PRISMACUSTOMERS.PUBLIC TO ROLE DATA_ENGINEER; -
Antes de crear los procedimientos, confirme que su cuenta haya aceptado los términos de Anaconda en Admin → Billing & Terms → Anaconda. Los procedimientos se ejecutan sobre Python 3.9 con los paquetes
snowflake-snowpark-python,requestsypandasdel canal de Anaconda de Snowflake. -
Solicite a su representante de Prisma Campaigns las sentencias
CREATE OR REPLACE PROCEDUREdeSEND_TO_PRISMAyGET_FROM_PRISMA, y ejecútelas sobre esa base de datos y ese esquema. -
Otorgue permiso de ejecución al rol que utilizará la sincronización:
GRANT USAGE ON PROCEDURE PRISMACUSTOMERS.PUBLIC.SEND_TO_PRISMA( VARCHAR, VARCHAR, NUMBER, VARCHAR, VARCHAR, VARCHAR) TO ROLE MARKETING_OPS; GRANT USAGE ON PROCEDURE PRISMACUSTOMERS.PUBLIC.GET_FROM_PRISMA( VARCHAR, VARCHAR, NUMBER, VARCHAR, VARCHAR, VARCHAR) TO ROLE MARKETING_OPS;
Tenga en cuenta lo siguiente al otorgar los accesos:
- Ambos procedimientos se ejecutan con
EXECUTE AS OWNER, por lo que el rol propietario necesitaSELECTsobre cualquier tabla que se pase aSEND_TO_PRISMA, yCREATE TABLE/INSERTsobre el esquema en el que escribeGET_FROM_PRISMA. Quienes invocan el procedimiento solo necesitanUSAGEsobre el procedimiento en sí. - Quien invoque el procedimiento también necesita
USAGEsobre un warehouse activo. La serialización a CSV ocurre dentro del sandbox de Python, por lo que un warehouse XS es suficiente para archivos de tamaño típico.
Los procedimientos de referencia reciben el API token como un argumento en texto plano, por lo que puede quedar visible en el historial de consultas. Para un entorno de producción, almacene el token como un
SECRETde Snowflake o encapsule las llamadas en procedimientos por data sync que incluyan las credenciales, otorgando acceso únicamente a esos procedimientos. Como mínimo, restrinja quién puede ver el historial de consultas de los roles que ejecutan estas llamadas.
Preparar las tablas de staging
Prisma espera una tabla a nivel de cliente o miembro con los datos de perfil y las señales (flags) y, si además sincroniza productos, una tabla independiente a nivel de cuenta. Dado que SEND_TO_PRISMA serializa los datos con pandas.to_csv (delimitado por comas, con fila de encabezado, sin índice), construya sus vistas de staging con estas reglas:
- Nombre las columnas igual que los campos de Prisma (por ejemplo,
MemberNumber,FirstName), o solicite a su representante de Prisma que las mapee explícitamente. - Incluya primero el identificador único del cliente o miembro (
MemberNumbero equivalente) en todos los archivos. - Convierta las fechas a cadenas
YYYY-MM-DD, por ejemploTO_VARCHAR(dob, 'YYYY-MM-DD'). Evite columnasDATE/TIMESTAMPsin convertir. - Utilice
1/0para las señales (flags), noTRUE/FALSE. - Elimine las barras verticales (
|) de los campos de texto de la tabla de cuentas:REPLACE(descr, '|', '/'). - Trate los
NULLcon cuidado — se serializan como cadenas vacías, lo cual es aceptable para campos recomendados, pero no para los obligatorios. - Mantenga los archivos dentro de los límites de importación de Prisma (se recomiendan 100 MB y 100.000 filas como máximo). Particione las bases más grandes y cargue los datos en lotes.
Tabla de clientes o miembros
Cree una vista con una fila por cliente o miembro:
CREATE OR REPLACE VIEW MEMBERS_STAGING AS
SELECT
member_number AS "MemberNumber", -- obligatorio, clave única
first_name AS "FirstName",
last_name AS "LastName",
email AS "Email",
cell_phone AS "CellPhone",
TO_VARCHAR(date_of_birth,'YYYY-MM-DD') AS "DateOfBirth",
city AS "City",
state AS "State",
zip AS "Zip",
TO_VARCHAR(membership_open_dt,'YYYY-MM-DD') AS "MembershipOpenDate",
IFF(dormant, 1, 0) AS "DormantFlag",
IFF(deceased, 1, 0) AS "DeceasedFlag",
IFF(opt_out, 1, 0) AS "OptOutFlag",
IFF(has_checking, 1, 0) AS "Has_Checking",
IFF(has_savings, 1, 0) AS "Has_Savings",
IFF(has_auto_loan, 1, 0) AS "Has_AutoLoan",
IFF(has_credit_card, 1, 0) AS "CreditCardFlag"
FROM core_member_extract;
Incluya siempre los campos de supresión, como OptOutFlag y DeceasedFlag: son los que determinan las exclusiones de campañas.
Tabla de cuentas / productos
Mantenga los productos en una tabla independiente a nivel de cuenta. Prisma ensambla el compuesto AcctInfo durante la importación, por lo que debe enviar columnas individuales en lugar de una cadena delimitada por barras verticales ya armada. Coloque MemberNumber primero como clave del registro:
CREATE OR REPLACE VIEW MEMBER_ACCOUNTS_STAGING AS
SELECT
member_number AS "MemberNumber", -- clave del registro
account_id AS "AccountID", -- obligatorio
account_code AS "AccountCode", -- obligatorio
REPLACE(account_descr, '|', '/') AS "AccountDescription",
account_group AS "AccountGroup", -- LOAN/DEPOSIT/CARD
TO_VARCHAR(current_balance, 'FM999999999.00') AS "CurrentBalance", -- obligatorio
TO_VARCHAR(current_rate, 'FM990.00') AS "CurrentRate",
TO_VARCHAR(payment_due_dt, 'YYYY-MM-DD') AS "PaymentDueDate",
delinquency_days AS "DelinquencyDays",
TO_VARCHAR(account_open_dt, 'YYYY-MM-DD') AS "AccountOpenDate", -- obligatorio
IFF(account_closed, 1, 0) AS "AccountClosedFlag",
TO_VARCHAR(maturity_dt, 'YYYY-MM-DD') AS "MaturityDate",
TO_VARCHAR(last_txn_dt, 'YYYY-MM-DD') AS "LastTransactionDate"
FROM core_account_extract
WHERE account_closed = FALSE OR account_closed_dt >= DATEADD(month, -13, CURRENT_DATE);
- Cargue la tabla de clientes o miembros y la tabla de cuentas mediante dos data syncs de importación independientes. Ambas utilizan
MemberNumbercomo clave y se combinan en el mismo registro. - Elimine o reemplace las barras verticales en cualquier campo de texto de cuentas antes de la carga.
- Coordine el orden de las columnas y los campos obligatorios con su representante de Prisma para que el mapeo de importación coincida con su vista.
Tabla de destino para exportaciones
GET_FROM_PRISMA crea la tabla de destino en la primera ejecución si todavía no existe, e infiere los tipos de columna a partir del CSV. Revise esos tipos antes de utilizar la tabla en procesos posteriores. Dado que el procedimiento agrega filas en cada llamada, trunque primero el destino o cargue los datos en una tabla sin procesar y combínelos (MERGE) en una tabla curada, utilizando como clave natural, por ejemplo, MemberNumber junto con la campaña y la marca de tiempo del evento.
Obtenga sus credenciales de DataSync
Una vez que sus vistas de staging estén listas:
- Envíe a su representante de Prisma Campaigns un archivo de muestra pequeño (10 filas o menos, y menos de 1 MB) para la tabla de clientes o miembros y, si corresponde, para la tabla de cuentas.
- Espere a que configure los data syncs (con la frecuencia establecida en Manual, dado que la propia carga vía API encola el procesamiento) y le envíe, a través de un canal seguro (nunca por correo electrónico en texto plano ni en un documento compartido):
- Su dominio de Prisma Campaigns, por ejemplo
yourinstitution.prismacampaigns.com. - Un par de ID de data sync y API token para cada data sync (importación de clientes o miembros, importación de cuentas y exportación, si corresponde).
- Su dominio de Prisma Campaigns, por ejemplo
- Almacene los tokens según lo descrito en Crear los procedimientos almacenados.
Los tokens se generan por cada data sync, por lo que revocar uno no afecta a los demás.
Probar los procedimientos
Con los ID de data sync y los tokens en mano, invoque los procedimientos almacenados desde un worksheet:
-- Enviar una tabla de Snowflake a un data sync de importación de Prisma
CALL SEND_TO_PRISMA(
'MEMBERS_STAGING', -- tabla de origen
'yourinstitution.prismacampaigns.com', -- dominio de Prisma
443, -- puerto
'6908f6f8-8bd0-4b95-9e36-7667d0b21ea6', -- ID de data sync (provisto por Prisma)
'api', -- usuario (siempre "api")
'key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -- API token del data sync (provisto por Prisma)
);
-- Descargar el archivo más reciente de un data sync de exportación de Prisma
CALL GET_FROM_PRISMA(
'PRISMA_CAMPAIGN_RESULTS', -- tabla de destino (se crea si no existe)
'yourinstitution.prismacampaigns.com',
443,
'6908f8e9-6843-427a-b33c-109087880239',
'api',
'key-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
);
Tenga en cuenta el siguiente comportamiento:
SEND_TO_PRISMAenvía la tabla completa (SELECT *), por lo que su tabla o vista de staging debe contener exactamente las columnas y filas que Prisma debe recibir.- Una carga exitosa devuelve
File queued; el archivo se procesa de forma asíncrona. Confirme que la ejecución finalizó con los APIs de estado descritos en Sincronización de datos (data syncs). GET_FROM_PRISMAagrega filas en cada llamada. Para obtener una instantánea limpia, trunque la tabla de destino primero, o cargue los datos en una tabla de staging y combínelos.GET_FROM_PRISMAsiempre devuelve el archivo de la última ejecución exitosa del data sync de exportación. Si lo invoca dos veces sin que haya una nueva ejecución entre ambas llamadas, importará las mismas filas dos veces.
Programar la sincronización
Una vez que una llamada manual funcione como se espera, encapsúlela en una Task de Snowflake:
CREATE OR REPLACE TASK NIGHTLY_MEMBER_SYNC
WAREHOUSE = XS_WH
SCHEDULE = 'USING CRON 0 5 * * * America/New_York'
AS
CALL SEND_TO_PRISMA('MEMBERS_STAGING', 'yourinstitution.prismacampaigns.com',
443, '<datasync-id>', 'api', '<token>');
ALTER TASK NIGHTLY_MEMBER_SYNC RESUME;
Debido a que las importaciones se encolan de forma asíncrona, verifique cada ejecución con los APIs de estado del data sync (misma autenticación Basic Auth). Consulte Sincronización de datos (data syncs) para los endpoints de estado, historial de ejecuciones y descarga.
Resultado esperado
Antes de habilitar las tasks programadas, confirme lo siguiente junto con su representante de Prisma Campaigns:
- Una carga de muestra pequeña mediante
SEND_TO_PRISMAhacia el data sync de importación de clientes o miembros devuelveFile queued, y el estado de la ejecución llega afinished. - Un cliente o miembro de muestra en Prisma Campaigns muestra los campos de perfil, las señales (flags) y el formato de fechas esperados.
- Si sincroniza cuentas, una muestra pequeña de cuentas se carga correctamente y las condiciones de segmento que dependen de productos o saldos se resuelven como se espera.
- Si configuró una exportación,
GET_FROM_PRISMAcompleta la tabla de destino con las columnas y tipos esperados. - Una vez que todo funcione correctamente, habilite las tasks programadas de Snowflake.
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
El procedimiento no compila y hace referencia a HTTP_EXT_INT |
Falta la integración de acceso externo o no se otorgó su uso | Cree la integración y otorgue USAGE al rol propietario |
requests.exceptions.ConnectionError en tiempo de ejecución |
La regla de red no incluye el host y puerto de Prisma | Agregue el host al VALUE_LIST de la regla de red |
| HTTP 403 de Prisma | Token incorrecto, o token de un data sync distinto | Los tokens son por data sync: verifique el par de ID y token |
| HTTP 404 de Prisma | DATASYNC_ID incorrecto o dominio incorrecto |
Confirme el ID con su representante de Prisma |
| La carga se completa pero los datos nunca aparecen | El archivo se encoló pero la ejecución falló | Revise el status-message de la ejecución mediante los APIs de estado y compártalo con su representante de Prisma (a menudo una discrepancia de encabezados contra el mapeo de columnas) |
| Filas duplicadas en la tabla de destino de exportación | GET_FROM_PRISMA agrega filas y la exportación no se volvió a ejecutar |
Utilice el patrón de truncar/combinar y verifique las marcas de tiempo de las ejecuciones antes de importar |
| Las fechas llegan como marcas de tiempo completas | Columnas DATE / TIMESTAMP sin convertir, serializadas por pandas |
Convierta a TO_VARCHAR(..., 'YYYY-MM-DD') en la vista de staging |
Si las condiciones de segmento sobre productos o cuentas lucen incorrectas después de una importación exitosa, contacte a su representante de Prisma con una muestra de los encabezados y filas cargados: el mapeo y el ensamblado del campo compuesto se configuran del lado de Prisma.
Artículos relacionados
- Sincronización de datos (data syncs)
- Uso de API keys
- Subir datos a Prisma
- Cargar información de clientes desde un archivo .csv
¿Este artículo fue útil?
En esta página