class_docstr: Visits the SQL query plan to simplify sub-queries. On each visit, return a simplified node.
  
  Unlike SqlSubQueryReducerVisitor, this will re-write expressions to realize more reductions.
code: def _get_column_replacements(
      parent_node: SqlSelectStatementNode, parent_node_alias: str
  ) -> SqlColumnReplacements:
      column_replacements = {}
      for select_column in parent_node.select_columns:
          column_reference = SqlColumnReference(
              table_alias=parent_node_alias,
              column_name=select_column.column_alias,
          )
          column_replacements[column_reference] = select_column.expr
  
      return SqlColumnReplacements(column_replacements)
  
imports: from __future__ import annotations
  import logging
  from dataclasses import dataclass
  from typing import List, Optional, Sequence, Tuple
  from metricflow.sql.optimizer.sql_query_plan_optimizer import SqlQueryPlanOptimizer
  from metricflow.sql.sql_exprs import SqlColumnAliasReferenceExpression, SqlColumnReference, SqlColumnReplacements, SqlExpressionNode, SqlExpressionTreeLineage, SqlLogicalExpression, SqlLogicalOperator
  from metricflow.sql.sql_plan import SqlJoinDescription, SqlOrderByDescription, SqlQueryPlanNode, SqlQueryPlanNodeVisitor, SqlSelectColumn, SqlSelectQueryFromClauseNode, SqlSelectStatementNode, SqlTableFromClauseNode
label_desc: Use image node_id 9 for calling the SqlRewritingSubQueryReducerVisitor obj's underlying member method code with example usage: obj._get_column_replacements(parent_node, parent_node_alias) and returns: SqlColumnReplacements