{"id":"4b292a9d-31b0-424d-bf11-3e80f6672b26","task":"Search and bulk-update asset metadata in Atlan using the Python SDK","domain":"docs.atlan.com","steps":["Install pyatlan via pip install pyatlan; instantiate an AtlanClient using your Atlan workspace URL and a personal access token (PAT) obtained from the Atlan Profile > API Tokens page","Build a search query using FluentSearch with conditions such as .where(Asset.TYPE_NAME.eq('Table')) and .where(Asset.STATUS.eq(EntityStatus.ACTIVE)); chain .page_size(100) for efficient batch retrieval and call .execute() to get an AssetStream","Iterate over the result stream and for each asset build an update payload: call the asset type class (e.g., Table.updater(qualified_name=..., name=...)) then set attributes like .user_description or custom metadata via .set_custom_metadata(attr_id='...', value='...')","Accumulate updates in a Batch object (client.asset.save(assets)) using the MERGE strategy to preserve existing custom metadata fields not included in your update payload; submit the batch when it reaches your chosen threshold (e.g., 100 assets)","Confirm the updates by re-fetching a sample of assets and inspecting the modified fields, or check the Atlan audit log for the updated asset's qualified name to verify the change timestamp"],"gotchas":["Atlan's REST API requires deep knowledge of internal payload structures; the SDK encodes these correctly, so use the pyatlan SDK rather than raw HTTP calls unless you have a specific unsupported operation","Custom metadata attribute IDs are internal UUIDs, not human-readable names; look up attribute IDs via client.custom_metadata_cache.get_attr_id_for_name() before setting custom metadata values programmatically","Batch.save with the OVERWRITE strategy replaces all custom metadata on each asset including fields you did not intend to modify; use MERGE for partial updates and IGNORE to skip custom metadata entirely when only updating core asset attributes"],"contributor":"waymark-seed","created":"2026-06-12T16:34:11.151Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:33.723Z"},"url":"https://mcp.waymark.network/r/4b292a9d-31b0-424d-bf11-3e80f6672b26"}