検索

ダイジェスト
· 2025年9月29日

Nuevas publicaciones en la Comunidad de InterSystems, 22-28 septiembre

22-28 septiembreWeek at a GlanceInterSystems Developer Community
ダイジェスト
· 2025年9月29日

Publications des développeurs d'InterSystems, semaine Septembre 22 - 28, 2025, Résumé

Septembre 22 - 28, 2025Week at a GlanceInterSystems Developer Community
お知らせ
· 2025年9月29日

Nouveau tutoriel pratique : RAG avec InterSystems IRIS Vector Search

Bonjour à la communauté,

Nous sommes ravis de vous présenter un tout nouveau tutoriel Instruqt :

🧑‍🏫 RAG avec InterSystems IRIS Vector Search

Ce laboratoire pratique vous guide dans la création d'un chatbot IA basé sur la génération augmentée de récupération (RAG) et optimisé par InterSystems IRIS Vector Search. Vous découvrirez comment la recherche vectorielle peut être exploitée pour fournir des réponses actualisées et précises, en combinant les atouts d'IRIS et de l'IA générative.

✨ Pourquoi l'essayer ?

  • Découvrez le fonctionnement pratique d'IRIS Vector Search.
  • Explorez comment RAG peut améliorer la fiabilité et la pertinence des réponses fournies par Vector Search.
  • Accédez pas à pas à la création d'une solution basée sur l'IA.

>> Démarrez le tutoriel ici <<

Votre avis nous intéresse ! N'hésitez pas à laisser un commentaire à la fin du tutoriel ou à partager vos impressions.

Bon apprentissage !

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年9月29日 3m read

Todos cometemos errores

Todavía recuerdo el primer código que escribí en Object Script

Viniendo de Python, al principio me resultó muy extraño, pero con el tiempo empecé a ver por qué el lenguaje está construido de esa manera.

Si estáis empezando, tened en cuenta que ObjectScript puede parecer un poco de nicho y ligado sobre todo a los productos IRIS, pero la forma de trabajar con él realmente compensa: desarrollo rápido, una base de datos potente y una plataforma sólida para aprender.

A veces se siente como si hubierais entrado en un mundo que es a la vez familiar y diferente.

Reconoceréis partes de SQL, conceptos orientados a objetos, pero todo mezclado en un estilo propio. Y, como con cualquier lenguaje, los principiantes suelen caer en algunas trampas comunes.

El alcance importa

Muchos errores vienen de saltarse lo básico, cosas como cómo se delimitan las variables o cómo persisten los datos no son simples detalles: son la base. He visto a desarrolladores novatos sobrescribir valores sin querer porque no se daban cuenta de que las variables locales y globales se comportan de manera diferente. Id despacio, dedicaos a entender bien esos fundamentos y os ahorraréis muchos dolores de cabeza más adelante.

¿Funcional u orientado a objetos (OOP)?

Object Script es una mezcla única, algunos intentan tratarlo como si fuera un lenguaje puramente funcional, otros como un lenguaje orientado a objetos estándar. Ninguno funciona del todo bien. La verdadera fortaleza está en usar ambos: cada tarea tiene su propia solución. Apoyaos en SQL cuando tenga sentido, escribid código funcional rápido y cambiad a patrones orientados a objetos cuando sea la mejor opción.

No lo compliquéis de más

Otra trampa que he visto es escribir demasiado código para un problema sencillo. Como Object Script se siente diferente, a veces se fuerzan patrones de otros lenguajes sobre él. Pero la mayoría de las veces ya hay una forma más simple incorporada. Antes de escribir ese bucle enorme o esa clase extra, preguntaos: ¿hay aquí una manera más fácil de hacerlo? Normalmente la respuesta es sí.

No ignoréis la gestión de errores

Cuando solo queréis “hacer que funcione”, es fácil saltarse la gestión de errores adecuada. Pero cuando algo falla —y creedme, fallará— es cuando se nota el dolor. Aprender pronto a capturar, registrar y manejar errores hace que depurar sea mucho más fácil y ahorra a vuestros compañeros (y a vuestro yo futuro) muchísima frustración.

Los globals permanecen

Los globals son potentes, pero también son persistentes: eso significa que vuestros datos se quedan ahí hasta que los limpiéis. Los desarrolladores nuevos, e incluso los intermedios, suelen olvidarlo y terminan con restos desordenados que contaminan sus resultados. Tratad los globals con cuidado y aseguraos de no dejar basura de datos atrás.

Escribid código que se pueda leer

Una cosa es hacer que algo funcione, otra es asegurarse de que alguien más pueda entenderlo después. La consistencia en los nombres, los comentarios y mantener las cosas simples marcan una gran diferencia. Podéis pensar que recordaréis lo que hace vuestro código, pero no lo haréis.

