User Tools

Site Tools


Replicating ServiceNow's Parent Child Hierarchy

Our Replicator tool can work in several ways with how ServiceNow handles Parent and Child classes. How we replicate that data out will depend on how it will be used and where it is heading.

The default behavior is to Share the child class only, detailed below. There are options in the Bulk Share and the Dynamic Share to do otherwise.

Example Overview

To start here is an example of a small subset of the CMDB structure.

Example CMDB Structure

If we have a Linux Server (cmdb_ci_linux_server) traced in red, then that record will exist in the leaf, or child most class, as well as at every single parent level. So that same record can be found in cmdb, cmdb_ci, cmdb_ci_hardware, …, containing the data that pertains to that level.

In other words the record for Linux Server will have all the data that the parent tables would have and more. The parent tables would have a subset of data the child table would have. Every Server is a Computer, but not every Computer is a Server.

Sharing the Base Table

If you would like to share a parent table / base table explicitly this is what you will get. If you perform a share of the cmdb_ci record you will get every single CI record, as the cmdb_ci record. So for our example you will get a cmdb_ci record for the linux server, consisting of just the initial 69 columns that cmdb_ci has.

Sharing the Base Table

You would not do this if you are sending data to another ServiceNow instance. If you are sending to another ServiceNow instance you should send the leaf (child-most) and ServiceNow will generate the intermediate records. Otherwise you will have an Linux CI record, without any Linux CI data.

You would do this if you are sending data to a database and you ONLY care about those core values and you do not care about the hundreds of child tables of cmdb_ci. You just want it all in one table. Note, everything you can do with cmdb_ci, you can do with the child class.

Sharing Only the Child Tables

Sharing only the child tables can be also considered as sharing the leaf of each record. You are sharing the record based on what it believes it is, based on its system class name. So a Linux Server would be shared as a Linux Server. If you had a parent record whose class was that parent, i.e. if you had a CI for Hardware, that record would be shared as a Hardware record.

Sharing only the leafs

This is the default behavior and should be used when Replicating to another ServiceNow instance. This will ensure the proper chain is created by ServiceNow.

When Replicating cmdb_ci to a database you will see all the different tables, where 1 record would belong in only 1 of those tables.

Sharing All of the Child Tables

Sharing all of the child tables is a more expensive endeavor. As for a single record you are sending out 1 messages for each level below. So if you performed a Bulk Share on cmdb_ci to share all child tables, our example of a Linux Server would generate 5 messages. A Hardware record would generate 2.

If you performed the Bulk Share on cmdb_ci_computer it would still traverse down only. So a Linux Server would generate 3 messages in this example.

Sharing all the children

This behavior should not be used when Replicating to ServiceNow. ServiceNow will handle creating this structure on its own. Doing otherwise may actually cause some of the records to not replicate correctly.

If you plan to do this for Replication to a database you should take note of the scale that this will create. This should only be done when necessary. Additionally V3.21.0 of the Update Set provides major throughput increases for using this. If you want to utilize this strategy we recommend you upgrade to this version or above.

replicator_servicenow_hierarchy.txt · Last modified: 2019/08/27 09:48 by paul