Artículo Alberto Fuentes · 1 mar, 2024 4m read

Hay una nueva funcionalidad muy interesante en la recientemente anunciada versión de prueba 2024.1 de InterSystems IRIS - JSON_TABLE. JSON_TABLE forma parte de una familia de funciones introducidas en la versión 2016 del estándar SQL (ISO Standard, publicado a principios de 2017). Permite que valores JSON se mapeen a columnas y se consulten usando SQL. JSON_TABLE puede usarse en la cláusula FROM de algunas sentencias SQL.

La sintaxis de JSON_TABLE es bastante extensa, permitiendo condiciones excepcionales cuando los valores JSON proporcionados no cumplen las expectativas, estructuras anidadas, etc.

La sintaxis básica es bastante sencilla. El primer argumento pasado a JSON_TABLE es el valor JSON que se va a consultar. Puede ser un literal, una referencia a una columna o una llamada a una función. El segundo argumento es una expresión JPL (JSON Path Language), que permite filtrar el valor proporcionado. Después va la cláusula COLUMNS - justo en medio de la llamada a la función. La cláusula COLUMNS se parece mucho a las definiciones de columnas en una sentencia CREATE TABLE pero con un añadido muy necesario - el PATH. PATH es una expresión JPL que se aplica al valor JSON para producir el valor de la columna.

0
0 196
Artículo Alberto Fuentes · 21 feb, 2024 2m read

Quería compartiros hoy un pequeño truco para personalizar cómo se muestran los mensajes en el Visor de Mensajes. En concreto, cómo mostrar mensajes JSON directamente en el Visor de Mensajes en lugar de serializados como XML.

image

Los mensajes son los objetos que utilizamos para comunicar componentes de una producción de interoperabilidad. En mi caso me había definido un mensaje que utilizaba después para pasar a JSON y enviar a una API. Este mensaje está definido como un mensaje convencional y también como %JSON.Adaptor para poder exportar / importar directamente a JSON.

Class interop.msg.DeviceOrderReq Extends (Ens.Request, %JSON.Adaptor)
{

Parameter %JSONNULL As BOOLEAN = 1;

Property externalOrderId As %String(MAXLEN = "");

Property orderStatus As %String;

Property requestedServiceId As %String(MAXLEN = "");

Property patientData As interop.msg.elements.PatientData;

}
2
0 337
Artículo Alberto Fuentes · 12 feb, 2024 3m read

En recientes versiones de IRIS, se ha añadido en la parte de SQL una nueva y potente funcionalidad para la carga de datos: LOAD DATA. Esta funcionalidad ha sido optimizada para importar datos de forma extremadamente rápida en IRIS, permitiendo insertar cientos de gigabytes de datos en segundos en lugar de en horas o días. 

Esta es una mejora muy interesante. Sin embargo, todavía existe un gran problema en la experiencia de carga de datos. Concretamente, el tiempo y molestia que suponen:

  1. Definir el esquema para la tabla en la que se quieren cargar los datos
  2. Averiguar cómo funciona exactamente la sintaxis del comando LOAD DATA

He desarrollado una interfaz de usuario que gestiona de forma transparente el paso de crear la tabla (CREATE TABLE) y después genera la sintaxis para LOAD DATA, todo en un práctico asistente!

0
0 247
Artículo Alberto Fuentes · 31 ene, 2024 13m read

Tenemos un conjunto de datos bastante apetecible con recetas escritas por múltiples usuarios de Reddit, sin embargo, la mayor parte de la información está en texto libre en forma de título y descripción de un mensaje. Vamos a averiguar cómo podemos, de forma muy sencilla, cargar los datos, extraer algunas características y analizarlos empleando funcionalidades de LLM (Large Language Model) de OpenAI desde Python Embebido y el framework Langchain.

0
0 215
Artículo Alberto Fuentes · 25 ene, 2024 1m read

Creo que ésta es una forma bastante interesante de instalar un terminal web en un entorno en el que puedes acceder al Portal de Gestión/Visual Studio Code, pero no al terminal.

En este caso, zpm ya estaba presente. En caso contrario, se puede instalar también en la misma clase.

  1. Crear una clase que instalará webterminal utilizando zpm.
  2. Compilar. Esto llevará un rato (ya que hará la descarga y la instalación), y después se verá el resultado desde zpm!
  3. Ahora se puede abrir el terminal web accediendo a http://your-host/terminal/
0
0 153
Artículo Alberto Fuentes · 24 ene, 2024 2m read

