With its Command Line Interface (CLI), Hackolade truly supports an agile development approach leveraging the flexibility of NoSQL dynamic schemas.  Some Hackolade customers use this capability nightly in a batch process to identify attributes and structures that may have appeared in the data since the last run.  During a nightly run of the reverse-engineering function, a much larger dataset can be queried as a basis for document sampling, hence making schema inference more precise. Such capability can be useful in a data governance context to properly document the semantics and publish a thorough data dictionary for end users.  It can also be used in the context of compliance with privacy laws to make sure that the company does not store data that it is not supposed to store.  There are many more examples of how to use this functionality.


It is often helpful, in order to understand how to set the different CLI arguments, to first run the equivalent function in the GUI application.


It is easier to run the CLI from the directory where the Hackolade executable is installed, from a terminal program:

  • Windows:
    • cmd command line: all commands below should be preceded by start /wait
    • PowerShell: all commands below should be preceded by Start-Process -wait
  • Mac and Linux: terminal emulator or common shell programs:
    • all commands below should be preceded by open and contain --args and possibly use the -W flag, e.g.:
      • open Hackolade.app -W --args obfusc --sourcemodel=/fullpathtofile/model.json --targetmodel=/fullpathtofile/model_obf.json


To take full advantage of the capability, you may run the CLI from scheduled batch files.  


Note: a properly licensed copy of Hackolade is required to run the CLI.  The CLI functionality is only available in the Professional and Trial editions of Hackolade.


Below is the current list of Hackolade CLI commands.  Additional commands may be added at a later date.

Command

Purpose

genDoc

Generate documentation for a Hackolade model, either in HTML or PDF format

revEng

Reverse-engineer a database instance or script file to infer the schema of the selected collections/tables

revEngJSON

Reverse-engineer JSON  Schema or documents

revEngDDL

Reverse-engineer RDBMS data definition language files with .sql extensions

revEngXSD

Reverse-engineer XSD files with .xsd extensions

compMod

Compare two Hackolade models to detect differences, and optionally merge them

forwEng

Forward-engineer structure created with the application to dynamically generate the schema of the selected entities.  Or forward-engineer JSON Schema or a sample JSON data document

forwEngAPI

Forward-engineer Swagger or OpenAPI model from merge of a source data model and a user-defined template

obfusc

Copy a model, and garble sensitive properties: business name, technical name, description, comments, enumeration. 

Use if you need to send a model for troubleshooting but don't want to disclose sensitive aspects of the model.

help

Display commands and their arguments

performance

Records timestamps of application startup steps for performance troubleshooting

version

Display application version



Usage:        hackolade command [--arguments]


1) genDoc

The genDoc command lets you invoke the generation of a documentation file, either in HTML or PDF format, for a specified existing Hackolade model.


Usage:        hackolade genDoc [--arguments]


Argument

Required

Purpose

--format=<HTML | PDF>

Y

Specify format, currently either HTML, MARKDOWN, or PDF

--model=<file>*

Y

Full path and file name for source Hackolade model for which documentation is being generated.  Extension .json is optional

--doc=<file>*

Y

Full path and file name for documentation.  Extension .html , .md, or .pdf is optional

--logo=<file>*

N

Full path and file name for custom logo file.  If omitted, Hackolade logo is used

--modelDiagram=<true | false>

N

Include model diagram [default: true]

--sepContDiag=<true | false>

N

Include separate container diagrams (database, region, buckets, keyspaces...)  [default: true]

--entityDiagrams=<true | false>

N

Include entity hierarchical schema diagrams [default: true]

--attribTree=<all | complex | none>

N

Include individual hierarchical schema view for all attributes [all], for complex attributes only [complex], or for no attributes [none]. [default: all]

--properties=<all | notNull | none>

N

Include all field properties [all], only field properties with information [notnull], or no field properties [none]. [default: all]

--relationships=<true | false>

N

Include Relationships [default: true]

--JSONSchema=<true | false>

