class_docstr: A node (aka task) in the DAG representation of the execution plan.
  
  In the DAG, a node's parents represent the tasks that need to be run before the node can run. Using the term task
  for these nodes as it seems more intuitive.
docstr: If this runs a SQL query, return the associated SQL.
docstr_tok: ["If","this","runs","a","SQL","query",",","return","the","associated","SQL","."]
code: def sql_query(self) -> Optional[SqlQuery]:
      """If this runs a SQL query, return the associated SQL."""
      pass
  
imports: from __future__ import annotations
  import logging
  import textwrap
  import time
  from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from typing import List, Optional, Sequence, Tuple
  import jinja2
  import pandas
  from metricflow.dag.id_generation import EXEC_NODE_READ_SQL_QUERY, EXEC_NODE_WRITE_TO_TABLE
  from metricflow.dag.mf_dag import DagId, DagNode, DisplayedProperty, MetricFlowDag, NodeId
  from metricflow.dataflow.sql_table import SqlTable
  from metricflow.protocols.sql_client import SqlClient
  from metricflow.sql.sql_bind_parameters import SqlBindParameters
  from metricflow.sql_request.sql_request_attributes import SqlJsonTag
  from metricflow.visitor import Visitable
label_desc: Use image node_id 5 for calling the ExecutionPlanTask obj's underlying member method code with example usage: obj.sql_query() without return types