docstr: Select required columns for each tileable data in the graph.
docstr_tok: ["Select","required","columns","for","each","tileable","data","in","the","graph","."]
code: def _build_context(self) -> None:
      """
      Select required columns for each tileable data in the graph.
      """
      for data in self._graph.topological_iter(reverse=True):
          if self._is_skipped_type(data):
              continue
          self._context[data] = InputColumnSelector.select(
              data, self._get_successor_required_columns(data)
          )
  
imports: from typing import List, Dict, Set, Any, Type, Union, Optional
  import pandas
  from .input_column_selector import InputColumnSelector
  from .self_column_selector import SelfColumnSelector
  from ..core import register_optimization_rule
  from ...core import OptimizationRecord, OptimizationRecordType, OptimizationRule, OptimizationRecords, Optimizer
  from .....core import TileableData
  from .....core.graph import EntityGraph
  from .....dataframe.core import parse_index, BaseSeriesData, BaseDataFrameData
  from .....dataframe.datasource.core import ColumnPruneSupportedDataSourceMixin
  from .....dataframe.groupby.aggregation import DataFrameGroupByAgg
  from .....dataframe.indexing.getitem import DataFrameIndex
  from .....dataframe.merge import DataFrameMerge
  from .....utils import implements
label_desc: Use image node_id 7 for calling the ColumnPruningRule obj's underlying member method code with example usage: obj._build_context() without return types