N

Include JSON Schema code [default: true]

--JSONData=<true | false>

N

Include JSON Data sample [default: true]

--entities="<containerName>: [<entity1>,<entity2>,…]"

N

Specify container(s) to include in documentation [default: all] and an array of entities [default: all]

- MongoDB: container = dbs; entity = collection

- DynamoDB: container = not applicable; entity = table

- Couchbase: container = bucket; entity = document kind

- Cosmos DB: container = collection; entity = document type

- plain JSON: container = group; entity = document

The value is a string surrounded by double quotes (").  Entities are represented as an array surrounded by square brackets ([]), and are separated by a comma (,).  The entities array is separated from the container name by a colon (:).   Containers are separated by semi-colons (;).

--views="[<view1>, <view2>, ...]"

N

In MongoDB only, specify view(s) to include in documentation [default: all]

The value is a string surrounded by double quotes (").  Views are represented as an array surrounded by square brackets ([]), and are separated by a comma (,).

--openDoc=<true | false>

N

Specify whether to open the generated document or not upon completion of generation. [default: false]

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


Simple example: using all default options:  

start /wait hackolade genDoc --format=HTML --model=C:\Users\Public\Bitbucket\hackolade\schemas\MongoDB\noaa.json
--doc=C:\Users\Public\Documents\Hackolade\Documentation\noaa.html


More complex example:

start /wait C:\PROGRA~1\Hackolade\hackolade genDoc --format=HTML --model=C:\Users\Public\Bitbucket\hackolade\schemas\Couchbase\travel-sample.json
--doc=C\Users\Public\Documents\Hackolade\Documentation\travel-sample.html --logo="C\Users\Public\Documents\Hackolade\Documentation\couchbase logo.png"
--attribTree=complex --JSONSchema=false --JSONData=false --properties=notNull --entities="travel-sample: airport, airline, route"


Note: If the path contains spaces, Windows generates an error message when running the CLI from another directory than the one where the Hackolade executable was installed, even if using quotes, e.g.: "C:\Program Files\Hackolade\hackolade" .  The workaround, assuming:

is to to use the 8.3 command C:\PROGRA~1\Hackolade\hackolade, as displayed above.

2) revEng

The revEng command allows to trigger a reverse-engineering process of a database instance, as described in this page, or script file.


Usage:        hackolade revEng [--arguments]


Argument

Required

Purpose

--target=<target>

Y

Native target for model: JSON, MONGODB, DYNAMODB, COUCHBASE, or plugin target: ArangoDB, Avro, CASSANDRA, COSMOSDB-SQL, COSMOSDB-MONGO, ELASTICSEARCH, EventBridge, Glue, HBase, HIVE, JOI, MSSQLServer; NEO4J, OPENAPI, PARQUET, ScyllaDB, Snowflake, SWAGGER, Synapse, TinkerPop

--connectName=<connection>

Y if from instance

Name of connection settings saved in the Hackolade instance where CLI is invoked.

Or use --connectFile instead.

--connectFile=<file>*

N

Full file path of connection config file (you don't need to use it when connect name is specified).  The simplest way to create a connection file is to create a connection in the GUI application, then export the connection settings to file, encrypted or not.

--files="<file1>;<file2>..."

Y if from file

List of full file path of target scripts (MongoDB validator, Cassandra CQL, Hive HQL, Avro schema, Neo4j Cypher, Swagger documentation, etc...)  from which reverse-engineering process has to be performed. Accepts paths divided by semicolon (schema1.avcs;schema2.avcs) when reverse-engineering from Avro/Parquet with combining schemas into one.

--model=<file>*

Y

Full path and file name for target Hackolade model into which reverse-engineering process has to be converted.  Extension .json is optional

--samplingMethod=< abs | re l>

N

Specify sampling method, either absolute number of documents or relative percentage.  [default: abs]

--samplingValue=<x>

N

If samplingMethod=abs: positive integer between 1 and 100000 [default: 1000]

If samplingMethod=rel: positive integer between 1 and 100 [default: 1]

Warning: for obvious performance and response time reasons, be reasonable with these parameters when used on large entities!  What's the point of sampling 10% of 1B+ identical documents?...

--fieldOrder=< keep | alpha >

N

Specify whether to preserve order of fields in sampled document or rearrange in alpha order
[default: keep]

--inferRelationships=< true | false >

N

For MongoDB only, optionally specify whether to attempt relationship inference based on ObjectID data type.  

--query="{<aggregation pipeline expression>}"

N

For MongoDB only, specify query criteria for sampling.  [string] [default: "{}"]

--sort="{<aggregation pipeline expression>}"

N

For MongoDB only, specify sort criteria for sampling.  [default: "{}"]

--update=< true | false >

N

Specify whether to update existing model.  If false, existing model will be overwritten [default: false]

--conflictResolution< keepBoth | replace | merge | cancel >

N

Specify conflict resolution strategy for containers and entities [default: keepBoth]  [values: "keepBoth", "replace", "merge", "cancel"] [default: "keepBoth"]

--selectedObjects=
"<containerName>: [<entity1>,<entity2>,…]"

N

Specify container(s) to include in documentation [default: all] and an array of entities [default: all]

- MongoDB: container = dbs; entity = collection

- DynamoDB: container = not applicable; entity = table

- Couchbase: container = bucket; entity = document kind

- Cosmos DB: container = collection; entity = document type

- Elasticsearch: container = index: entity = type

- HBase: container =  namespace; entity = table

The value is a string surrounded by double quotes (").  Entities are represented as an array surrounded by square brackets ([]), and are separated by a comma (,).  The entities array is separated from the container name by a colon (:).  Containers are separated by semi-colons (;).

--documentKinds=
"<bucketName>: <docKindField>"

N

In Couchbase only, for each bucket, you must specify the field used to distinguish the different objects stored in the same bucket.

--entityVersion=<version number>

N

In EventBridge only, specify schema version [default: latest]

--includeEmpty=< true | false >

N

In MongoDB only, specify whether to include empty collections [default: false]

--includeSystem=< true | false >

N

In MongoDB only, specify whether to include system collections [default: false]

--includeViews=< true | false >

N

In MongoDB only, specify whether to include views [default: true]

--selectedDB=<database name>

N

In Cosmos DB, you must specify the name of the database which should be reverse-engineered. [default: the first database in the list]

--pagination=< 0 | 1 | ...>

N

In couchbase, you must specify the number of documents per page for pagination. If value = 0, pagination is disabled  [default: 0]

--detectPattern=< true | false >

N

Specify whether to automatically convert pattern fields [default: false]

--combineSchemas=< true | false >

N

For Avro and Parquet only.  Specify whether to combine the schemas of multiple files, or keep one schema per file reverse-engineered [default: false]

--namingConventions=< business | technical >

N

If application parameters are set to enable Naming Conventions, specify whether to reverse-engineer source attributes as business names or as technical names.  Conversions will be applied according to your Naming Conventions parameters.  

[default: business, if Naming Conventions are disabled; or

technical, if Naming Conventions are enabled in application Tools > Options]

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


MongoDB example:  

hackolade revEng --connectName=local --target=MONGODB --samplingMethod=abs --samplingValue=1000
--model=C:\Users\Public\Bitbucket\hackolade\schemas\MongoDB\yelp.json --includeEmpty=true --selectedObjects="yelp" --fieldOrder=keep


DynamoDB example:  

"C:\Program Files\Hackolade\hackolade" revEng --connectName=local --target=DYNAMODB --samplingMethod=abs --samplingValue=1000
--model=C:\Users\Public\Bitbucket\hackolade\schemas\DynamoDB\entertainment.json --includeEmpty=false --selectedObjects="[Movies, Music]" --fieldOrder=alpha


Couchbase example:  

"C:\Program Files\Hackolade\hackolade" revEng --connectName=local --target=COUCHBASE --samplingMethod=abs --samplingValue=2500
--model=C:\Users\Public\Bitbucket\hackolade\schemas\Couchbase\travel-sample.json --includeEmpty=false --selectedObjects="travel-sample: [airline, airport]"  
--documentKinds="travel-sample: type" --fieldOrder=keep


Cosmos DB example:

start /wait hackolade reveng --target=COSMOSDB-DOC --connectName=azure --model=travel.json --selectedObjects="travel" --documentKinds="travel:type"


Note: If the path contains spaces, Windows generates an error message when running the CLI from another directory than the one where the Hackolade executable was installed, even if using quotes, e.g.: "C:\Program Files\Hackolade\hackolade" .  The workaround, assuming:

is to to use the 8.3 command C:\PROGRA~1\Hackolade\hackolade, as displayed above.

3) revEngJSON

The revEngJSON command allows to trigger a reverse-engineering process of a JSON document or JSON Schema file, as described in this page.


Usage:        hackolade revEngJSON [--arguments]


Argument

Required

Purpose

--target=<target>

Y

Native target for model: JSON, MONGODB, DYNAMODB, COUCHBASE, or plugin target: ArangoDB, Avro, CASSANDRA, COSMOSDB-SQL, COSMOSDB-MONGO, ELASTICSEARCH, EventBridge, Glue, HBase, HIVE, JOI, MSSQLServer; NEO4J, OPENAPI, PARQUET, ScyllaDB, Snowflake, SWAGGER, Synapse, TinkerPop

--file=<file>*

Y

Specify the directory path and file name where the schema file to be reverse-engineered is located (file type must be compatible with selected target.)

--model=<file>*

Y

Full path and file name for target Hackolade model into which reverse-engineering process has to be converted.  Extension .json is optional

--entityHandling=< ERD | definitions >

N

Specify whether must be reverse-engineered as entities in ERD or as model definitions [default: ERD]

--container=<containerName>

N

Specify a container name into which reverse-engineered entities will be inserted [default=""]

--normalization=< true | false >

N

Only applicable to RDBMS.  Specify whether complex data types should be normalized into separate entities [default: true]

--conflictResolution=< keepBoth | replace | merge | cancel >

N

Specify conflict strategy for containers and entities [default: keepBoth]

--ndjson=< true | false >

N

Specify whether the file is contains NDJSON to leverage sampling options [default: false]

--namingConventions=< business | technical >

N

If application parameters are set to enable Naming Conventions, specify whether to reverse-engineer source attributes as business names or as technical names.  Conversions will be applied according to your Naming Conventions parameters.  

[default: business, if Naming Conventions are disabled; or

technical, if Naming Conventions are enabled in application Tools > Options]

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


4) revEngDDL

The revEngDDL command allows to trigger a reverse-engineering process of a Data Definition Language file from a database instance, as described in this page.


Usage:        hackolade revEngDDL [--arguments]


Argument

Required

Purpose

--target=<target>

Y

Native target for model: MONGODB, DYNAMODB, COUCHBASE, or plugin target: ArangoDB, Avro, CASSANDRA, COSMOSDB-SQL, COSMOSDB-MONGO, ELASTICSEARCH, EventBridge, Glue, HBase, HIVE, JOI, MSSQLServer; NEO4J, OPENAPI, PARQUET, ScyllaDB, Snowflake, SWAGGER, Synapse, TinkerPop

--file=<file>*

Y

Specify the directory path and file name where the schema file to be reverse-engineered is located (file type must be compatible with selected target.)

--model=<file>*

Y

Full path and file name for target Hackolade model into which reverse-engineering process has to be converted.  Extension .json is optional

--entityHandling=< ERD | definitions >

N

Specify whether must be reverse-engineered as entities in ERD or as model definitions [default: ERD]

--container=<containerName>

N

Specify a container name into which reverse-engineered entities will be inserted [default=""]

--database=< oracle | mysql | mssqlserver | db2 | postgres | informix | snowflake | teradata >

Y

Name of database of DDL script

--update=< true | false >

N

Specify whether to update existing model.  If false, existing model will be overwritten [default: false]

--conflictResolution=< keepBoth | replace | merge | cancel >

N

Specify conflict strategy for containers and entities [default: keepBoth]

--namingConventions=< business | technical >

N

If application parameters are set to enable Naming Conventions, specify whether to reverse-engineer source attributes as business names or as technical names.  Conversions will be applied according to your Naming Conventions parameters.  

[default: business, if Naming Conventions are disabled; or

technical, if Naming Conventions are enabled in application Tools > Options]

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


5) revEngXSD

The revEngXSD command allows to trigger a reverse-engineering process of an XMS schema (XSD).


Usage:        hackolade revEngXSD [--arguments]


Argument

Required

Purpose

--target=<target>

Y

Native target for model: MONGODB, DYNAMODB, COUCHBASE, or plugin target: ArangoDB, Avro, CASSANDRA, COSMOSDB-SQL, COSMOSDB-MONGO, ELASTICSEARCH, EventBridge, Glue, HBase, HIVE, JOI, MSSQLServer; NEO4J, OPENAPI, PARQUET, ScyllaDB, Snowflake, SWAGGER, Synapse, TinkerPop

--file=<file>*

Y

Specify the directory path and file name where the schema file to be reverse-engineered is located (file type must be compatible with selected target.)

--model=<file>*

Y

Full path and file name for target Hackolade model into which reverse-engineering process has to be converted.  Extension .json is optional

--entityHandling=< ERD | definitions >

N

Specify whether must be reverse-engineered as entities in ERD or as model definitions [default: ERD]

--container=<containerName>

N

Specify a container name into which reverse-engineered entities will be inserted [default=""]

--conflictResolution=< keepBoth | replace | merge | cancel >

N

Specify conflict strategy for containers and entities [default: keepBoth]

--namingConventions=< business | technical >

N

If application parameters are set to enable Naming Conventions, specify whether to reverse-engineer source attributes as business names or as technical names.  Conversions will be applied according to your Naming Conventions parameters.  

[default: business, if Naming Conventions are disabled; or

technical, if Naming Conventions are enabled in application Tools > Options]

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


6) compMod

The compMod command lets you compare two (2) Hackolade models and derive a delta model file with additions, deletions, and modifications of fields and structures.


When merging into a targetModel, you should keep in mind that:

- merging is an "all or nothing" proposition

- handling of modifications is impacted by the order in which model1 and model 2 are assigned, with model2 values being kept in the merged model


Usage:        hackolade compMod [--arguments]


Argument

Required

Purpose

--model1=<file>*

Y

Full path and file name for baseline Hackolade model with which comparison will be performed.  Extension .json is optional

--model2=<file>*

Y

Full path and file name for comparison Hackolade model.  Extension .json is optional.  Both models need to be of the same DB target.  Extension .json is optional

--deltaModel=<file>*

Y

Full path and file name for differences in model comparisons.  The resulting file is a Hackolade model.  Extension .json is optional

--ignoreGUIDs=<true | false>

N

Specify whether to include GUIDs in comparison.  [default: true]

--ignoreExtraProperties=

<true | false>

N

