Find

Discussion
· Jun 21, 2024

How does your team handle TUNE TABLE data?

Hello everyone, 

My team is currently developing guidance and best practices for the generation, storage, and deployment of TUNE TABLE statistics across development and production environments. With that in mind, we want to get an idea of what methods teams in the field have developed for handling this data. In particular, we’d like to know the following: 

  1. How often do you use TUNE TABLE in your development vs. production environments? 
  2. Do you utilize the $SYSTEM.SQL.Stats.Table package to generate and export TUNE TABLE statistics as files? If so: 
    1. Do you store these in source control? 
    2. Which systems do you produce artifacts for? Do you generate files for both development and production instances, or do you generate files for only some environments and import the files into others? 
  3. What methods do you use to test TUNE TABLE’s effectiveness, if any?  
  4. Are there any additional steps you find are necessary after tuning or importing a statistics file? For example, do you find it necessary to clear cached queries in a schema? 
  5. If your team is a CCR user, do you utilize CCR to manage TUNE TABLE statistics? If so, what practices have you developed? 

Please feel free to include any additional information as you see fit. 

Thank you! 

3 Comments
Discussion (3)3
Log in or sign up to continue
Article
· Jun 21, 2024 7m read

Sobre a ideia de Usar a Sintaxe de Definição de Classe Python para criar classes IRIS

Introdução

Não muito tempo atrás, eu me deparei com a ideia de Usar a Sintaxe de Definição de Classe Python para criar classes IRIS no Portal de Ideias do InterSystems. Ela atraiu minha atenção porque integrar o máximo de sintaxes possíveis dá visibilidade aos produtos InterSystems para programadores de muitas linguagens.

O autor dessa ideia apontou a possibilidade de criar classes usando a sintaxe Python, em adição às já disponíveis no IRIS. Esse conceito me inspirou a escrever esse artigo, explorando as possibilidades de acessar o poder total da InterSystems utilizando apenas Python.

Vale à pena mencionar que um dos precursores de todo esse poder é a capacidade multi-modelo do IRIS. Ela permite que você acesse o mesmo dado por meio de globais (uma estrutura de armazenamento multidimensional). As globais são a estrutura de base para todos os outros modelos. Da mesma maneira, você pode acessar o mesmo dado por meio de objetos. No escopo desse artigo, acessar por objeto significa usar adaptadores JSON ou XML para conectar IRIS e Python. Além disso, também pode acessar o dado por SQL usando conexões JDBC ou ODBC. Por fim, você também pode empregar uma DocDB (Document database) que também opera com sintaxe JSON para receber o mesmo resultado.

 

Criar uma base de dados IRIS desde uma classe Python usando SQL

Para começar, devemos discutir o ponto principal da ideia: usar a sintaxe de definição de classe do Python para criar uma classe IRIS. É possível chegar nisso, mas a complexidade dessa implementação depende totalmente na sofisticação das relações definidas na sua classe. Você pode clicar aqui para olhar meus estudos dessa solução. Não hesite em me contatar se quiser discutir esse tema melhor!

Se você só precisa das propriedades de uma classe definida em Python, a maneira mais fácil será utilizar a função mapper() do SQLAlchemy para criar sua classe.

Para isso, você vai precisar das importações a seguir:
 

from sqlalchemy import create_engine, MetaData
from sqlalchemy.schema import Table, Column
from sqlalchemy.orm import mapper

Claro, você deve começar definindo sua máquina e então criando sua tabela. Você também pode definir uma coluna de chave primária para sua classe se ela já não tem.

engine = create_engine("iris://" + user + ":" + password + "@" + host + ":" + port + "/" + namespace)
metadata = MetaData()
table = Table(class_name, metadata, Column('id', Integer,  primary_key = True))

Adicionalmente, para cada propriedade na sua classe, lembre-se de adicionar uma Column() na sua tabela com o nome, tipo SQL, vindo de sqlalchemy.sql.sqltypes e opcionalmente um valor default. Talvez você queira checar esse link com um dicionário de Python para SQL para simplificar sua tarefa.

Finalmente, você deve chamar o mapper com a sua classe e a tabela como argumentos, e criá-las com sua máquina.