¿Sabíais que se pueden obtener datos JSON directamente de las tablas SQL?

Dejadme que os presente dos útiles funciones de SQL, que se utilizan para recuperar datos JSON de consultas SQL - JSON_ARRAY y JSON_OBJECT

Podéis usar esas funciones en la sentencia SELECT con otros tipos de elementos de selección, y se pueden especificar en otras ubicaciones en las que se puede utilizar una función SQL, como en una condición WHERE.

La función JSON_ARRAY toma una lista de expresiones separadas por comas y devuelve una matriz JSON conteniendo esos valores.

1
1 845
Artículo Alberto Fuentes · 15 ene, 2024 5m read

La invención y popularización de LLMs (Large Language Models) como GPT-4 de OpenAI ha desencadenado una ola de soluciones innovadoras que permiten aprovechar grandes volúmenes de datos no estructurados, que eran prácticamente imposibles de procesar manualmente hasta hace poco. Estas aplicaciones pueden incluir la recuperación de datos (echad un vistazo al curso sobre ML301 de Don Woodlock, con una excelente introducción a la Generación Aumentada de Recuperación), el análisis de sentimientos, e incluso agentes de IA totalmente autónomos, por nombrar sólo algunos ejemplos!

En este artículo, quiero demostrar cómo la funcionalidad de Python Embebido de IRIS puede ser utilizada para interactuar directamente con la librería Python de OpenAI, a través de la creación de una sencilla aplicación de etiquetado de datos que asignará automáticamente palabras clave a los registros que metamos en una tabla de IRIS. Estas palabras clave pueden después ser usadas para buscar y categorizar los datos, así como para analítica de datos. Utilizaré reseñas de productos realizadas por clientes como ejemplo de caso de uso.

0
0 153
Artículo Alberto Fuentes · 11 ene, 2024 2m read

¿Alguna vez habéis estado editando ficheros en VS Code, pero necesitábais comprobar el valor de un global o ejecutar algunos comandos de ObjectScript? Ahora podéis hacerlo, sin necesidad de configuración! Si tenéis la versión 2.10.0 o posterior de la extensión vscode-objectscript y estáis conectados a InterSystems IRIS 2023.2 o posterior, ahora podéis abrir una conexión del terminal a vuestro servidor, sin importar dónde se encuentre.

Hay tres formas de abrir este nuevo terminal:

1
0 307
Artículo Alberto Fuentes · 8 ene, 2024 6m read

Al empezar el desarrollo con IRIS tenemos un kit de distribución o, en el caso de Docker, obtenemos la imagen Docker y después a menudo tenemos que iniciarla y configurar el entorno de desarrollo. Puede que necesitemos crear bases de datos, namespaces, activar/desactivar algunos servicios, crear recursos. Muchas veces necesitamos importar el código y los datos a la instancia de IRIS y ejecutar algún código personalizado para iniciar la solución.

Lajos Simicska declares war on Viktor Orban: "It's either him or me!" - The  Budapest Beacon

0
0 119
Artículo Alberto Fuentes · 20 dic, 2023 4m read
         Cómo incluir IRIS Data en vuestro almacén de datos de Google Big Query y en vuestras exploraciones de datos de Data Studio. En este artículo utilizaremos Google Cloud Dataflow para conectarnos a nuestro Servicio de InterSystems Cloud SQL y crear un trabajo para persistir los resultados de una consulta de IRIS en Big Query en un intervalo. 
Si tuvisteis la suerte de obtener acceso a Cloud SQL en el Global Summit 2022, como se menciona en "InterSystems IRIS: What's New, What's Next" (InterSystems IRIS: Lo nuevo, lo siguiente), el ejemplo será pan comido, pero se puede realizar con cualquier punto de acceso público o vpc que hayáis provisionado.
0
0 157
Artículo Alberto Fuentes · 7 dic, 2023 4m read

Introducción

Con frecuencia nos encontramos con problemas de conectividad en las implementaciones de HealthShare (HS) en Microsoft Azure que tienen varios componentes de HealthShare (instancias o namespaces) instalados en la misma máquina virtual, especialmente cuando es necesario comunicarse con otros componentes de HS mientras se utiliza el balanceador de carga interno de Azure (ILB) para proporcionar la funcionalidad VIP (Virtual IP) de Mirroring. Los detalles sobre cómo y por qué se usa un balanceador de carga con Mirroring los podéis encontrar en este artículo de la Comunidad.

Según la documentación del Balanceador de Carga de Azure, el comportamiento predeterminado es el siguiente:

0
0 153
Artículo Alberto Fuentes · 16 nov, 2023 7m read

Ejemplo de demostración para el Gran Premio de Programación de InterSystems, sobre el uso de plantillas más complejas para probar funcionalidades de IA.

Preguntas para la entrevista

Hay documentación. Para un puesto de trabajo, una persona de recursos humanos quiere evaluar rápidamente a los candidatos con varias preguntas técnicas relevantes para el puesto.

¿Puede automatizar el trabajo haciendo una lista de preguntas y respuestas a partir de la documentación disponible?

0
0 160
Artículo Alberto Fuentes · 18 oct, 2023 3m read

Hoy os traigo otro ejemplo de aplicación de LangChain.

Inicialmente buscaba generar una "chain" o cadena para lograr hacer búsquedas dinámicas en la documentación en HTML, pero al final resultó más sencillo utilizar la versión en PDF de la documentación .

Crear un nuevo entorno virtual

mkdir chainpdf

cd chainpdf

python -m venv .

scripts\activate 

pip install openai
pip install langchain
pip install wget
pip install lancedb
pip install tiktoken
pip install pypdf

set OPENAI_API_KEY=[ Your OpenAI Key ]

python
0
0 379
Artículo Alberto Fuentes · 5 oct, 2023 9m read

En el vasto y variado mercado de las bases de datos SQL, InterSystems IRIS destaca como una plataforma que va mucho más allá de SQL, ofreciendo una experiencia multimodelo perfecta, y siendo compatible con un amplio conjunto de paradigmas de desarrollo. Especialmente el avanzado motor objeto-relacional ha ayudado a organizaciones a utilizar el enfoque de desarrollo más adecuado para cada una de sus cargas de trabajo intensivas en datos; por ejemplo, ingerir datos a través de Objetos y consultarlos simultáneamente mediante SQL. Las Clases Persistentes corresponden a tablas SQL, sus propiedades a columnas de la tabla y se accede fácilmente a la lógica de negocio utilizando Funciones Definidas por el Usuario o Procedimientos Almacenados. En este artículo, nos centraremos un poco en la magia que se encuentra justo debajo de la superficie y discutiremos cómo puede afectar vuestras prácticas de desarrollo e implementación. Esta es un área del producto que tenemos planificado evolucionar y mejorar, así que no dudéis en compartir vuestras opiniones y experiencias en los comentarios al artículo.

0
0 197
Artículo Alberto Fuentes · 20 sep, 2023 1m read

Preguntas frecuentes de InterSystems

El lenguaje ObjectScript de InterSystems no permite definir métodos con el mismo nombre pero utilizando diferentes argumentos.

En general, se suele clasificar Objectscript como un lenguaje de programación dinámico. En ObjectScript se puede controlar libremente qué argumentos se utilizan cuando se ejecuta un método, así que a diferencia de otros lenguajes como Java, que no son lenguajes de programación dinámicos, no es necesario distinguir estrictamente los métodos por el número de argumentos en la fase de compilación.

El lenguaje ObjectScript, por tanto, no contiene la característica conocida como overloadingo sobrecarga como tal.

0
0 112
Artículo Alberto Fuentes · 21 ago, 2023 1m read

Una característica muy potente en Studio es utilizar snippets o fragmentos de código.

Podemos hacer lo mismo también en VS Code de la siguiente manera:

Aquí tienes las instrucciones genéricas.

1. Vete a Code > Settings ... > Configure User Snippets y selecciona objectscript.

2. Añade tu fragmento de código, aquí tienes un ejemplo:

"SQL Statement": {
    "prefix": ["sql"],
    "body": ["#dim rs As %SQL.ISelectResult",
            "set rs = ##class(%SQL.Statement).%ExecDirect(,\"SELECT * FROM\")",
            "while rs.%Next() {",
            "\twrite rs.ID, !",
            "}"]
}
1
1 210
Artículo Alberto Fuentes · 9 ago, 2023 5m read

Cada vez es más común ver coloridas insignias o badges en el archivo README.MD, con información útil sobre un proyecto en repositorios como GitHub, GitLab y otros.

Por ejemplo:

image

Incluso la iniciativa sobre calidad del código que está en marcha en la comunidad actualmente también ofrece su propia insignia. Esta insignia muestra el estado de validación de código del proyecto.