Specify whether to include in comparison the Hackolade properties that cannot typically be derived from the data, such as descriptions, comments, samples, defaults, and foreign key-related infos.  [default: true]

--ignoreOrder=<true | false>

N

Specify whether to detect changes in order of fields [default: true]

--targetModel=<file>*

N

Full path and file name for the Hackolade model resulting from the merge of model1 and model2.  If specified, a new Hackolade model is created with a merge of the 2 original models.

Extension .json is optional

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


Note: unless GUID’s are used for the comparison, a change in a field name will result in an addition plus a deletion.  Same for a change in an entity name.


Example:

C:\PROGRA~1\Hackolade\hackolade compMod --model1=yesterdaysModel --model2=todaysModel --deltaModel=todaysDeltaModel --ignoreGUIDs=true
--ignoreExtraProperties=true --ignoreOrder=true


Note: If the path contains spaces, Windows generates an error message when running the CLI from another directory than the one where the Hackolade executable was installed, even if using quotes, e.g.: "C:\Program Files\Hackolade\hackolade" .  The workaround, assuming:

is to to use the 8.3 command C:\PROGRA~1\Hackolade\hackolade, as displayed above.


Structure of resulting delta model file:

A delta model file may contain any combination of multiple additions, deletions, and modifications.  Deeply nested fields are referenced through their structure.  To merge newly added fields, open your baseline model in Hackolade, then either copy/paste from the delta model, or reference the new field via an external reference to the delta model, then convert the reference into attributes.


