Hi Developers,

Python has a large and powerful ecosystem that contains thousands of libraries and packages available, especially in data science.

Therefore, I wanted to have a first try in using a recent feature of IRIS called Embedded Python, to simply import a python library called datetime, generate data with a timestamp component and persist it in InterSystems IRIS for Health Data Platform. The same will work on IRIS Data Platform as well.

I have broken down this small project into 2 main pieces:

  • Set up the Embedded Python environment following the IRIS for Health Data Platform documentation
  • Create the timestamp data as an example using Embedded Python and persist to IRIS, using the datetime package
  • 1. Setup Embedded Python on InterSystems IRIS for Health Data Platform 2022.1
  • On Windows, open CMD terminal:
  • C:\InterSystems\IRISHealth\bin>irispip install --target C:\InterSystems\IRISHealth\mgr\python numpy

    Note: This is the step for checking the Embedded Python environment, because I find out when I use IRIS 2021.0 eairly the irispip is not working

  • Test Python functionality by importing a Python math package
  • Open IRIS terminal and execute the following in the USER namespace: set pymath = ##class(%SYS.Python).Import("math") 

    Then execute write pymath.pi, You can see you have successfully called the python package, with the output as follows:

    USER>write pymath.pi

    3.141592653589793116

  • And we can also start the Python shell by opening from the IRIS terminal:
  • do ##class(%SYS.Python).Shell()

    <wrapblock><shape id="Text_x0020_Box_x0020_2" o:gfxdata="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 bMqB020n48kEj6TpdoOiLJ3eQoZPc4XzqWa/Olhxsim4ux+OT7whnfKHCEKs0aoqA46JgLODamrN MYHDsCKRlfE3V5iytGueRukYSumIJiHKKoqZzFO4TuWFOvqusIFxl+0ZDGqYJCuEw0AVWNOoVjUt qkaqw9Kqez6TspyRNMuaaWUVVTXdWcxaIS8Dc7a8WpE3tMpNDDnNrPBp6p5PuWt5rpvrE4oqAQYv 7OeouhcoCIZq5WKWakrjxTSscnZGtWtHvsFzVLtIkTCyfjMXO2e3okY4lwPilSo/8M1HLZAmeV+p Le062N5DiTcMqm0fDpdhOPgMruB42gfaqqKtKhpcwZkzlIv0oLjtZxc5BZ6nlAJTyym1HFPPKfWc 0sgpjZzSzClN39MnqnCKrw5TfS8/MIUalh2wZr2Fffq/8S8AAAD//wMAUEsDBBQABgAIAAAAIQCc ZkZBuwAAACQBAAAqAAAAY2xpcGJvYXJkL2RyYXdpbmdzL19yZWxzL2RyYXdpbmcxLnhtbC5yZWxz hI/NCsIwEITvgu8Q9m7SehCRJr2I0KvUBwjJNi02PyRR7Nsb6EVB8LIws+w3s037sjN5YkyTdxxq WgFBp7yenOFw6y+7I5CUpdNy9g45LJigFdtNc8VZ5nKUxikkUigucRhzDifGkhrRykR9QFc2g49W 5iKjYUGquzTI9lV1YPGTAeKLSTrNIXa6BtIvoST/Z/thmBSevXpYdPlHBMulFxagjAYzB0pXZ501 LV2BiYZ9/SbeAAAA//8DAFBLAQItABQABgAIAAAAIQC75UiUBQEAAB4CAAATAAAAAAAAAAAAAAAA AAAAAABbQ29udGVudF9UeXBlc10ueG1sUEsBAi0AFAAGAAgAAAAhAK0wP/HBAAAAMgEAAAsAAAAA AAAAAAAAAAAANgEAAF9yZWxzLy5yZWxzUEsBAi0AFAAGAAgAAAAhAKZI0L7VBQAANGAAAB8AAAAA AAAAAAAAAAAAIAIAAGNsaXBib2FyZC9kcmF3aW5ncy9kcmF3aW5nMS54bWxQSwECLQAUAAYACAAA ACEAkn2H4B0HAABJIAAAGgAAAAAAAAAAAAAAAAAyCAAAY2xpcGJvYXJkL3RoZW1lL3RoZW1lMS54 bWxQSwECLQAUAAYACAAAACEAnGZGQbsAAAAkAQAAKgAAAAAAAAAAAAAAAACHDwAAY2xpcGJvYXJk L2RyYXdpbmdzL19yZWxzL2RyYXdpbmcxLnhtbC5yZWxzUEsFBgAAAAAFAAUAZwEAAIoQAAAAAA== " style="position:absolute; margin-top:51px; width:445.45pt; height:260.75pt; z-index:251659264; v-text-anchor:top" type="#_x0000_t202"> <textbox> </textbox></shape></wrapblock>

    Class User.PythonFirstTry Extends %RegisteredObject{ClassMethod pyHello() As %Status{ set pythonBuiltins = ##class(%SYS.Python).Builtins() do pythonBuiltins.print("Hello World!")}ClassMethod pyForLoop() [ Language = python ]{ for i in range(5):  print("Python")}}

    I have written two class methods that you can try to put in a .cls file, compile them and see the output.

    Execute the methods as below:

    USER>do ##class(User.PythonFirstTry).pyHello()

    Hello World!

     

    USER>do ##class(User. PythonFirstTry).pyForLoop()

    Python

    Python

    Python

    Python

    Python

     

    1. Use python library to generate dataflow and persist to InterSystems IRIS

    Python Library needed for data flow generation:

  • Import datetime package (this do not require extra installation using CLI)
  • In addition to the datetime package, I tried using other libraries and packages however some of them are not present natively with Embedded Python. To install these, open CMD terminal (for Windows) then run the following (XX is to be replaced with the package name):

    C:\InterSystems\IRISHealth\bin>irispip install XX

    Here are the steps followed to generate data and persist into IRIS.

  • Create %Persistent class 
  • Create Property
  • Set a classmethod (e.g. GetData) and specify [Language = python]
  • Generate data by calling datetime python library, using the following code snippet:
  • Note: timeNow needs to be converted into a String datatype

    1. Execute the method GetData() via IRIS Terminal, execute SQL query

     

    Note: You could use a simple for loop to control the volume of data that is generated by this method.