# Migrating FactoryTalk Historian data to Ignition

**URL:** <https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643>\
**Category:** Ignition\
**Created:** [April 3, 2025, 12:27pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643 "2025-04-03T12:27:54Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Cody\_Morgan](https://avatars.discourse-cdn.com/v4/letter/c/db5fbb/32.png) [@Cody\_Morgan](https://forum.inductiveautomation.com/u/Cody_Morgan)\
**Post date:** [April 18, 2025, 2:17am UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/21 "2025-04-18T02:17:33Z")

</div>

That is a lot of data, do they not have compression configured for those points? If they're OK with compression, you might be able to configure it, then reprocess the archives before exporting the data. I'm not 100% sure reprocessing archives would actually run compression on data that's already archived, though. I can probably find out.

I think custom AFSDK is probably a dead end for Factory Talk.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [August 7, 2025, 6:50pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/22 "2025-08-07T18:50:41Z")

</div>

So I’m continuing along with the exporting of data from OSI PI into text files using the piconfig command. Each archive file in SMT is 1024MB and is roughly 15-16 days of data, but when I run piconfig to export all the data, the file is 7.4GB for 30 days of data.

Occasionally I am seeing this error about event collection exceeding the maximum allowed. What specifically is that referring to?

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/f/af0cf0ca74432847de2df5fa6eb79657a55a3afb.png)

---

<div class="post-metadata">

