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 transferencia, lo que puede reducir el tiempo y los costos de transferencia.
Limitaciones
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 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 los datos de origen se concentran en una pequeña cantidad de particiones. El rendimiento de la transferencia incremental puede degradarse significativamente si las actualizaciones se dispersan en la tabla de origen, ya que esto requiere analizar muchas particiones. Si tienes muchas filas que cambian entre las transferencias de datos, te recomendamos que uses una transferencia completa.
- Algunas operaciones en Snowflake, como
CREATE OR REPLACE TABLEoCLONE, pueden reemplazar 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 de el período de retención de datos de Snowflake para el seguimiento de cambios. Si la última transferencia exitosa se ejecuta fuera de esta ventana, la siguiente será una transferencia completa.
Configura transferencias incrementales
Para configurar transferencias incrementales, selecciona la preferencia de escritura Incremental en la configuración de transferencia cuando configures una transferencia de Snowflake.
Si seleccionas Incremental para tu transferencia de datos, puedes transferir datos con los modos de escritura Append o Upsert , que definen cómo se escriben los datos en BigQuery durante una transferencia de datos incremental. Para habilitar el modo de escritura Upsert, debes definir una clave primaria en un archivo de esquema personalizado. Si no se define una clave primaria, la transferencia se establece de forma predeterminada en el modo de escritura Append. En las siguientes secciones, se describen los modos de escritura disponibles.
Modo de escritura Append
El modo de escritura append solo inserta filas nuevas en la tabla de destino. Esta opción solo descarga estrictamente las filas nuevas insertadas en la tabla de origen y agrega los datos transferidos sin verificar los registros existentes, por lo que este modo puede causar duplicación de datos en la tabla de destino.
Modo de escritura Upsert
El modo de escritura upsert te permite actualizar, insertar o borrar registros en la tabla de destino con una clave primaria. Si la clave primaria especificada está presente en la tabla de BigQuery de destino, el conector de Snowflake inserta, actualiza o borra registros correctamente para reflejar los cambios. Si la clave primaria no está presente en la tabla de destino, el conector inserta registros nuevos para las inserciones o actualizaciones de origen, mientras que las eliminaciones se omiten en este caso.
Para usar el modo de escritura upsert con tu transferencia de datos incremental, debes definir claves primarias en tu archivo de esquema personalizado. Ten en cuenta lo siguiente cuando elijas una clave primaria:
La clave primaria puede ser una o más columnas de tu tabla que el conector necesita para identificar los registros que se deben actualizar.
Selecciona columnas que contengan valores no nulos que sean únicos en todas las filas de la tabla. Recomendamos columnas que incluyan 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 elegida, te recomendamos que uses el modo de escritura append o la ingesta completa.
Comportamiento de los cambios de esquema
Las transferencias incrementales no admiten la evolución del esquema. Cualquier modificación en el esquema de la tabla de origen, como agregar, quitar o cambiar el nombre de las columnas, o cambiar los tipos de datos de las columnas, hace que fallen las ejecuciones de transferencia incremental posteriores. Si se produce un cambio en el esquema de origen, debes ejecutar una transferencia de datos completa para volver a sincronizar los datos.
Archivo de esquema personalizado para transferencias incrementales
Puedes usar un archivo de esquema personalizado para definir claves primarias 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 de destino.
Para las transferencias incrementales en 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 primarias 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 la configuración de transferencia de Snowflake. Para obtener más información, consulta Configura una transferencia de Snowflake.