mapper(my_class, table)
metadata.create_all(engine)

Se você ainda assim desejar criar métodos, pode acessar seu recém criado arquivo .cls, definir um método com sintaxe ObjectScript e definir sua linguagem como Python.

Contudo você ainda pode evitar essa única linha de ObjectScript ao criar sua classe. A melhor maneira de fazê-lo é usar o InterSystems Native SDK para Python para conectar o Python ao Iris e utilizá-lo para acessar classes %Dictionary. Essas classes te ajudam a construir seu arquivo .cls. Você vai precisar de um schema, um nome para sua classe, nomes e tipos das suas propriedades e implementações de métodos para concluir essa tarefa.

Se você tem uma classe definida em Python, pode acessar essa informação facilmente. Defina o schema como quiser e acesse o nome da classe em uma linha de código, como mostrado abaixo:

class_name = your_class.__class__.__name__

A seguir, a função embutida dir() te dará todos os atributos em uma classe. Você pode usar o método callable() para checar se é uma propriedade ou um método. Finalmente, você pode importar o módulo inspect e utilizar suas funções getsource() e getfullargspec() para acessar cada pedacinho de informação dos seus métodos.

implementation = i.getsource(function) # esse pega o código escrito como uma string
inspection = i.getfullargspec(function) 
defaults = inspection.defaults
annotation = inspection.annotations
arguments = inspection[0]

Tenha em mente que o primeiro argumento numa função de classe do Python pode ser "self". Nesse caso, será refletida no ObjectScript como Method. Caso contrário, será um ClassMethod.

Com esses elementos, você pode abrir sua classe e modificá-la com as classes %Dictionary.

new_class = irispy.classMethodObject("%Dictionary.ClassDefinition", "%Open", class_name)
new_method = irispy.classMethodObject("%Dictionary.MethodDefinition", "%New", class_name + ":" + method_name)
new_method.set("Language", "python")
new_method.get("Implementation").invoke("Write", implementation)
new_method.set("ClassMethod", isClassMethod)
new_method.set("FormalSpec", formal_spec)
new_class.get("Methods").invoke("Insert", new_method)

No código escrito acima, o objeto irispy foi gerado conectando a instância IRIS com o método createIRIS() do módulo. Você pode descobrir mais detalhes sobre como estabelecer essa conexão na documentação ou em alguns dos meus artigos anteriores. Contudo, nesse momento tudo o que você precisa saber sobre isso está no código abaixo:

import iris

# Abre uma conexão com o servidor
args = {'hostname':'127.0.0.1', 'port':52773,
    'namespace':'USER', 'username':'_SYSTEM', 'password':'SYS'
}
conn = iris.connect(**args)
# Cria um objeto IRIS
irispy = iris.createIRIS(conn)

Você pode criar sua formal_spec com a anotação da inspeção.

Por fim, invoque %Save nessa definição.

sc = new_class.invoke("%Save")

 

Criar uma base de dados IRIS de uma classe Python usando DocDB

Primeiro, você deve habilitar sua instância para receber esse tipo de requisição REST. Para isso, vá em Administração do Sistema > Segurança > Serviços, selecione %Service_DocDB, escolha "Serviço habilitado" e clique em Salvar. A seguir, seu sistema pode necessitar que você instale o módulo de requisições do Python com o comando pip install requests.

Se você não está familiarizado com APIs REST com Python, você ainda poderá acompanhar esse tutorial, já que tudo o que será usado aqui é bastante intuitivo.

Vamos precisar apenas enviar algumas URLs para a %Api.DocDB.v1, que é uma opção embutida do IRIS. Apenas importe o requests no seu ambiente Python e escreva uma URL com o padrão demonstrado abaixo:

url = http://HOST:PORT/api/docdb/v1/NAMESPACE/db/DBNAME?type=cls

Então, envie uma requisição POST para essa URL comrequest.post(url). Pronto! Agora você já pode ver uma classe chamada CLASSNAME no schema padrão ISC_DM, no namespace selecionado.

Após criar uma classe, você pode adicionar propriedades a ela mandando mais requisições POST com uma URL do seguinte tipo:

