def METHOD_NAME(
    self,
    obj: ir.Table | pd.DataFrame | None = None,
    overwrite: bool = False,
    values: Iterable[Any] | None = None,
    validate: bool = True,
):
    """Insert data into the table.
    Parameters
    ----------
    obj
        Table expression or pandas DataFrame
    overwrite
        If True, will replace existing contents of table
    values
        Values to insert. Not implemented currently.
    validate
        If True, do more rigorous validation that schema of table being
        inserted is compatible with the existing table
    Examples
    --------
    >>> t.insert(table_expr)  # quartodoc: +SKIP # doctest: +SKIP
    # Completely overwrite contents
    >>> t.insert(table_expr, overwrite=True)  # quartodoc: +SKIP # doctest: +SKIP
    """
    import pandas as pd
    if isinstance(obj, pd.DataFrame):
        spark_df = self._session.createDataFrame(obj)
        spark_df.insertInto(self.name, overwrite=overwrite)
        return None
    expr = obj
    if values is not None:
        raise NotImplementedError
    if validate:
        existing_schema = self.schema()
        insert_schema = expr.schema()
        if not insert_schema.equals(existing_schema):
            self._validate_compatible(insert_schema, existing_schema)
    ast = self._client.compiler.to_ast(expr)
    select = ast.queries[0]
    statement = ddl.InsertSelect(self._qualified_name, select, overwrite=overwrite)
    return self._client.raw_sql(statement.compile())