infile - mysql insert in batch
¿Se puede usar MySqlBulkLoader con una transacción? (2)
Como lo indica el miembro del equipo de documentación de MySQL:
It''s not atomic. The records loaded prior to the error will be in the
table.
El trabajo consiste en importar datos a una tabla dedicada y luego ejecutar INSERT INTO ... SELECT ...
que será una operación atómica. En grandes conjuntos de datos, este es un problema potencial debido a una transacción larga.
¿Se puede usar MySqlBulkLoader con una transacción? No veo una forma de adjuntar explícitamente una transacción a una instancia del cargador. ¿Hay otra manera?
El manual de MySQL indica que MySqlBulkLoader es un contenedor de ''LOAD DATA INFILE''. Mientras miraba la documentación ''LOAD DATA INFILE'' noté este párrafo:
Si especifica IGNORE, las filas de entrada que duplican una fila existente en un valor clave único se omiten. Si no especifica ninguna de las opciones, el comportamiento depende de si se especifica la palabra clave LOCAL. Sin LOCAL, se produce un error cuando se encuentra un valor clave duplicado, y el resto del archivo de texto se ignora. Con LOCAL, el comportamiento predeterminado es el mismo que si se especifica IGNORE; esto se debe a que el servidor no tiene forma de detener la transmisión del archivo en el medio de la operación.
No encontré discusión sobre las transacciones, pero el párrafo anterior indicaría que las transacciones no son posibles.
Una solución alternativa sería importar los datos en una tabla de importación y luego usar un procedimiento almacenado separado para procesar los datos mediante transacciones en la tabla deseada.
Entonces en respuesta