class_docstr: Get the default column associations for an element instance.
  
  This is used for naming columns in an SQL query consistently. For example, dimensions with links are
  named like <entity link>__<dimension name> e.g. user_id__country, and time dimensions at a different time
  granularity are named <time dimension>__<time granularity> e.g. ds__month. Having a central place to name them will
  make it easier to change this later on. Names generated need to be unique within a query.
  
  It's also important to maintain this format because customers write constraints in SQL assuming this. This
  allows us to stick the constraint in as WHERE clauses without having to parse the constraint SQL.
  
  TODO: Updates are needed for time granularity in time dimensions, ToT for metrics.
  
  The resolve* methods should return the column associations / column names that it should use in queries for the given
  spec.
class_docstr_tok: ["Get","the","default","column","associations","for","an","element","instance",".","This","is","used","for","naming","columns","in","an","SQL","query","consistently",".","For","example",",","dimensions","with","links","are","named","like","<","entity","link",">","__","<","dimension","name",">","e.g",".","user_id__country",",","and","time","dimensions","at","a","different","time","granularity","are","named","<","time","dimension",">","__","<","time","granularity",">","e.g",".","ds__month",".","Having","a","central","place","to","name","them","will","make","it","easier","to","change","this","later","on",".","Names","generated","need","to","be","unique","within","a","query",".","It","'s","also","important","to","maintain","this","format","because","customers","write","constraints","in","SQL","assuming","this",".","This","allows","us","to","stick","the","constraint","in","as","WHERE","clauses","without","having","to","parse","the","constraint","SQL",".","TODO",":","Updates","are","needed","for","time","granularity","in","time","dimensions",",","ToT","for","metrics",".","The","resolve","*","methods","should","return","the","column","associations","\/","column","names","that","it","should","use","in","queries","for","the","given","spec","."]
code: def resolve_spec(
      self, spec: InstanceSpec
  ) -> ColumnAssociation:  # noqa: D
      raise NotImplementedError
  
file_path: metricflow/metricflow/specs/column_assoc.py
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from typing import Any
  from dbt_semantic_interfaces.dataclass_serialization import SerializableDataclass
  from metricflow.specs.specs import InstanceSpec
label_desc: Use image node_id 1 for calling the ColumnAssociationResolver obj's underlying member method code with example usage: obj.resolve_spec(spec) without return types