http://HOST:PORT/api/docdb/v1/NAMESPACE/prop/DBNAME/PROPERTYNAME?type=%String&path=PROPERTYPATH

Você pode perceber o caminho da propriedade como o caminho que você usaria para obter o valor nela definido, caso estivesse num objeto dinâmico construído de um JSON. Por exemplo, imagine que você pode representar um objeto como no bloco de código abaixo.

{
    "person": {
        "name":"heloisa tambara",
        "country":"brazil"
    }
}

 Nesse caso, o caminho para a propriedade nome seria person.name.

Finalmente, você pode começar a popular essa tabela com um outro padrão de URL:

http://HOST:PORT/api/docdb/v1/NAMESPACE/doc/DBNAME/ID

Se quiser criar um novo documento, uses o método POST e deixe o campo ID vazio. Por outro lado, para substituir um documento existente, use o método PUT e especifique o ID que deseja modificar.

Escreva o corpo da sua requisição de acordo com os caminhos de propriedades empregados. Por exemplo, se você criou algumas propriedades com os caminhos "person.name", "person.location.country", "person.location.state", "person.location.city", você pode adicionar um documento enviado o JSON abaixo no corpo da sua requisição.

{
    "person": {
        "name":"Heloisa Tambara",
        "location": {
            "country":"Brasil",
            "state":"Pernambuco",
            "city":"Recife"
        }
    }
}

Essa seção foi designada para te dar apenas um gostinho da capacidade do DocDB. Na documentação que você pode acessar clicando aqui, você pode descobrir todos os métodos disponíveis em mais detalhes.

Indo mais a fundo: usar interoperabilidade IRIS sem ObjectScript

Para a maioria das implementações, você pode praticamente abolir o uso de classes COS. Suponha que você está procurando por uma produção completa construída apenas com Python. Nesse caso, você pode experimentar o PEX (Production EXtension framework) e limitar o uso de arquivos .cls para a classe da produção apenas. A melhor prática para usar PEX é utilizar a aplicação do Guillaume Rongier (interoperability-embedded-python), que reduz as diferenças entre a arquitetura InterSystems para interoperabilidade e o Python. Se você nõ está familiarizado com essa estrutura ainda, vale a pena dar uma olhada no curso de 30 minutos dedicado à Arquitetura de Integração.

Se esse é seu objetivo, eu recomendo que você leia o artigo Full Python IRIS production: DataTransformation of a CSV to a FHIR server de Lucas Enard. Aa página do GitHub relacionada à aplicação OpenExchange descrita no texto mostra um ótimo exemplo de como atingir um desenvolvimento quase 100% Python.

 

Sempre tem mais...

Como você pode ver, há muitas maneiras de criar, manipular e popular classes em IRIS. Você já conhecia todas essas descritas acima? Qual você gostaria de ler mais a respeito? Que outras maneiras você conhece que eu ainda não descrevi? Por favor, compartilhe nos comentários o que você pensa!

Discussion (0)1
Log in or sign up to continue
Announcement
· Jun 21, 2024

Developer Community AI is here!

Greetings and welcome to the new era of AI innovation on the Developer Community...

🚀 InterSystems Developer Community AI 🚀

Developer Community AI (DC AI), our new assistant, is here to answer your questions!