El código limpio es un acto de amabilidad hacia vosotros mismos y hacia cualquiera que tenga que trabajar con él después.

Disfrutad del camino, que al final es lo que realmente importa.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年9月29日 3m read

Importar datos CSV en InterSystems IRIS y preservar los IDs

¡Hola a todos!

Es muy fácil importar datos CSV en IRIS. Pero, ¿qué pasa si queremos preservar los IDs originales del CSV?

Recientemente me encontré con la situación en la que necesitaba importar dos CSVs en IRIS que estaban vinculados por una columna que hacía referencia a la columna de otro CSV: una situación típica de clave primaria y clave externa, donde csv1 contiene esta columna como clave primaria, y csv2 como clave externa con IDs relacionados con csv1.

La imagen fue generada por ChatGPT, así que no lo culpéis: hizo lo mejor que pudo al generar países como claves primarias con una relación countries.csv–cities.csv :)

Conozco al menos tres utilidades prácticas para importar CSV: csvgencsvgen-python, y bdb-sql-utils. Pero si importo ambos CSVs, por ejemplo mediante csvgen, habrá dos clases en IRIS con los datos importados, un ID interno generado y un IDKey. Y no es posible cambiar el IDKey a otro índice en la clase una vez que ya tiene datos. Así que resulta que no es tan obvio cómo importar un CSV y preservar una columna con datos de ID como IDKey en IRIS.

Por supuesto que es posible, y estoy seguro de que conocéis muchas maneras de hacerlo. De hecho, ahora es posible importar y preservar los IDs existentes en el CSV como claves ID tanto en csvgen como en csvgen-python. Para generar una clase en IRIS e importar datos desde un CSV dado con una clave primaria, proporcionad el nombre de la columna en el parámetro pkey (el último). De este modo, la utilidad añadirá un índice IDKey, PrimaryKey a la clase.
Por ejemplo, si importamos countries.csv y queremos que la columna Name sea un IDKey y clave primaria, llamad a csvgen de la siguiente manera:

//primary key name is the 11th parameter :)
zw ##class(community.csvgen).Generate("path/to/countries.csv,",","package.Countries",,,,,,,,"Name")

Lo que hace internamente puede describirse de la siguiente manera:

  • genera la clase con las propiedades como siempre,
  • borra todos los datos,
  • elimina el índice DDLBEIndex bitmap si existe (esto impide crear un IDKey alternativo al ya existente),
  • establece (temporalmente) la opción global del sistema DDLPKeyNotIDKey=0,
  • añade un índice Primary Key para la columna indicada con el nombre proporcionado.

Y como resultado, tendréis una clase recién generada con datos y la clave primaria IDKey para el nombre de columna dado.

Aquí está el código en csvgen.

Entonces, ¿cómo conectáis dos clases generadas? En mi caso necesitaba tener swizzling de instancias de class1 en class2.property. Así que simplemente cambié el tipo de dato en la clase generada a una clase con Primary Key–IdKey.

Aquí está la aplicación demo de ejemplo que analiza el consumo de patatas y la importación en distintos países (no me preguntéis por qué inventé este ejemplo; quizá tenía hambre). Los países son reales, pero el consumo fue generado por gpt, él/ella dijo que está cercano a la realidad, ya que resultó bastante difícil conseguir estos datos.

Aquí están countries.csv y potatos_sales.csv.

Así es como importo los datos y genero las clases:

    zpm "install csvgen"
    set file="/home/irisowner/dev/data/countries.csv"
    zw ##class(community.csvgen).Generate(file,",","esh.csvpkey.Countries",,,,,,,,"Name")
    set file="/home/irisowner/dev/data/potato_sales.csv"
    zw ##class(community.csvgen).Generate(file,",","esh.csvpkey.Potatos",,,,,1)

Genera una clase countries con PrimaryKey:

Class esh.csvpkey.Countries Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {irisowner}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Countries ]
{

Property Name As %Library.String(MAXLEN = 250) [ SqlColumnNumber = 2 ];
Property Code As %Library.String(MAXLEN = 250) [ SqlColumnNumber = 3 ];
...

Index COUNTRIESPKEY1 On Name [ IdKey, PrimaryKey, SqlName = COUNTRIES_PKEY1, Unique ];
...

}

Luego cambié la propiedad generada countries de %String a referencia a la clase countries:

Property Country As esh.csvpkey.Countries [ SqlColumnNumber = 2 ];

Y he creado una demo muy evidente de IRIS BI/DSW para ver cómo va el consumo de patatas en los distintos países a lo largo de los años:

Espero que os fuera interesante y os sirviera de ayuda :)

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください