Artigo Yuri Marx · Nov. 18, 2025 11m read

Modern data architectures utilize real-time data capture, transformation, movement, and loading solutions to build data lakes, analytical warehouses, and big data repositories. It enables the analysis of data from various sources without impacting the operations that use them. To achieve this, establishing a continuous, scalable, elastic, and robust data flow is essential. The most prevalent method for that is through the CDC (Change Data Capture)  technique. CDC monitors for small data set production, automatically captures this data, and delivers it to one or more recipients, including analytical data repositories. The major benefit is the elimination of the D+1 delay in analysis, as data is detected at the source as soon as it is produced, and later is replicated to the destination.

This article will demonstrate the two most common data sources for CDC scenarios, both as a source and a destination. For the data source (origin), we will explore the CDC in SQL databases and CSV files. For the data destination, we will use a columnar database (a typical high-performance analytical database scenario) and a Kafka topic (a standard approach for streaming data to the cloud and/or to multiple real-time data consumers).

 

Overview

This article will provide a sample for the following interoperability scenario:

 

0
4 223
Artigo Mikhail Khomenko · Dez. 3, 2025 28m read

Security is fundamental to enterprise application development. InterSystems IRIS provides a comprehensive security framework that protects data, controls access, and ensures compliance. This guide introduces essential security features for developers new to IRIS, covering authentication, authorization, encryption, and practical implementation strategies.

0
3 253
Artigo Muhammad Waseem · Dez. 8, 2025 4m read


Apache Airflow is the leading open-source platform to programmatically author, schedule, and monitor data pipelines and workflows using Python. Workflows are defined as code (DAGs), making them version-controlled, testable, and reusable. With a rich UI, 100+ built-in operators, dynamic task generation, and native support for cloud providers, Airflow powers ETL/ELT, ML pipelines, and batch jobs at companies like Airbnb, Netflix, and Spotify.

Airflow Application Layout
Dag Details Page in light mode showing overview dashboard and failure diagnostics

7
4 169
Artigo David Hockenbroch · jan 7 7m read

 

There are numerous excellent tools available for testing your REST APIs, especially when they are live. Postman, various web browser extensions, and even custom ObjectScript written with %Net.HttpRequest objects can get the job done. However, it is often difficult to test just the REST API without inadvertently involving the authentication scheme, the web application configuration, or even network connectivity. Those are a lot of hoops to jump through just to test the code within your dispatch class. The good news is that if we take our time to understand the inner workings of the %CSP.REST class, we will find an alternative option suited for testing only the contents of the dispatch class. We can set up the request and response objects to invoke the methods directly.

5
7 293
David.Satorres6134 · Set. 13, 2019 ir ao artigo

Pool size is 5 :-)

I've been looking for an example of one item that take a little long, as most of them are completed in less than 0.3 seconds. This is a full trace:

I can see the component that takes long, but not as much as the average shown at the analytics :)

0
Ted Peck · Jun. 6, 2016 ir ao artigo

OK, I did the output side. It's fairly simple although the format options fatten it up a bit. There's also a method in here related to my Trak use case; it may be instructive as an example but probably not more than that.  After I do the input side we'll see where the round-trip holes turn up.

Ted

tedjson0.zip

0
Ted Peck · Jun. 10, 2016 ir ao artigo

Here is a working version of the input side as well.  It now has methods to export and import the Layout globals as well, and on import it compares the original with the imported version of the global.   The export and import distinguish between string and non-string types in a $List, which is necessary for a faithful round-trip.

I also ran into an issue where the JS output encoding erroneously escapes $C(11) as \v.  According to RFC 4627 it should not. 

However in order to successfully round-trip I had to add \v unescaping in the parser.

I'm not sure I've covered every possible round trip issue but it works for the Layout globals now.

The class that contains all the import and export methods is in the attached zip file. This is a rough cut but working.

Ted

tedjson1.zip

0
Vitaliy Serdtsev · Jul. 6, 2018 ir ao artigo

