The Ed-Fi Console Bulk Loader (hereafter called the Loader) is a command-line tool used to initially populate an ODS database with XML data conforming to the Ed-Fi Data Standard. It is built using code generation techniques that take into account the database schema as well as the Ed-Fi XSD Schema definitions and metadata. The Loader can also be used during database initialization to create the Minimal ODS Template database by populating Ed-Fi Descriptors and education organizations into an empty ODS database. The Loader project is called EdFi.Ods.BulkLoad.Console.
The Loader accepts the following command-line parameters:
Example Parameter Value
The name of the ODS database to receive the bulk data
The SQL connection string specifying the target database server and user credentials
The path to a folder containing the interchange files referenced by the manifest
The path to a manifest XML file describing the interchange files to load
|/t||API Token||Optional||An API authorization token, used as the security context for a bulk load. When the argument is omitted, no security is applied|
|/r||bulkOperationId||Optional||This option is used to releases a destination database locked during a bulk operation, when a bulk operation was terminated before completion.|
Displays help information
The target ODS database must already exist and be accessible using the “Connection String” (
/c) parameter provided. This database must conform to the same database schema that was used to generate the Loader application.
The manifest file is a simple XML document containing a list of the interchange XML files to load. Because files of the same type are loaded in parallel, it is important that files loaded by the same manifest have distinct XML IDs. Large interchange files may show errors when loading due to the highly parallelized nature of the Loader application. Usually, this is resolved by simply re-running the loader with the same settings.
A manifest file takes the following form:
The manifest file elements are described below:
Interchangeselement must exist at the root, and may only be present one time.
Interchangetag may exist more than once, and contains a single
Filenameelement contains the name of the interchange file to be loaded. This may be a long filename. Note that the file must exist in the directory provided by the “Source Folder” (
/f) command line parameter at runtime.
Typeelement contains the case-insensitive class name for the resource to be loaded.
The load order of data is extremely important when creating a populated ODS database from a minimal one. The load order reflected in the “InterchangeOrderMetadata.xml” file (EdFi.Ods.CodeGen/App_Packages/Ed-Fi/Metadata) contains the correct load order information for the ODS database provided in the Ed-Fi repository. The following load order applies:
Ed-Fi ODS Populated Template
The populated template was generated manually with the Loader using sample XML data contained in the public Ed-Fi-Standard GitHub repository (Ed-Fi-Standard\v2.0\Samples\Sample XML).
Ed-Fi ODS Minimal Template
The minimal template is generated dynamically during the build process. The Ed-Fi descriptors, standards, and education organization sample data are loaded during the "initialize development environment" step of the build process.
This section outlines a few troubleshooting tips related to the Loader.
- The Loader expects valid Ed-Fi Data Standard XML files. If the sample files referenced above load correctly, consider validating the files prior to running the Loader.
- The Loader sometimes has problems loading extremely large datasets (e.g., multiple files of multiple gigabytes). An indication that file size is an issue is when the bulk load operation "completes" but reports thousands of errors. The workaround is to load each file individually by wrapping each file in its own manifest. This approach generally works – but if you continue to receive errors that you suspect to be caused by a large dataset, consider splitting the XML data into smaller files and loading each file in its own manifest.
- The Loader process is an upsert. So, if the Loader reports errors (e.g., when loading an extremely large dataset), simply re-running the loader will add any records that failed do to transient issues.