7) forwEng

Forward engineer structure created with the application to dynamically generate the schema of the selected entities.


Usage:        hackolade forwEng [--arguments]


Argument

Required

Purpose

--model=<file>*

Y

Full path and file name for target Hackolade model. Extension .json is optional

--path=<file>*

Y

Specify the directory path where the forward-engineered files will be created.

--outputType=< jsonschema | jsondata | script | ddl >

Y

Specify the type of output (JSON Schema, sample JSON data, or script) [default: jsonschema]

This allows output of the script corresponding to the target of the specified model, e.g.: CQL for Cassandra, HQL for Hive, etc...

–jsonSchemaCompliance=< standard | full | extended >

N

Specify JSON Schema compliance: standard for only JSON Schema keywords and data types, full for additional custom properties, or extended for target-specific data types and internal properties.  [default: standard]

--jsonschemaversion=< draft-04 | draft 06 | draft-07 | 2019-09 >

N

Specify JSON Schema specification version [default: draft-04]   [values: draft-04, draft-06, draft-07, 2019-09] [default: "draft-04"]

--format=< format >

N

Output target-specific schema format:

MongoDB: ["shell", "mongoose","js"]

Couchbase: ["ottoman", "n1ql"]

Avro: ["avroSchema", "schemaRegistry"]

Glue: ["awsCLI", "HiveQL"]

OpenAPI:   ["json", "yaml"]

Swagger:   ["json", "yaml"]

--jsonschemacompliance=

< standard | full | extended >

N

Specify JSON Schema compliance: standard for only JSON Schema keywords and data types, full for additional custom properties, or extended for target-specific data types and internal properties.

[default: standard]

--selectedObjects=

"<containerName>: [<entity1>,<entity2>,…]"

N

Specify array of entities to include to result from model [default: all]

(deprecated)
--resolvDefs=<true | false>

N

If outputType=jsonschema, specify whether to output resolved definitions (true) or referenced definitions (false) [default=true]

--defsStrategy==

< resolved | referenced | internal >

N

If outputType=jsonschema, specify whether to output resolved, referenced or internal definitions  [values: "resolved", "referenced", "internal"] [default: "resolved"]

--updateExtDefs=<true | false>

N

When reference to external definition, update current model to ensure latest changes are included. [default: false]

--minify=<true | false>

N

For JSON document/schema and Avro Schema, minify output instead of default beautifying format [default=false]

--batchScriptSeparator=< ; | GO >

N

For SQL Server, Azure SQL, and Synapse, specify if you wish a different separator than the default semi-column ";" or the "GO" separator [choices: ";", "GO"] [default: ";"]

--validateSchema=<true | false>

N

If output script supports validation (JSON Schema, Avro Schema, Swagger, OpenAPI,...), run respective validator, and generate error message if validation failed. [default: false]

--scriptType=<create | update>

N

For Cassandra, if outputType=script, specify type of forward engineering script [default:create]

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


Example:

C:\PROGRA~1\Hackolade\hackolade forwEng --model=masterdata.json --path=masterdata.cql  


