Skip to main content

Common search fields

These attributes exist on all assets in Atlan. You can therefore use them to search all assets in Atlan.

Look up the asset type you're interested in for a complete list

The complete list of attributes that can be searched is extensive. Rather than list every single attribute here, particularly since they vary based on the kind of asset you're looking for, instead see the full model reference.

Asset.GUID

The globally unique identifier (GUID) of any object in Atlan.

The identifier has no meaning, and is randomly generated, but is guaranteed to uniquely identify only a single asset.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.GUID.eq("25638e8c-0225-46fd-a70c-304117370c4c")) // (2)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the eq() predicate looks for an exact match, in this case against a specific GUID. This uses a term query to exactly match the GUID.

    Equivalent query from Elastic
    Query byGuid = TermQuery.of(t -> t
    .field("__guid")
    .value("25638e8c-0225-46fd-a70c-304117370c4c"))
    ._toQuery();
Run the search
Optional<Asset> asset = index.search(client).stream().findFirst();
if (asset.isPresent())
  1. For a search by GUID, you would expect either no results, or at most a single result.

Asset.CREATED_BY

The Atlan user who created this asset.

If created via API, this will be a unique identifier for the API token used. Otherwise, this will be the username of the user that created the asset through the Atlan UI.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.CREATED_BY.eq("jdoe")) // (2)
.includeOnResults(Asset.CREATED_BY) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the eq() predicate looks for an exact match, in this case against a specific username. This uses a term query to exactly match the username.

    Equivalent query from Elastic
    Query byCreator = TermQuery.of(t -> t
    .field("__createdBy")
    .value("jdoe"))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The creator can be retrieved from a result through .getCreatedBy().

Asset.UPDATED_BY

The Atlan user who last updated the asset.

If updated via API, this will be a unique identifier for the API token used. Otherwise, this will be the username of the user that made the change through the Atlan UI.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.UPDATED_BY.eq("jdoe")) // (2)
.includeOnResults(Asset.UPDATED_BY) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the eq() predicate looks for an exact match, in this case against a specific username. This uses a term query to exactly match the username.

    Equivalent query from Elastic
    Query byUpdater = TermQuery.of(t -> t
    .field("__modifiedBy")
    .value("jdoe"))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The updater can be retrieved from a result through .getUpdatedBy().

Asset.CREATE_TIME

The time (in milliseconds) when the asset was created.

This is stored as an epoch: the milliseconds since January 1, 1970 (UTC).

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.CREATE_TIME.gte(1640995200000L)) // (2)
.includeOnResults(Asset.CREATE_TIME) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the gte() predicate looks for any values greater than or equal to the provided epoch-style date (milliseconds since January 1, 1970). This uses a range query to find any assets created on or after a particular date.

    Equivalent query from Elastic
    Query byCreation = RangeQuery.of(r -> r
    .field("__timestamp")
    .gte(JsonData.of(1640995200000L)))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The creation time can be retrieved from a result through .getCreateTime().

Asset.UPDATE_TIME

The time (in milliseconds) when the asset was last updated.

This is stored as an epoch: the milliseconds since January 1, 1970 (UTC).

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.UPDATE_TIME.gte(1640995200000L)) // (2)
.includeOnResults(Asset.UPDATE_TIME) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the gte() predicate looks for any values greater than or equal to the provided epoch-style date (milliseconds since January 1, 1970). This uses a range query to find any assets modified on or after a particular date.

    Equivalent query from Elastic
    Query byUpdate = RangeQuery.of(r -> r
    .field("__modificationTimestamp")
    .gte(JsonData.of(1640995200000L)))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The last modified time can be retrieved from a result through .getUpdateTime().

Asset.STATUS

The asset status in Atlan. The expected values are:

  • ACTIVE for assets that are available in Atlan.
  • DELETED for assets that are (soft-)deleted in Atlan. These won't appear in the UI or API responses unless explicitly requested.
Only visible for soft-deleted (archived) assets

Hard-deleted, or "purged" assets are fully erased, and therefore no status exists for them.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.STATUS.eq(AtlanStatus.DELETED)) // (2)
.includeOnResults(Asset.STATUS) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the eq() predicate looks for an exact match, in this case against a specific state. This uses a term query to exactly match the state.

    Equivalent query from Elastic
    Query byState = TermQuery.of(t -> t
    .field("__state")
    .value(AtlanStatus.DELETED.getValue()))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The status can be retrieved from a result through .getStatus().

Asset.ATLAN_TAGS

All directly-assigned Atlan tags that exist on an asset.

Internal representation

The Atlan tag names in the index are an Atlan-internal hashed string, not the human-readable name you see in the UI. The value you search for must be this Atlan-internal hashed string.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.ATLAN_TAGS.hasAnyValue()) // (2)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the hasAnyValue() predicate looks for any value in this field, in this case any Atlan tags. This uses an exists query to check that any value exists in the field.

    Equivalent query from Elastic
    Query byAtlanTag = ExistsQuery.of(q -> q
    .field("__traitNames"))
    ._toQuery();
Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The assigned Atlan tags can be retrieved from a result through .getAtlanTags(). Note that the Java SDK will automatically translate these from the internal hashed string representation of Atlan into the Atlan tag names as you would recognize them in the UI.

Asset.PROPAGATED_ATLAN_TAGS

All propagated Atlan tags that exist on an asset. This includes Atlan tags propagated by:

  • Upstream assets in lineage (from source to target)
  • Parent assets (for example, from tables to columns)
  • Linked terms
Internal representation