Para incluirla, debes añadir la siguiente línea en el README.MD:

 [![Quality Gate Status](https://community.objectscriptquality.com/api/project_badges/measure?project=intersystems_iris_community%2Fappmsw-zpm-shields&metric=alert_status)](https://community.objectscriptquality.com/dashboard?id=intersystems_iris_community%2Fappmsw-zpm-shields)
0
1 229
Artículo Alberto Fuentes · 3 ago, 2023 4m read

¡Hola Comunidad!

Como sabéis, las soluciones de Interoperabilidad de InterSystems IRIS contienen diferentes elementos de la solución, como: producciones, reglas de negocio, procesos, transformaciones de datos, mapeos de registros, etc. Y a veces podemos crear y modificar estos elementos con herramientas visuales en la UI. Y por supuesto necesitamos una forma práctica y sólida de controlar el código fuente con los cambios realizados con herramientas de UI.

Durante mucho tiempo, esto era un proceso de configuración manual (exportar clase, elemento, global, etc.) o engorroso, por lo que el tiempo ahorrado con la automatización del control de fuentes de la UI competía con el tiempo perdido en configurar y mantener la configuración.

Ahora ese problema ya no existe. Con dos enfoques: desarrollo "package first" y uso del paquete IPMgit-source-control, de @Timothy.Leavitt.

Os explico los detalles a continuación.

0
0 205
Artículo Alberto Fuentes · 28 jul, 2023 7m read

¡Hola Comunidad!

Me alegra anunciar la nueva versión de iris-pex-embedded-python (v2.3.1) con una nueva interfaz de línea de comandos.

Esta línea de comandos se llama iop por Interoperability On Python.

Primero me gustaría presentar los principales cambios del proyecto desde la versión 1.

Breve historia del proyecto

La versión 1.0 fue una prueba de concepto para mostrar cómo el framework de interoperabilidad de IRIS se puede utilizar con un enfoque python first mientras sigue siendo compatible con cualquier código existente de ObjectScript.

¿Qué significa eso? Significa que cualquier desarrollador Python puede usar el framework de interoperabilidad de IRIS sin ningún conocimiento de ObjectScript.

Ejemplo:

from grongier.pex import BusinessOperation

class MyBusinessOperation(BusinessOperation):

    def on_message(self, request):
        self.log.info("Received request")

Genial, ¿cierto?

0
0 113
Artículo Alberto Fuentes · 19 jul, 2023 3m read

Este artículo es un sencillo ejemplo para probar SqlDatabaseChain pidiéndole a OpenAI cierta información y que escriba consultas SQL sobre una base de datos IRIS.

Quizá despierte el interés de alguno de vosotros.

Muchas gracias a sqlalchemy-iris (autor @Dmitry Konnov Maslennikov). Ese proyecto ha sido indispensable para esta prueba. 

El script de este artículo usa la API de OpenAI así que tenedlo en cuenta para no compartir la información de vuestras tablas externamente en el caso de que no queráis hacerlo. Podría llegar a implementarse un modelo local en caso que lo necesitaseis.

1
0 525
Artículo Alberto Fuentes · 4 jul, 2023 2m read

Hoy en día es muy común que los datos que necesitas vengan de diferentes fuentes (e.g. aplicaciones externas e internas, distintas bases de datos y servicios, APIs, etc.). Además, seguro que tienes múltiples tipos de consumidores diferentes (e.g. usuarios finales, otras aplicaciones, servicios que publicas a terceros, etc.) y cada uno necesitará acceder a la información de forma diferente y para distintos objetivos. ¿Cómo construir una capa que de forma sencilla te permita gestionar estas necesidades? Hoy hablamos de Data Fabric 👈.

image

0
0 195
Artículo Alberto Fuentes · 14 jun, 2023 11m read

Qué es el Web Scraping:

En términos sencillos, el Web scraping, también conocido como recolección de datos de sitios web o extracción de datos de sitios web es un proceso automatizado que permite la recopilación de grandes volúmenes de datos (no estructurados) de los sitios web. El usuario puede extraer datos de sitios web específicos, según sus necesidades. Los datos recopilados se pueden almacenar en un formato estructurado para su posterior análisis.

¿Qué es el Web Scraping? — James Le

0
0 563
Artículo Alberto Fuentes · 22 mayo, 2023 2m read

¡Hola Comunidad!

A menudo, las soluciones con InterSystems IRIS BI pueden convertirse en soluciones bastante grandes con docenas de tablas dinámicas y cuadros de mando.

Con cada nueva versión de IRIS BI podemos añadir cambios que pueden influir en el comportamiento de las tablas dinámicas y cuadros de mando existentes y que dejen de funcionar. Por ejemplo, si cambiamos el nombre de una medida o dimensión, olvidamos desplegar cubos o realizamos reestructuraciones con cambios masivos del nombre de los cubos y sus elementos, algunos widgets podrían dejar de funcionar.

La solución es probar (¿manualmente?) cada widget en cada cuadro de mando para asegurarnos de que las consultas MDX están funcionando.

Hoy quiero presentaros una herramienta para probar automáticamente todas las tablas dinámicas y los cuadros de mando.

0
0 123
Artículo Alberto Fuentes · 10 mayo, 2023 4m read

¡Hola desarrolladores!

Se acaba de actualizar la plantilla para desarrollo FHIR de forma que ahora publica el paquete IPM fhir-server que hace que la configuración del servidor FHIR de InterSystems sea una sencilla tarea manual, automática o programática vía un solo comando.

Os explico más abajo cómo podéis utilizarlo.

TLDR

USER>zpm "install fhir-server"

Todos los detalles aquí:

0
0 193
Artículo Alberto Fuentes · 5 mayo, 2023 3m read

¡Hola desarrolladores!

Hay una actualización reciente para las imágenes de la comunidad de desarrolladores de InterSystems IRIS e InterSystems IRIS For Health.

Esta versión incluye soporte para variables de entorno.

Actualmente se soportan 3 variables de entorno:

  • IRIS_USERNAME=usuario a crear
  • IRIS_PASSWORD=password del usuario
  • IRIS_NAMESPACE=crear namespace si no existe

Esto es lo que puedes hacer:

Arrancar iris con un usuario y password:

docker run --rm --name iris-sql -d -p 9091:1972 -p 9092:52773  -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community
0
0 180
Artículo Alberto Fuentes · 27 abr, 2023 8m read

Con IRIS 2021.1, realizamos una importante revisión de nuestra API de utilidades SQL en %SYSTEM.SQL. Sí, eso fue hace algún tiempo, pero la semana pasada un cliente hizo unas preguntas sobre ello y entonces @Tom Woodfin me empezó a presionar un poco ;-) para que describiera con más detalle en la Comunidad de Desarrolladores las razones de estos cambios. ¡Así que allá vamos!

0
0 124
Comentarios Alberto Fuentes · 12 abr, 2023

¡Hola Comunidad!

Como sabéis, InterSystems IRIS, además de globals, objetos, documentos y modelos de datos XML, también es compatible con tratamiento relacional de datos utilizando SQL como lenguaje.

Y como otros sistemas de gestión de bases de datos relacionales (DBMS), InterSystems IRIS tiene su propio dialecto.

Empezamos esta publicación como una Guía Rápida de SQL y os invitamos a compartir vuestros trucos favoritos.

¡Vamos allá!

0
1 247
Artículo Alberto Fuentes · 15 mar, 2023 3m read

InterSystems IRIS 2022.2 tiene un SDK nativo para Python (https://docs.intersystems.com/iris20222/csp/docbook/Doc.View.cls?KEY=PA…).

Sabemos cómo recorrer la estructura de datos de un global usando la función $Order de ObjectScript.

SET""FOR

¿Cómo hacer lo mismo desde Python usando el SDK nativo de IRIS para Python?

Aquí va un ejemplo directamente en Python:

'127.0.0.1'
0
0 174
Artículo Alberto Fuentes · 28 feb, 2023 2m read

¡Hola a todos!

Comparto con vosotros una herramienta para la ingestión de datos que hemos utilizado en varios proyectos.

DataPipe es un framework de interoperabilidad para la ingestión de datos de forma flexible con InterSystems IRIS. Te permite recibir datos desde el exterior, normalizar y validar la información y finalmente realizar cualquier operación sobre tus datos.

Modelo

Lo primero que necesitas es definir un modelo. Un modelo es una clase que extiende de DataPipe.Model

0
0 283
Artículo Alberto Fuentes · 23 feb, 2023 3m read

Hola a todos!

Durante un proyecto necesitábamos poder definir temas sobre los que publicar mensajes, y crear diferentes subscriptores que recibiesen esos mensajes de forma asíncrona. Necesitábamos además que fuese lo más sencillo posible y que se pudiese utilizar directamente en InterSystems IRIS.

A modo de experimento os paso este iris-pubsub.

Infraestructura

Está construido sobre las funcionalidades de interoperabilidad de InterSystems IRIS, necesita tener una producción en marcha.

La primera vez que lo arranquemos definimos cuántas particiones queremos dedicar para atender mensajes.

2
0 128