Artículo
· 28 jul, 2022 Lectura de 3 min

Consejos y trucos del nuevo comando LOAD DATA

Estos días he estado trabajando con la excelente y nueva funcionalidad: LOAD DATA. Con este artículo me gustaría compartir mis primeras experiencias con todos. Los siguientes puntos no contienen ningún orden ni ningún otro análsis. Son solo cosas que observé al utilizar el comando LOAD DATA. Y se debe tener en cuenta que estos puntos se basan en la versión 2021.2.0.617 de IRIS, que es una versión de prueba. Por ello, es posible que mis observaciones no apliquen a las nuevas versiones de IRIS. Pero quizás sean útiles para otros.

1) La ruta del archivo está en el lado del servidor

He hecho mis primeras pruebas mediante JDBC. La primera sorpresa que me encontré: ¡El archivo y la ruta del archivo deben, por supuesto ;-) estar en el lado del servidor! El controlador JDBC no se encarga de esto en el lado del cliente. Probablemente esto es obvio, pero no lo había considerado al principio.

2) El sufijo del archivo no es relevante

Los documentos dicen:

"Los nombres de los archivos deben incluir un sufijo .txt o .csv (valores separados por comas)."

Según mis observaciones, el comportamiento no es así. El sufijo no es relevante.

3) ¡Lee los documentos! ... o ¿dónde están las filas con errores?

Cuando cargué algunos archivos de datos, perdí filas. Si hay algún problema con una línea, la línea se ignora. Esto sucede silenciosamente en segundo plano y no se notifica activamente al cliente. Después de consultar https://https//youtu.be/jm7bDK0FoiI me di cuenta de que tengo que revisar %SQL_Diag.Result y %SQL_Diag.Message para ver los problemas de forma detallada. También me di cuenta de que este comportamiento ya está descrito en esta página: https://docs.intersystems.com/iris20212/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_loaddata ... así que hay que leer los manuales ;-)

Algunos ejemplos de lo que se puede ver:

SELECT * FROM %SQL_Diag.Result ORDER BY createTime DESC

Revisa la columna errorCount de tu descarga.

Se pueden ver los detalles (de la fila) en %SQL_Diag.Message

SELECT * FROM %SQL_Diag.Message ORDER BY messageTime DESC

Se puede filtrar por un diagResult específico (%SQL_Diag.Result.ID = %SQL_Diag.Message.diagResult)

SELECT * FROM %SQL_Diag.Message
WHERE diagResult=4
ORDER BY messageTime DESC

4) LOAD DATA no es compatible con $SYSTEM.SQL.Schema.ImportDDL

Para mi aplicación de prueba Openflights Dataset intenté cargar todos los archivos externos con LOAD DATA. Las sentencias se agrupan dentro de un archivo de texto (sql) donde anteriormente también creé las tablas.

Aprendí que no se puede hacer eso mediante $SYSTEM.SQL.Schema.ImportDDL.

Por cierto, la documentación de ImportDDL señala que no todas las sentencias SQL son compatibles. Solo unas pocas sentencias SQL aparecen en esta página.

LOAD DATA lamentablemente no es una de ellas... Y, por cierto, USE DATABASE tampoco.

5) Para administrar unicode hay que cambiar una configuración

Para evitar problemas con el código de los datos durante la carga, hay que poner esta configuración en el servidor de %Java: -Dfile.encoding=UTF-8
Consulta más detalles en esta publicación. Este problema debería desaparecer en la próxima versión de IRIS.

6) El proceso de carga se detiene con un error, pero los datos se cargan

La carga de datos mediante JDBC se para por un error %qparsets. Se ve así:

Error: [SQLCODE: <-400>:<Fatal error occurred>]
[Error: <<UNDEFINED>zExecute+83^%sqlcq.OPENFLIGHTS.cls10.1 *%qparsets>]
[Location: <ServerLoop>]

Pero hay que preocuparse, los datos se cargaron :-) Consulta más detalles en esta publicación.
Este problema debería desaparecer en la próxima versión de IRIS.

Comentarios (1)2
Inicie sesión o regístrese para continuar