It leverages the InterSystems IRIS Vector Search and is powered by SerenityGPT, providing the most relevant answers sourced directly from the InterSystems Developer Community. Additionally, it can respond in any of the six supported languages (EN, ES, PT, JP, CN, FR)!

 


    How to use:

    • Log in: Access your account on the Developer Community.
    • Navigate to DC AIGo to the DC AI page through the "What's New" block located at the top right corner of the main page.

    • Ask your question: Submit your question directly on the page.


    Additional features: 

    • If you don't find the answer you need, easily convert your question into a post using the "Ask Community" button.
    • Share your chat with others using the share button () and save/copy answers for future reference ().
    • Dive deeper into related Community posts listed in the Sources section on which DC AI's answers are based.


    We want your feedback.
    As we're still in beta, your feedback is crucial to improving Developer Community AI:

    • Rate answers using the Like/Dislike buttons.
    • Share specific feedback, suggestions, and ideas in the comments of this post.


    Try the DC AI today!
    Ask your questions and share your experience with the Community.

    5 Comments
    Discussion (5)2
    Log in or sign up to continue
    Announcement
    · Jun 21, 2024

    [Vidéo] Gestion de la taille de la base de données

    Salut la Communauté!

    Profitez de regarder la nouvelle vidéo sur la chaîne Youtube d'InterSystems France

    📺 Gestion de la taille de la base de données

    Découvrez comment étendre ou tronquer une base de données à l'aide du Portail de gestion de la plateforme de données InterSystems IRIS®, et découvrez les meilleurs moments pour effectuer chaque opération. 

    Cette vidéo est doublée grâce à Bard, l'intelligence artificielle de Google. 

    N'oubliez pas à partager vos réflexions et impressions dans des commentaires après avoir regardé cette vidéo !

    Discussion (0)1
    Log in or sign up to continue
    Article
    · Jun 21, 2024 5m read

    Conexión a Cloud SQL desde Microsoft Power BI usando ODBC y TLS/SSL

    Estamos emocionados de seguir lanzando nuevas funciones para InterSystems IRIS Cloud SQL, como la nueva capacidad de Búsqueda Vectorial que se estrenó por primera vez con InterSystems IRIS 2024.1. Cloud SQL es un servicio en la nube que ofrece precisamente eso: acceso SQL en la nube. Esto significa que estaréis usando tecnologías de controladores estándar de la industria como JDBC, ODBC y DB-API para conectaros a este servicio y acceder a vuestros datos. La documentación describe en detalle cómo configurar los ajustes importantes a nivel de controlador, pero no cubre herramientas específicas de terceros, ya que, como podéis imaginar, hay un número infinito de ellas.

    En este artículo, complementaremos esa documentación de referencia con pasos más detallados para una popular herramienta de visualización de datos de terceros que varios de nuestros clientes usan para acceder a datos basados en IRIS: Microsoft Power BI.

    Paso 0: crear vuestra implementación

    Primero, iniciad sesión en el Portal de Servicios en la Nube y cread una implementación de Cloud SQL. Lo único de lo que debéis estar atentos es de marcar la casilla para habilitar las conexiones externas. Aparte de eso, todos los ajustes predeterminados deberían funcionar bien.

     

    Paso 1: Descargar el certificado

    Para conectaros de manera segura, usaremos certificados para cifrar todo lo que se envíe a través de la red. Podéis descargar el certificado desde la página de detalles de la implementación a través del botón "Obtener certificado X.509":

    Necesitamos referirnos a este certificado más adelante, por lo que debéis guardarlo en un directorio adecuado. Por ejemplo, estoy usando C:\Users\bdeboe\odbc\.

    Paso 2: Crear el archivo SSLDefs.ini

    Para saber qué certificado y configuraciones de cifrado usar, el controlador ODBC de InterSystems busca un archivoSSLDefs.ini, que crearemos a continuación. Por defecto, buscará este archivo en C:\Program Files (x86)\Common Files\InterSystems\IRIS, pero podéis cambiar esta ubicación usando la variable de entorno ISC_SSLconfigurations. Para mantener todas mis configuraciones juntas, establecí esa variable en C:\Users\bdeboe\odbc\ el directorio donde también guardé mi certificado.

    El archivo SSLDefs.ini necesita contener dos cosas para que ODBC sepa cómo conectarse: una configuración de servidor y una configuración SSL. La configuración del servidor simplemente declara el nombre de la configuración SSL que se usará para una combinación particular de nombre de host y puerto, y la configuración SSL tiene todos los detalles para establecer la conexión cifrada. Esto hace que sea sencillo reutilizar una única configuración SSL para múltiples servidores. Aquí está el contenido de mi archivo SSLDefs.ini:

    [My CloudSQL Server] 
    Address=k8s-da0bcd5e-a1b3a0c7-545df92ec8-2e44304cebef1543.elb.us-east-1.amazonaws.com
    Port=443
    SSLConfig=SampleSSLConfig
    
    [SampleSSLConfig]
    CAFile=
    CertFile=C:\Users\bdeboe\odbc\certificateSQLaaS.pem
    KeyFile=
    Password=
    KeyType=2 
    Protocols=28 
    CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2 
    VerifyPeer=0 
    VerifyDepth=9

    La primera sección tiene la configuración del servidor, a la que podéis darle un nombre a vuestro gusto. Necesitaréis cambiar la Address para que coincida con el nombre de host de vuestra implementación de Cloud SQL, el cual podéis obtener de la página de detalles de la implementación donde descargasteis el certificado.

    La segunda sección tiene la configuración SSL, cuyo nombre debe corresponder a lo que especificasteis para SSLConfig en la sección de configuración del servidor. La bandera CertFile obviamente debe coincidir con el lugar donde guardasteis vuestro certificado.

    Para más detalles sobre las otras configuraciones, por favor, consultad la documentación completa sobre configuraciones TLS.

    Paso 3: Crear el DSN de ODBC

    Power BI, como la mayoría de las herramientas basadas en ODBC, funciona con DSNs (Nombre de Origen de Datos), que se registran usando una utilidad de Windows. Simplemente haced clic en el icono de Inicio de Windows y comenzad a escribir "ODBC", luego haced clic en "Orígenes de datos ODBC (64 bits)". Elegid la pestaña "DSN del sistema" para registrar una conexión con nuestra implementación de Cloud SQL. Si tenéis instalaciones locales de InterSystems IRIS (de las cuales tengo aproximadamente una docena en cualquier momento 😉), veréis que el instalador creó entradas DSN predeterminadas para ellas:

     

    Haced clic en "Add..." o "Agregar..." para crear un nuevo DSN, eligiendo un nombre y llenando el host, puerto y namespace. Normalmente guardo mi nombre de usuario y contraseña en el DSN para las instancias que no son de producción (y los necesitaremos para probar la conexión en breve), pero podéis dejar estos campos en blanco y suministrar esas credenciales más tarde. El campo "Nombre del servidor SSL/TLS" es un poco redundante (¡trabajaremos en eso!).

     A continuación, haced clic en "Probar conexión" para verificar que todo funcione como se espera. Deberíais recibir un mensaje que dice "¡Prueba de conectividad completada con éxito!". Si no es así, verificad los pasos anteriores o consultad la guía de resolución de problemas. Un mensaje de error particular que puede confundiros (¡al menos a mí me confundió!) es "No SSL config found in the registry or in ssldefs.ini". Este error significa que el controlador ODBC no encontró una coincidencia para vuestra combinación de nombre de host/puerto en el archivo SSLDefs.ini. Como vuestro nombre de host cambia cada vez que creáis una nueva implementación, necesitaréis actualizar o añadir las configuraciones del servidor para cada una.

    Paso 4: Conectar desde Power BI

    Ahora es el momento de usar nuestro DSN de ODBC para cargar algunos datos en Power BI. Después de abrir la aplicación, seleccionad "Obtener datos" o "Obtener datos de otras fuentes", y elegid la opción ODBC:

    Luego seleccionad el DSN que acabáis de crear de la lista:

    En la siguiente pantalla, podéis proporcionar vuestro nombre de usuario y contraseña. No se requieren propiedades adicionales de credenciales.

     ¡Listo! Ahora podéis seleccionar las tablas que queréis incluir en vuestros informes de Power BI:

    Como probablemente habéis notado, todos los pasos excepto el último en este artículo son universales para la configuración de ODBC, por lo que esto debería ayudaros con la mayoría de las herramientas basadas en ODBC. Espero que este artículo os haya sido útil, y no dudéis en añadir vuestros propios consejos y trucos, o compartir vuestras experiencias sobre cómo conectaros a Cloud SQL. También notad que prácticamente nada de lo que se menciona aquí, excepto el paso 0, es específico de Cloud SQL, por lo que podéis utilizar los mismos pasos para conectaros a cualquier instancia de IRIS que requiera conexiones cifradas.

    Discussion (0)1
    Log in or sign up to continue