Configura transferencias incrementales para Snowflake
En esta guía, se muestra cómo configurar transferencias de datos incrementales de Snowflake a BigQuery. Las transferencias incrementales te permiten transferir solo los datos que cambiaron desde la última ejecución de la transferencia, lo que puede reducir el tiempo y los costos de transferencia.
Limitaciones de la transferencia incremental
Las transferencias incrementales de Snowflake están sujetas a las siguientes limitaciones:
- Debes proporcionar columnas de clave primaria para usar el modo de escritura upsert. Para obtener más información, consulta Cómo definir claves primarias para transferencias incrementales.
- Las claves primarias deben ser únicas en la tabla de origen. Si existen duplicados, los resultados de la operación de combinación en BigQuery podrían ser incoherentes y no coincidir con los datos de origen.
- No se admite el manejo automático de los cambios de esquema con transferencias incrementales. Si cambia el esquema de una tabla de origen, debes actualizar manualmente el esquema de la tabla de BigQuery.
- Las transferencias incrementales funcionan mejor cuando los cambios en tus datos de origen se concentran en una pequeña cantidad de particiones. El rendimiento de la transferencia incremental puede disminuir significativamente si las actualizaciones se dispersan por toda la tabla de origen, ya que esto requiere analizar muchas particiones. Si tienes muchas filas que se modifican entre las transferencias de datos, te recomendamos que uses una transferencia completa.
- Algunas operaciones en Snowflake, como
CREATE OR REPLACE TABLEoCLONE, pueden anular el objeto de tabla original y su historial de seguimiento de cambios asociado. Esto hace que las transferencias de datos existentes queden obsoletas y requiere una nueva sincronización completa para reanudar las transferencias incrementales. - Las transferencias incrementales deben ejecutarse con la frecuencia suficiente para permanecer dentro del período de retención de datos de Snowflake para el seguimiento de cambios. Si la última transferencia correcta se ejecutó fuera de este período, la siguiente será una transferencia completa.
Comportamiento de la transferencia de datos
Para especificar cómo se cargan los datos en BigQuery, selecciona la preferencia de escritura Completa o Incremental en la configuración de transferencia cuando configures una transferencia de Snowflake. Las transferencias incrementales son compatibles con la versión preliminar.
Puedes configurar una transferencia de datos completa para transferir todos los datos de tus conjuntos de datos de Snowflake con cada transferencia de datos.Como alternativa, puedes configurar una transferencia de datos incremental (versión preliminar) para transferir solo los datos que se modificaron desde la última transferencia de datos, en lugar de cargar el conjunto de datos completo con cada transferencia de datos. Si seleccionas Incremental para tu transferencia de datos, debes especificar los modos de escritura Append o Upsert para definir cómo se escriben los datos en BigQuery durante una transferencia de datos incremental. En las siguientes secciones, se describen los modos de escritura disponibles.
Modo de escritura de anexión
El modo de escritura de anexar solo inserta filas nuevas en tu tabla de destino. Esta opción agrega estrictamente los datos transferidos sin verificar si existen registros, por lo que este modo puede causar duplicación de datos en la tabla de destino.
Cuando seleccionas el modo de anexar, debes seleccionar una columna de marca de agua. Se requiere una columna de marca de agua para que el conector de Snowflake haga un seguimiento de los cambios en la tabla fuente.
En el caso de las transferencias de Snowflake, te recomendamos que selecciones una columna que solo se actualice cuando se cree el registro y que no cambie con las actualizaciones posteriores. Por ejemplo, la columnaCREATED_AT.
Modo de escritura Upsert
El modo de escritura upsert actualiza una fila o inserta una nueva en la tabla de destino verificando si hay una clave primaria. Puedes especificar una clave primaria para permitir que el conector de Snowflake determine qué cambios son necesarios para mantener tu tabla de destino actualizada con tu tabla de origen. Si la clave primaria especificada está presente en la tabla de BigQuery de destino durante una transferencia de datos, el conector de Snowflake actualiza esa fila con datos nuevos de la tabla de origen. Si no hay una clave primaria durante una transferencia de datos, el conector de Snowflake inserta una fila nueva.
Cuando seleccionas el modo de upsert, debes seleccionar una columna de marca de agua y una clave primaria:
- Se requiere una columna de marca de agua para que el conector de Snowflake haga un seguimiento de los cambios en la tabla de origen.
- Selecciona una columna de marca de agua que se actualice cada vez que se modifique una fila. Te recomendamos que utilices columnas similares a las columnas
UPDATED_AToLAST_MODIFIED.
- Selecciona una columna de marca de agua que se actualice cada vez que se modifique una fila. Te recomendamos que utilices columnas similares a las columnas
La clave primaria puede ser una o más columnas de la tabla que son necesarias para que el conector de Snowflake determine si necesita insertar o actualizar una fila.
Selecciona las columnas que contengan valores no nulos que sean únicos en todas las filas de la tabla. Te recomendamos que incluyas columnas que contengan identificadores generados por el sistema, códigos de referencia únicos (por ejemplo, IDs de incremento automático) o IDs de secuencia inmutables basados en el tiempo.
Para evitar la posible pérdida o corrupción de datos, las columnas de clave primaria que selecciones deben tener valores únicos. Si tienes dudas sobre la singularidad de la columna de clave primaria que elegiste, te recomendamos que uses el modo de escritura de anexar.
Para usar el modo de escritura upsert con tu transferencia de datos incremental, debes definir claves primarias en tu archivo de esquema personalizado.
Comportamiento de la transferencia incremental
Cuando realizas cambios en el esquema de la tabla en tu fuente de datos, las transferencias de datos incrementales de esas tablas se reflejan en BigQuery de las siguientes maneras:
| Cambios en la fuente de datos | Comportamiento de la transferencia incremental |
|---|---|
| Cómo agregar una columna nueva | Se agrega una columna nueva a la tabla de BigQuery de destino. Todos los registros anteriores de esta columna tendrán valores nulos. |
| Borrar una columna | La columna borrada permanece en la tabla de BigQuery de destino. Las entradas nuevas en esta columna borrada se propagan con valores nulos. |
| Cómo cambiar el tipo de datos en una columna | El conector solo admite
conversiones de tipos de datos que admite la declaración DDL ALTER COLUMN.
Cualquier otra conversión de tipo de datos provocará un error en la transferencia de datos.
Si tienes algún problema, te recomendamos que crees una nueva configuración de transferencia. |
| Cambiar el nombre de una columna | La columna original permanece en la tabla de BigQuery de destino tal como está, mientras que se agrega una columna nueva a la tabla de destino con el nombre actualizado. |
Archivo de esquema personalizado para transferencias incrementales
Puedes usar un archivo de esquema personalizado para definir claves principales para transferencias incrementales y personalizar la asignación de esquemas. Un archivo de esquema personalizado es un archivo JSON que describe el esquema de origen y destino.
Para las transferencias incrementales en el modo Upsert, debes identificar una o más columnas como claves primarias. Para ello, anota las columnas con el tipo de uso PRIMARY_KEY en el archivo de esquema personalizado.
En el siguiente ejemplo, se muestra un archivo de esquema personalizado que define O_ORDERKEY y O_ORDERDATE como claves principales para la tabla orders:
{
"databases": [
{
"name": "my_db",
"originalName": "my_db",
"tables": [
{
"name": "orders",
"originalName": "orders",
"columns": [
{
"name": "O_ORDERKEY",
"originalName": "O_ORDERKEY",
"usageType": [
"PRIMARY_KEY"
]
},
{
"name": "O_ORDERDATE",
"originalName": "O_ORDERDATE",
"usageType": [
"PRIMARY_KEY"
]
}
]
}
]
}
]
}
Habilita el seguimiento de cambios
Antes de configurar una transferencia incremental de Snowflake, debes habilitar el seguimiento de cambios en cada tabla de origen con el siguiente comando:
ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;
Si el seguimiento de cambios no está habilitado para una tabla, el conector de Snowflake se establece de forma predeterminada en una transferencia de datos completa para esa tabla.
¿Qué sigue?
Una vez que hayas configurado todos los pasos necesarios para una transferencia incremental de Snowflake, puedes habilitar las transferencias incrementales para tu configuración de transferencia de Snowflake. Para obtener más información, consulta Cómo configurar una transferencia de Snowflake.