Example of converting a CSV to JSON file and then reading from a JSON file without creating intermediate classes/tables:

  <FONT COLOR="#008000">; CSV -> JSON

  </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">rowtype </FONT><FONT COLOR="#000000">= </FONT><FONT COLOR="#008000">"name VARCHAR(50),year INTEGER,amount NUMERIC(9,2),date DATE"</FONT><FONT COLOR="#000000">,     </FONT><FONT COLOR="#800000">fileIn </FONT><FONT COLOR="#000000">= </FONT><FONT COLOR="#008000">"C:\Temp\import.csv"</FONT><FONT COLOR="#000000">,     </FONT><FONT COLOR="#800000">fileOut </FONT><FONT COLOR="#000000">= </FONT><FONT COLOR="#008000">"C:\Temp\export.json"</FONT><FONT COLOR="#000000">,     </FONT><FONT COLOR="#800000">fileExp</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%Stream.FileBinary</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%New</FONT><FONT COLOR="#000000">(),     </FONT><FONT COLOR="#800000">obj</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%Document.Object</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%New</FONT><FONT COLOR="#000000">()

  </FONT><FONT COLOR="#0000ff">d </FONT><FONT COLOR="#800000">obj</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">loadResultSet</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%SQL.Statement</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%ExecDirect</FONT><FONT COLOR="#000000">(,</FONT><FONT COLOR="#008000">"call %SQL_Util.CSV(,?,?)"</FONT><FONT COLOR="#000000">,.</FONT><FONT COLOR="#800000">rowtype</FONT><FONT COLOR="#000000">,.</FONT><FONT COLOR="#800000">fileIn</FONT><FONT COLOR="#000000">),</FONT><FONT COLOR="#008000">"res"</FONT><FONT COLOR="#000000">),     </FONT><FONT COLOR="#800000">fileExp</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">LinkToFile</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">fileOut</FONT><FONT COLOR="#000000">),     </FONT><FONT COLOR="#800000">obj</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%ToJSONStream</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">fileExp</FONT><FONT COLOR="#000000">),     </FONT><FONT COLOR="#800000">fileExp</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%Save</FONT><FONT COLOR="#000000">()

  </FONT><FONT COLOR="#008000">; Read JSON

  </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">fileImp</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%Stream.FileBinary</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%New</FONT><FONT COLOR="#000000">()   </FONT><FONT COLOR="#0000ff">d </FONT><FONT COLOR="#800000">fileImp</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">LinkToFile</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">fileOut</FONT><FONT COLOR="#000000">)   </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">obj </FONT><FONT COLOR="#000000">= </FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%DynamicAbstractObject</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%FromJSON</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">fileImp</FONT><FONT COLOR="#000000">)   </FONT><FONT COLOR="#0000ff">d </FONT><FONT COLOR="#800000">obj</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%ToJSON</FONT><FONT COLOR="#000000">()   </FONT><FONT COLOR="#0000ff">w </FONT><FONT COLOR="#000000">!,</FONT><FONT COLOR="#008000">"obj.res.%Size() = "</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#800000">obj</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">res</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%Size</FONT><FONT COLOR="#000000">()     ,!,</FONT><FONT COLOR="#800000">obj</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">res</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">"0"</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">"""date"""</FONT>

Result:
C:\Temp\import.csv:
car,2000,100.51,27.10.2016,
phone,2003,65.8,15.01.2017,