The Atlan tag names in the index are an Atlan-internal hashed string, not the human-readable name you see in the UI. The value you search for must be this Atlan-internal hashed string.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.PROPAGATED_ATLAN_TAGS.hasAnyValue()) // (2)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the hasAnyValue() predicate looks for any value in this field, in this case any propagated Atlan tags. This uses an exists query to check that any value exists in the field.

    Equivalent query from Elastic
    Query byAtlanTag = ExistsQuery.of(q -> q
    .field("__propagatedTraitNames"))
    ._toQuery();
Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.

  2. The assigned Atlan tags can be retrieved from a result through .getAtlanTags(). Note that the Java SDK will automatically translate these from the internal hashed string representation of Atlan into the Atlan tag names as you would recognize them in the UI.

    How do I distinguish between propagated and direct tags?

From each AtlanTag object you can use .getEntityGuid().

  • If this matches the GUID of the asset, the tag has been directly assigned to the asset
  • If this is a different GUID from the asset, the tag has been propagated to the asset (the GUID indicates the asset the tag was propagated from) :::

Asset.ASSIGNED_TERMS

All terms attached to an asset.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.ASSIGNED_TERMS.hasAnyValue()) // (2)
.includeOnResults(Asset.ASSIGNED_TERMS) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the hasAnyValue() predicate looks for any value in this field, in this case any term assignments. This uses an exists query to check that any value exists in the field.

    Equivalent query from Elastic
    Query byMeaning = ExistsQuery.of(q -> q
    .field("__meanings"))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The assigned Atlan tags can be retrieved from a result through .getAssignedTerms().

Asset.TYPE_NAME

The type of asset. For example, Table, Column, and so on.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.TYPE_NAME.eq(GlossaryTerm.TYPE_NAME)) // (2)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. The Java SDK provides Asset.TYPE_NAME.eq() and Asset.TYPE_NAME.in() to restrict assets to one or more specific types.

    Equivalent query from Elastic
    Query byType = TermQuery.of(t -> t
    .field("__typeName.keyword")
    .value(GlossaryTerm.TYPE_NAME))
    ._toQuery();
Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The type name can be retrieved from a result through .getTypeName().

Asset.SUPER_TYPE_NAMES

All super types of an asset.

For example:

  • Table has super types of SQL, Catalog, Asset and Referenceable.
  • LookerField has super types of Looker, BI, Catalog, Asset and Referenceable.
Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.SUPER_TYPE_NAMES.eq(ISQL.TYPE_NAME)) // (2)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. The Java SDK provides Asset.SUPER_TYPE_NAMES.eq() and Asset.SUPER_TYPE_NAMES.in() to restrict assets to subtypes of one or more specific supertypes.

    In the Java SDK, supertypes are interfaces

Note that in the Java SDK, you can find the type name for most supertypes through an interface (prefixing I in front of the supertype name to get the appropriate Java interface class). :::

Equivalent query from Elastic
Query bySuperType = TermQuery.of(t -> t
.field("__superTypeNames.keyword")
.value(ISQL.TYPE_NAME))
._toQuery();
Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The type name can be retrieved from a result through .getTypeName(). Note that in this example the results list will contain all subtypes of SQL: databases, schemas, tables, views, columns, and so on.

Asset.HAS_LINEAGE

Flag that's true if an asset has at least one process upstream or downstream. Otherwise, it will be false.

Processes are also included

Process assets themselves will also be included in the true results, unless excluded by some other search criteria.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.HAS_LINEAGE.eq(true)) // (2)
.includeOnResults(Asset.HAS_LINEAGE) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the eq() predicate looks for any assets with the lineage flag set to true. This uses a term query to exactly match a true value.

    Equivalent query from Elastic
    Query byLineage = TermQuery.of(t -> t
    .field("__hasLineage")
    .value(true))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The lineage status can be retrieved from a result through .getHasLineage().

Asset.QUALIFIED_NAME

The unique fully-qualified name of any asset in Atlan.

Qualified names are often constructed from the identity characteristics of an asset. For example, included in a database's qualifiedName is the connection that crawled the database. (And included in a schema's qualifiedName is the database it exists in, and therefore it also implicitly includes the connection's qualifiedName since the database's qualifiedName includes it.)

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.QUALIFIED_NAME.startsWith("default/snowflake/1662194632")) // (2)
.includeOnResults(Asset.QUALIFIED_NAME) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the startsWith() predicate looks for any value that starts with the provided string, in this case matching any assets within this connection. This uses a prefix query to match values that start with a particular string rather than the entire value.

    Equivalent query from Elastic
    Query byQN = PrefixQuery.of(p -> p
    .field("qualifiedName")
    .value("default/snowflake/1662194632"))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The qualifiedName can be retrieved from a result through .getQualifiedName().

Asset.NAME

The name of the asset in Atlan, as it appears in the UI.

Build the query and request
IndexSearchRequest index = client.assets.select() // (1)
.where(Asset.NAME.eq("dev", true)) // (2)
.includeOnResults(Asset.NAME) // (3)
.toRequest();
  1. You can search across all assets using the select() method of the assets member on any client. (For details, see Searching for assets.)

  2. Then provide a predicate and value to search. In this example the eq() predicate looks for an exact match (case-insensitively). This uses a term query to exactly match the names, but ignores case due to the second parameter being true.

    Equivalent query from Elastic
    Query byName = TermQuery.of(t -> t
    .field("name.keyword")
    .value("dev")
    .caseInsensitive(true))
    ._toQuery();
  3. To make sure the details of this field are included in each result, add the field to includeOnResults().

Run the search
for (Asset result : index.search(client))
  1. For details, see Searching for assets.
  2. The name can be retrieved from a result through .getName().
Was this page helpful?