Note: If the path contains spaces, Windows generates an error message when running the CLI from another directory than the one where the Hackolade executable was installed, even if using quotes, e.g.: "C:\Program Files\Hackolade\hackolade" .  The workaround, assuming:

is to to use the 8.3 command C:\PROGRA~1\Hackolade\hackolade, as displayed above.



8) forwEngAPI

The forwEngAPI command lets you generate a Swagger or OpenAPI model from the merging of a source data model and a user-defined template


Usage:        hackolade obfusc [--arguments]


Argument

Required

Purpose

--sourcemodel=<file>*

Y

Full path and file name for the Hackolade model to to serve as a basis for the API generation.  Extension .json is optional

--selectedObjects=

"<containerName>: [<entity1>,<entity2>,…]"

N

Specify array of entities to include to result from model [default: all]

--APItemplate=<file>*

Y

Full path and file name for the template to be used during API generation to create the specified resources for each selected entity of the source model.  The template can be a Hackolade model, or a Swagger or OpenAPI documentation file in either JSON or YAML.

--targetModelFormat=< Swagger | OpenAPI >

N

Specify the target of the target model.  ["Swagger" or "OpenAPI"] [default: OpenAPI]

--targetmodel=<file>*

Y

Full path and file name for the obfuscated Hackolade model.  Extension .json is optional. 

--APIdocFile=<file>*

N

If specified, the corresponding documentation file will be generated in the chose model format.  Specify the full path and file name for the generated documentation file.

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


Example:

C:\PROGRA~1\Hackolade\hackolade forwEngAPI --sourcemodel=masterdata --APItemplate=OAS_generation --targetmodel=masterdataAPI  --APIdocFile=masterdata_OpenAPI


Note: If the path contains spaces, Windows generates an error message when running the CLI from another directory than the one where the Hackolade executable was installed, even if using quotes, e.g.: "C:\Program Files\Hackolade\hackolade" .  The workaround, assuming:

is to to use the 8.3 command C:\PROGRA~1\Hackolade\hackolade, as displayed above.


9) obfusc


The obfusc command lets you garble sensitive properties: business name, technical name, description, comments, enumeration.  Use if you need to send a model for troubleshooting but don't want to disclose sensitive aspects of the model.


Usage:        hackolade obfusc [--arguments]


Argument

Required

Purpose

--sourcemodel=<file>*

Y

Full path and file name for the Hackolade model to be obfuscated.  Extension .json is optional

--targetmodel=<file>*

Y

Full path and file name for the obfuscated Hackolade model.  Extension .json is optional. 

--logLevel=< 1 | 2 | 3 | 4 >

N

1 = no spinner, no info, no error messages

2 = no spinner, no info

3 = no spinner

4 = full output

[default: 4]

*: If path and/or file name contains blanks, the value must be surrounded by double quotes (“)  Path can be ignored if file is in local directory.


Example:

C:\PROGRA~1\Hackolade\hackolade obfusc --sourcemodel=masterdata --targetmodel=garbeledmasterdata  


Note: If the path contains spaces, Windows generates an error message when running the CLI from another directory than the one where the Hackolade executable was installed, even if using quotes, e.g.: "C:\Program Files\Hackolade\hackolade" .  The workaround, assuming:

is to to use the 8.3 command C:\PROGRA~1\Hackolade\hackolade, as displayed above.


10) help

The --help argument displays the version number of Hackolade being invoked.


Usage:        start /wait hackolade --help


11) performance

The --performance argument records timestamps of application startup steps for performance troubleshooting.  Log can be found in file HackoladePerformance.log in directory C:\Users\%username%\AppData\Roaming\HackoladeLogs (Windows) or folder Users/$USER/Documents/HackoladeLogs (Mac/Linux)


Usage:        start /wait hackolade --performance


12) version

The --version argument displays the version number of Hackolade being invoked.


Usage:        start /wait hackolade --version