USER><FONT COLOR="#0000ff">d </FONT><FONT COLOR="#000000">^test</FONT> <FONT COLOR="#ff00ff">{</FONT><FONT COLOR="#008000">"res"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#ff00ff">[{</FONT><FONT COLOR="#008000">"&quot;date&quot;"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#008000">"27.10.2016"</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#008000">"amount"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#000000">100.51</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#008000">"name"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#008000">"car"</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#008000">"year"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#000000">2000</FONT><FONT COLOR="#ff00ff">}</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#ff00ff">{</FONT><FONT COLOR="#008000">"&quot;date&quot;"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#008000">"15.01.2017"</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#008000">"amount"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#000000">65.8</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#008000">"name"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#008000">"phone"</FONT><FONT COLOR="#808080">,</FONT><FONT COLOR="#008000">"year"</FONT><FONT COLOR="#808080">:</FONT><FONT COLOR="#000000">2003</FONT><FONT COLOR="#ff00ff">}]}</FONT> obj.res.%Size() = 2 27.10.2016

0
Julius Kavay · Set. 14, 2019 ir ao artigo

A little bit $translate(), a little bit of $zstrip() and the job is done (in the example below, I want to keep parenthesis)
 

set str="abcd(123)/,op(56)*&^%$987ABC"

write $tr(str,$zstrip(str,"*AN","()"),$j("",$l(str)))
what to keep generell ------^^^
what to keep extra --------------^^
0
David Crawford · Set. 18, 2019 ir ao artigo

It's the zero point for MUMPS based languages. It shows that way if your session has no timeout. From James Poitras on why:

"When I decided on specifications for the date routine, I remembered reading of the oldest (one of the oldest?) U.S. citizen, a Civil War veteran, who was 121 years old at the time. Since I wanted to be able to represent dates in a Julian-type form so that age could be easily calculated and to be able to represent any birth date in the numeric range selected, I decided that a starting date in the early 1840s would be ‘safe.’ Since my algorithm worked most logically when every fourth year was a leap year, the first year was taken as 1841. The zero point was then December 31, 1840."

Taken from http://www.faqs.org/faqs/m-technology-faq/part1/

0
Dmitry Maslennikov · Nov. 19, 2019 ir ao artigo

Unfortunately, I don't have yet, any good solution for now, as store your sources in XML format. You can export them with /exportversion=cache2018.1  flag, with your Studio SourceControl class. IRIS will upgrade source code for Caché and downgrade when you export them with the flag.

Btw, you can have sources in XML and use the modern VSCode-ObjectScript editor.

0
Eduard Lebedyuk · Mar. 27, 2020 ir ao artigo

Easy to do that.

Here's how.

First of all let's find out where we do the iteration. If we open UtilExpGlobalView.csp we see that it's essentially a wrapper over %CSP.UI.System.GlobalViewPane.

In %CSP.UI.System.GlobalViewPane there's a LoadGlobal method which has this promising line:

Set tRS = ##class(%ResultSet).%New("%Global:Get")

Next we follow the trail to %Library.Global class implementing  Get query, which has GetFetch method, which actually iterates over the global here:

Set idx=$Order($$$ISCQUERYTEMP(Index,idx),1,Row)

So now we wrap it up back.

We need a new query (GetFetch is copied as is with one change - inverse iteration order, bolded):

 

Test.Global class

 
Class Test.Global Extends %Global
{

ClassMethod GetFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ Internal, PlaceAfter = GetExecute ]
{
    Set $zt="ERROR"
    Set idx=$p(qHandle,"^",2)
    Set Index=$p(qHandle,"^")
    Set idx=$Order($$$ISCQUERYTEMP(Index,idx),-1,Row)
    If idx="" {
        Set Namespace=qHandle("Namespace")
        Set SearchMask=qHandle("SearchMask")
        Set LastNode=qHandle("LastNode")
        Set NameFormat=qHandle("NameFormat")
        Set ValueFormat=qHandle("ValueFormat")
        Set OldNsp=$zu(5),%UI="CHUI",Count=100
        If Namespace'=OldNsp ZN Namespace
        Set data=$$page^%Wgdisp(SearchMask,LastNode,.Count,0,"","",1,NameFormat,ValueFormat)
        If $zu(5)'=OldNsp ZN OldNsp
        If 'Count Set AtEnd=1,Row="" Quit $$$OK
        ;
        Kill $$$ISCQUERYTEMP(Index)
        For i=1:1:Count {
            Set rec=$p(data,$$$del1,i),subs=$p(rec,$$$del2),val=$p(rec,$$$del2,2)
            Set nf=$p(rec,$$$del2,3),vf=$p(rec,$$$del2,4)
#;SML618+
#;Setup ^CacheTemp with a subroutine in case it overflows the $LB() list.
            d BuildCacheTemp
#;SML618-
        }
        Set qHandle("LastNode")=..Unquote(subs,1)
        Set qHandle=Index_"^"
        Quit ..GetFetch(.qHandle,.Row,.AtEnd)
    } Else {
#;SML618+
#;If there is extension of data then set them to Row array for %ResultSet to get them.
        if $d($$$ISCQUERYTEMP(Index,idx,1)) {
            Set Row(1)=$$$ISCQUERYTEMP(Index,idx,1)
            if $d($$$ISCQUERYTEMP(Index,idx,2)) {
                Set Row(2)=$$$ISCQUERYTEMP(Index,idx,2)
            }
        }
#;SML618-
        Set qHandle=Index_"^"_idx
    }
    Quit $$$OK
ERROR Set $zt=""
    If $g(OldNsp)'="",$zu(5)'=$g(OldNsp) ZN OldNsp
    Quit $$$ERROR($$$CacheError,$ze)
#;SML618+
#;Set the data extension to two or three pieces if it could not fit in one piece.
BuildCacheTemp s $zt="BuildErr1"
    i subs["(" {
        s sub1="("_$p(subs,"(",2,999)
    } else {
        s sub1=""
    }
    s Perm=$s(qHandle("GetPermissions")=0:"",1:$$GetGlobalPermission^%SYS.SECURITY(Namespace,$p(subs,"(",1),sub1,1))
    Set $$$ISCQUERYTEMP(Index,i)=$lb(subs,val,nf,vf,Perm)
    Q
BuildErr1 s $zt="BuildErr2"
    Set $$$ISCQUERYTEMP(Index,i)=$lb(subs,$e(val,1,$l(val)\2),nf,vf,$g(Perm))
    Set $$$ISCQUERYTEMP(Index,i,1)=$lb("",$e(val,$l(val)\2+1,$l(val)),"","","")
    Q
BuildErr2 s $zt=""
    Set $$$ISCQUERYTEMP(Index,i)=$lb(subs,$e(val,1,$l(val)\3),nf,vf,$g(Perm))
    Set $$$ISCQUERYTEMP(Index,i,1)=$lb("",$e(val,$l(val)\3+1,$l(val)\3*2),"","","")
    Set $$$ISCQUERYTEMP(Index,i,2)=$lb("",$e(val,$l(val)\3*2+1,$l(val)),"","","")
    Q
#;SML618-
}

}

Now we wrap it into a pane

 

Test.GlobalViewPane

And finally create a csp page

 

UtilExpGlobalViewR.csp

<AutoPage pagename="View Global Data" parentpage="UtilExpGlobalList.csp" stylesheet="intersystems.css" USENAMESPACE="1">

<Pane name="Title" type="%CSP.Util.SMTitlePane">
    <Text>View Global Data</Text>
</Pane>

<Pane name="Detail" type="Test.GlobalViewPane">
</Pane>

And done, add R to URL and see the global in reverse in SMP:

0
Muni Ganesh · Jun. 9, 2020 ir ao artigo

Hi Raj,

I just tried answer for your question, I have given the code  below. I hope it helps you.

---------------------------------------------------------------------------------------------------------------------------------

   set array=[]
   set obj = {}
   set obj.title="For Whom the Bell Tolls"
   set obj.author="Hemmingway"
   do array.%Push(obj)    

   set obj = {}
   set obj.title="The Invisible Man"
   set obj.author="Ellison"
   do array.%Push(obj)    

   set obj = {}
   set obj.title="Tender is the Night"
   set obj.author="Fitzgerald"
   do array.%Push(obj)    

 set arraylen=0 
 set iter = array.%GetIterator()
   while iter.%GetNext() {
      set arraylen=$I(arraylen)
   }
   
   set MainObj={}
   set MainObj.results=arraylen
   set MainObj.items=array
   
   MainObj.%ToJSON()
----------------------------------------------------------------------------------------------------------------

Output:

{"results":3,"items":[{"title":"For Whom the Bell Tolls","author":"Hemmingway"},{"title":"The Invisible Man","author":"Ellison"},{"title":"Tender is the Night","author":"Fitzgerald"}]}

--------------------------------------------------------------------------------------------------------------------

0
Henrique Dias · Nov. 11, 2020 ir ao artigo

Hi @Yuri Marx 
I have got a few topics that maybe could help you/help us laugh with the certification exam

InterSystems IRIS Core Solutions Developer Specialist 

Recommended preparation: Complete available IRIS development learning content 

https://learning.intersystems.com/enrol/index.php?id=196&nbsp;

https://learning.intersystems.com/enrol/index.php?id=1038

https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?…

https://learning.intersystems.com/enrol/index.php?id=959

Classroom: Developing with InterSystems Objects and SQL 

#Overview
    Benefits
    Features
    Platforms and Versions

#Development Introduction
    Introduction to classes and methods
    Packages
    Persistent and serial classes
    Errors

#Architecture
    Namespaces and databases
    Globals and routines
    System databases
    Naming conventions

#Classes
    OOP/SQL correspondence
    Classes revisited
    Multiple inheritance
    Class compilation
    $System

#Properties
    Properties
    Datatypes
    Accessor and mutator methods
    Reference properties
    Implicit joins
    Foreign keys
    Cloning objects
    Computed properties

#Unit Testing
    Unit testing
    Benefits
    Framework

#Collections
    Collections
    List collections
    Array collections
    Object collections
    Data population

#Relationships
    Relationships
    Many-to-many relationships
    Performance options

#Streams and Files
    Streams
    Files

#Queries
    Sets of results
    Embedded SQL
    Dynamic SQL
    SQL stored procedures
    Command line shell
    Views
    Other SQL features

#Indexes and Tuning
    Indexes
    Indexing options
    Collation
    Index types
    Query performance tuning
    Index methods

#Methods
    Inherited methods
    Scripting languages
    Method attributes
    OOP callback methods
    SQL triggers
    ProcedureBlock methods
    Code mode
    Special method syntax
    
#Debugging
    Debugging with Studio
    Debugging with ZBreak

 
0
Vic Sun · Mar. 15, 2021 ir ao artigo

Hello Michael,

If you haven't seen it already, the IRIS Server Migration Guide contains a list of items outside of databases that you can export/import (such as web app definitions and tasks). You might find that useful as a starting point / reference.

You would need to custom-design a solution if you wanted to intermittently sync your other instances based on these exports.

0
Alex Woodhead · Out. 26, 2022 ir ao artigo

Hi Michael,

Maybe you are reproducing some application migration issue and are setting up some test data.

Purely as a "diagnostic" it seems possible to use the $SORTBEGIN and $SORTEND ObjectScript functions to effect this potentially without changing existing code.

Basically you can ringfence specific globals (normally for performance rationale) and transiently store the global writes in buffer. Then at end of "experiment", you can decide what to commit. ie: Commit the data writes but throw away the index writes.

Hope this helps.

Class TEST.Claim Extends %Persistent
{ Property PropA As %String; Property PropB As %String; Index ixdPropA On PropA; Index ixdPropB On PropB; /// Do ##class(TEST.Claim).TestWithIndex()
ClassMethod TestWithIndex()
{
^TEST.ClaimD,^TEST.ClaimI
for i=1:1:10 {
set obj=..%New()
set obj.PropA="PropA V"_i
set obj.PropB="PropB V"_i
do obj.%Save()
}
zw ^TEST.ClaimD,^TEST.ClaimI
}/// Do ##class(TEST.Claim).TestWithoutIndex()
ClassMethod TestWithoutIndex()
{
^TEST.ClaimD,^TEST.ClaimI
$SORTBEGIN(^TEST.ClaimD)  // Buffer the writes
$SORTBEGIN(^TEST.ClaimI)  // Buffer the writes
for i=1:1:10 {
set obj=..%New()
set obj.PropA="PropA V"_i
set obj.PropB="PropB V"_i
do obj.%Save()
}
$SORTEND(^TEST.ClaimD,1)  // Keep data
$SORTEND(^TEST.ClaimI,0)   // Throw Indexes away
zw ^TEST.ClaimD,^TEST.ClaimI
} Storage Default
{
<Data name="ClaimDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>PropA</Value>
</Value>
<Value name="3">
<Value>PropB</Value>
</Value>
</Data>
<DataLocation>^TEST.ClaimD</DataLocation>
<DefaultData>ClaimDefaultData</DefaultData>
<IdLocation>^TEST.ClaimD</IdLocation>
<IndexLocation>^TEST.ClaimI</IndexLocation>
<StreamLocation>^TEST.ClaimS</StreamLocation>
<Type>%Storage.Persistent</Type>
} }
 
Kind regards,

Alex

Update: For clarification the $Sortbegin on the ^*D global was simply to demonstrate different possible outcomes. The actual solution only required to discard the index ( ^*I) updates.
 

0
Guillaume Rongier · Mar. 21, 2023 ir ao artigo

Great article, if your are looking for an approach without objectscript and making use of "irispyhton", check this code :

python code :

import pandas as pd

from sqlalchemy import create_engine,types

engine = create_engine('iris+emb:///')

df = pd.read_csv("/irisdev/app/notebook/Notebooks/date_panda.csv")
# change type of FullDate to date
df['FullDate'] = pd.to_datetime(df['FullDate'])
df.head()

df.to_sql('DateFact', engine, schema="Demo" ,if_exists='replace', index=True,
        dtype={'DayName': types.VARCHAR(50), 'FullDate': types.DATE, 'MonthName': types.VARCHAR(50),
        'MonthYear': types.INTEGER, 'Year': types.INTEGER})

requirements.txt :

pandas
sqlalchemy==1.4.22
sqlalchemy-iris==0.5.0
irissqlcli

date_panda.csv

ID,DayName,FullDate,MonthName,MonthYear,Year
1,Monday,1900-01-01,January,190001,1900
2,Tuesday,1900-01-02,January,190001,1900
3,Wednesday,1900-01-03,January,190001,1900
4,Thursday,1900-01-04,January,190001,1900
5,Friday,1900-01-05,January,190001,1900
6,Saturday,1900-01-06,January,190001,1900
7,Sunday,1900-01-07,January,190001,1900
8,Monday,1900-01-08,January,190001,1900
9,Tuesday,1900-01-09,January,190001,1900
0