**Author:** ![Cody\_Morgan](https://avatars.discourse-cdn.com/v4/letter/c/db5fbb/32.png) [@Cody\_Morgan](https://forum.inductiveautomation.com/u/Cody_Morgan)\
**Post date:** [August 7, 2025, 7:55pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/23 "2025-08-07T19:55:19Z")

</div>

If I remember correctly, this is related to the `ArcMaxCollect` tuning parameter. If you have access to SMT, you should be able to view/change the parameter. If your server’s resources are going to be a limit, you may need to just make smaller queries. Also, some tuning parameters work hand-in-hand with others. I was never an expert with all of the tuning parameters, but you can take a look around and see if any of them sound relevant. If they do, and your machine has available memory/CPU, crank them up a bit. Feel free to ask me about them, I’m happy to share what I can remember about the tuning parameters. I think most are documented _somewhere._

One benefit of PI’s proprietary binary archive file format is efficiency. Unfortunately, it comes at the cost of easy raw data access. If your plan is to export a lot of these files and then later import them into something, consider zipping them up. You might be able to get them closer to 2 GB in size that way. If you’re immediately processing the export, there may not be much value in zipping them up.

Out of curiosity, how long does it take for that export to finish?

---

<div class="post-metadata">

**Author:** ![Cody\_Morgan](https://avatars.discourse-cdn.com/v4/letter/c/db5fbb/32.png) [@Cody\_Morgan](https://forum.inductiveautomation.com/u/Cody_Morgan)\
**Post date:** [August 7, 2025, 7:57pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/24 "2025-08-07T19:57:47Z")

</div>

I’m not sure if the FactoryTalk historian comes with the any of the PowerShell tools for PI System, but if it does, that may be something to consider.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [August 11, 2025, 4:33pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/25 "2025-08-11T16:33:21Z")

</div>

It takes about 30 minutes or so to export that data. The plan is to eventually import all of this into Ignition in the new environment as the customer is migrating from FTView to Ignition but needs to retain at least a decade of historical data.

---

<div class="post-metadata">

**Author:** ![Cody\_Morgan](https://avatars.discourse-cdn.com/v4/letter/c/db5fbb/32.png) [@Cody\_Morgan](https://forum.inductiveautomation.com/u/Cody_Morgan)\
**Post date:** [August 11, 2025, 6:28pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/26 "2025-08-11T18:28:45Z")

</div>

Well, if that rate is consistent (30 minutes to export half a month of data) for the entire decade, it sounds like it will take roughly 5 days to export everything.

Sounds slow, but I’ve seen migrations take longer. Good luck, and let me know if you have any more questions!

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [August 11, 2025, 6:45pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/27 "2025-08-11T18:45:39Z")

</div>

The problem is that the export file for that period is way too large to handle. I’m using scripts to open the file and manipulate it to create an output file that will be ready for importing into Ignition. Turns out all those errors were missing data, so in reality, 24 hours of data creates a file that is about 590MB. I’m trying to come up with a batch file that I can run and it will just create an export file for each 24 hour period so I don’t have to modify the piconfig script, run the command, modify piconfig script, run the command…and so on. 590MB is still a large file for the manipulation script but it’ll work.

---

<div class="post-metadata">

**Author:** ![Cody\_Morgan](https://avatars.discourse-cdn.com/v4/letter/c/db5fbb/32.png) [@Cody\_Morgan](https://forum.inductiveautomation.com/u/Cody_Morgan)\
**Post date:** [August 11, 2025, 9:06pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/28 "2025-08-11T21:06:13Z")

</div>

> [@matt6](#):
>
> The problem is that the export file for that period is way too large to handle. I’m using scripts to open the file and manipulate it to create an output file that will be ready for importing into Ignition.

If you haven’t considered it, it may be helpful to process the files by streaming the rows instead of reading the entire thing into memory within your manipulation script. Most CSV readers can do this, I think.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [August 11, 2025, 9:26pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/29 "2025-08-11T21:26:45Z")

</div>

Yeah you might be right. I was thinking it would load into memory.  
To export the data, I came up with two batch files. The first one called “run.bat” runs this:

`call create.bat 14-oct-2021 15-oct-2021`  
`call create.bat 15-oct-2021 16-oct-2021`

The second one runs this:

`echo off`  
`cls`  
`echo @tabl piarc > input.txt`  
`echo @ostr tag,time,value >> input.txt`  
`echo @ostr ... >> input.txt`  
`echo @istr tag,starttime,endtime,count >> input.txt`  
`echo @output C:\values_%1.txt >> input.txt`  
`echo @echo off >> input.txt`  
`echo @maxerr 10000 >> input.txt`  
`echo Tag1,%1,%2,6000000 >> input.txt`  
`echo Tag2,%1,%2,6000000 >> input.txt`  
`echo Tag3,%1,%2,6000000 >> input.txt`

…..all the remaining tags

and then

`"C:\Program Files\Rockwell Software\FactoryTalk Historian\Server\adm\piconfig.exe" < c:\input.txt`

So I can use something like excel to auto-populate a huge set of start & end dates, drop that in the “run.bat” file and it will create a file for each day. But before I get too carried away, I’ll try streaming a 7GB file and see what happens.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [August 12, 2025, 1:34pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/30 "2025-08-12T13:34:34Z")

</div>

While I’m grabbing all this data, I want to focus on the import file format. We’ll be using Postgres, and when I look at the historical database, it seems there is a new table for each month. Then instead of a tagname, it uses a tagid, so I need to import the tagid, value, and timestamp (unix milliseconds), correct?

And where do I find the correlation between tagname and tagid? If I export all the tags from designer, there is no unique id associated with each tag.

EDIT: looks like the table “sqlth\_te” contains the relationship between id and tag.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 12, 2025, 1:58pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/31 "2025-08-12T13:58:08Z")

</div>

FYI:

> **[Ignition Database Table Reference | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/appendix/reference-pages/ignition-database-table-reference#tag-history)**
>
> Ignition has a lot of systems built-in that will query the database automatically without requiring you to build a query. These systems automatically create the necessary tables in the database, insert the relevant data, and even query it back out...

---

<div class="post-metadata">

**Author:** ![Chris\_Bingham](https://avatars.discourse-cdn.com/v4/letter/c/e5b9ba/32.png) [@Chris\_Bingham](https://forum.inductiveautomation.com/u/Chris_Bingham)\
**Post date:** [August 12, 2025, 2:15pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/32 "2025-08-12T14:15:50Z")

</div>

Despite the extra overhead, I would try to use [system.tag.storeTagHistory](https://www.docs.inductiveautomation.com/docs/8.1/appendix/scripting-functions/system-tag/system-tag-storeTagHistory) to migrate data into Ignition when adding history to existing tags, especially if you are able to connect to the other database and read data directly into Ignition.

A disclaimer with the above method, is that you are not currently able to override the gateway setting when storing data from a remote gateway. (Hmmm…) If you are trying to add history for tags of an existing tag provider, ensure you run this function on the same gateway where the tag provider is local.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [August 12, 2025, 2:16pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/33 "2025-08-12T14:16:00Z")

</div>

Thanks. This looks like it gives great detail into the table structure, but doesn’t quite answer my question. In fact, it adds some confusion. That first section talks about the core table that is created and it says sqlt\_data\_X\_X. Here you can see that the tables created in my environment (also 8.1) appear to include the month as well, but all the tags being collected are within that table and they do not have separate tables.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/f/c/fc588da9b63dbbf96442b74a6eebffd16351ac50.png)

EDIT: and I guess this is why 👇

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/1/6/16e67311a7df158b9083e7a463a3a6ddd3720438.png)

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 12, 2025, 2:49pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/34 "2025-08-12T14:49:16Z")

</div>

Yes, the `_X_X` varies with the partitioning selected, if any.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [January 7, 2026, 2:49pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/35 "2026-01-07T14:49:44Z")

</div>

Me again…I need to re-export the tags but include the scan rate so they can be configured correctly in the new Ignition tag list. To do this, I need to cross reference the scan class (location4) with the scan class from the PI ICU, but when trying to run piconfig to export that particular attribute, it says it’s an unknown parameter.

In my piconfig script, I have `@ostr tag,pointsource,location4,pointtype`

But here’s the error:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/3/9303029367c98a67bd0a59c4efe8dca842163f56.png)

Clearly a legit attribute:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/2/0226675fa4d81278421016a2955f959ea3025acf.png)

---

<div class="post-metadata">

**Author:** ![Steve\_Laubach](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/steve_laubach/32/60900_2.png) [@Steve\_Laubach](https://forum.inductiveautomation.com/u/Steve_Laubach)\
**Post date:** [January 7, 2026, 3:04pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/36 "2026-01-07T15:04:58Z")

</div>

I believe RSSQL (Rascal) became FT Transaction Manager. I believe the analog to it in Ignition is SQL Bridge Module.

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [January 7, 2026, 3:24pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/37 "2026-01-07T15:24:11Z")

</div>

> [@Steve\_Laubach](#):
>
> I believe RSSQL (Rascal) became FT Transaction Manager. I believe the analog to it in Ignition is SQL Bridge Module.

I think you responded to the wrong thread.

---

<div class="post-metadata">

**Author:** ![Steve\_Laubach](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/steve_laubach/32/60900_2.png) [@Steve\_Laubach](https://forum.inductiveautomation.com/u/Steve_Laubach)\
**Post date:** [January 7, 2026, 3:28pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/38 "2026-01-07T15:28:33Z")

</div>

I was reading through the thread but I think I responded to an old comment while reading through the thread.

---

<div class="post-metadata">

**Author:** ![Cody\_Morgan](https://avatars.discourse-cdn.com/v4/letter/c/db5fbb/32.png) [@Cody\_Morgan](https://forum.inductiveautomation.com/u/Cody_Morgan)\
**Post date:** [January 8, 2026, 1:16pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/39 "2026-01-08T13:16:50Z")

</div>

What table are you using? Try

```python
@tabl pipoint,classic
@ostr tag,pointsource,location4,pointtype
<..rest of script..>

```

I believe location attributes are "classic" tag attributes, iirc

---

<div class="post-metadata">

**Author:** ![matt6](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@matt6](https://forum.inductiveautomation.com/u/matt6)\
**Post date:** [January 8, 2026, 3:18pm UTC](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643/40 "2026-01-08T15:18:17Z")

</div>

Thanks, I forgot to reply that I found this yesterday. Once I changed to classic, I was able to get all those attributes. Thanks Cody.

[Previous page](https://forum.inductiveautomation.com/t/migrating-factorytalk-historian-data-to-ignition/104643.md?page=1)
