Skip to main content

Manage options (enumerations)

Options (or enumerations) in Atlan allow you to define a set of valid values for custom metadata attributes. Like other objects in the SDK, enumerations implement the builder pattern. This allows you to progressively build-up the list of values you want to create.

Build minimal object needed

For example, to create an enumeration to capture a data quality dimension:

Build enumeration for creation
EnumDef enumDef = EnumDef.creator(
"DataQualityDimensions", // (1)
List.of("Accuracy", "Completeness", "Consistency", "Timeliness", "Validity", "Uniqueness")) // 2
.build(); // (3)
  1. When creating the enumeration, you must provide a name (DataQualityDimensions in this example).
  2. You can then add as many valid values as you want: always as a list of strings.
  3. As with all other builder patterns, you must build() the object you've defined.

Create enumeration from object

Now that the object is built, this enumDef object will have the required information for Atlan to create it. You can then actually create the enumeration in Atlan by calling the create() method on the object itself:

Create the enumeration
EnumDef response = enumDef.create(client); // (1)
  1. The create() operation will actually create the enumeration within Atlan, including all the valid values that were defined as part of it. Because this operation will persist the structure in Atlan, you must provide it an AtlanClient through which to connect to the tenant.

Use enumeration in custom metadata definition

To use an enumeration to restrain the values for an attribute in a custom metadata definition:

Build custom metadata definition for creation
CustomMetadataDef customMetadataDef = CustomMetadataDef.creator("DQ") // (1)
.attributeDef( // (2)
AttributeDef.of(client, "Dimension", // (3)
AtlanCustomAttributePrimitiveType.OPTIONS, // (4)
"DataQualityDimensions", // (5)
false)) // (6)
.options(CustomMetadataOptions.withLogoAsEmoji("🔖")) // (7)
.build(); // (8)
customMetadataDef.create(); // (9)
  1. When creating the custom metadata structure, you must provide a name (DQ in this example).
  2. You can then add as many attributes to that structure as you want.
  3. Each attribute must have a name. Because this operation may need to retrieve information from Atlan, you must provide it an AtlanClient through which to connect to the tenant.
  4. Each attribute must have a type. When using the enumeration as the type (to constrain its possible values), use AtlanCustomAttributePrimitiveType.OPTIONS as the type.
  5. You must then also specify the enumeration that defines the valid values for this attribute. Carrying on the same example, we give the name of the enumeration here: DataQualityDimensions.
  6. You must also specify whether the attribute allows multiple values to be captured on it (true) or only a single value (false).
  7. You can specify how the custom metadata should appear (in this case, with an emoji).
  8. As with all other builder patterns, you must build() the object you've defined.
  9. Then you can create() the custom metadata definition within Atlan, including this enumeration-constrained attribute that was defined as part of it.

Update options (enumerations)

For example, to update our data quality dimension enumeration by adding a new set of valid values.

Update existing enum structure
EnumDef enumDef = EnumDef.updater(
client, "DataQualityDimensions", // (1)
List.of("Unknown", "Others"), // (2)
false // (3)
).build(); // (4)

EnumDef response = enumDef.update(client); // (5)
  1. When updating the existing enumeration, you must provide a name (DataQualityDimensions in this example). Because this operation may need to retrieve information from Atlan, you must provide it an AtlanClient through which to connect to the tenant.
  2. You can then add as many valid values as you want: always as a list of strings.
  3. You must specify whether you want to replace all existing values in the enumeration with the new ones (true), or if the new ones will be appended to the existing set (false).
  4. As with all other builder patterns, you must build() the object you've defined.
  5. The update() operation will actually update the enumeration within Atlan, including all the valid values that were defined as part of it. Because this operation will persist the structure in Atlan, you must provide it an AtlanClient through which to connect to the tenant.

Retrieve options (enumerations)

To retrieve options (enumeration) by name:

Retrieve existing enum structure
TypeDef enumDef = client.typeDefs.get("DataQualityDimensions"); // (1)
  1. To retrieve the enumeration, you need to call the .typeDefs.get() method on a client, with the human-readable name of the enumeration.

Retrieve all options (enumerations)

To retrieve all options (enumeration):

Retrieve all enum structures
TypeDefResponse enumDefs = client.typeDefs.list(AtlanTypeCategory.ENUM); // (1)
  1. To retrieve all enumerations, call the .typeDefs.list() method on a client, with the category AtlanTypeCategory.ENUM.

Delete options (enumerations)

To delete options (enumeration):

Delete enum structure
EnumDef.purge(client, "DataQualityDimensions"); // (1)
  1. You only need to call the EnumDef.purge() method with the human-readable name of the enumeration, and it will be deleted. Because this operation will remove the structure from Atlan, you must provide it an AtlanClient through which to connect to the tenant.
Was this page helpful?