def _create_table( table_name, expr, database=None, can_exist=False, format='parquet' ): ast = build_ast(expr, SparkDialect.make_context()) select = ast.queries[0] statement = ddl.CTAS( table_name, select, database=database, format=format, can_exist=can_exist, ) return statement
def create_table( self, table_name, obj=None, schema=None, database=None, force=False, # HDFS options format='parquet', ): """ Create a new table in Spark using an Ibis table expression. Parameters ---------- table_name : string obj : TableExpr or pandas.DataFrame, optional If passed, creates table from select statement results schema : ibis.Schema, optional Mutually exclusive with obj, creates an empty table with a particular schema database : string, default None (optional) force : boolean, default False If true, create table if table with indicated name already exists format : {'parquet'} Examples -------- >>> con.create_table('new_table_name', table_expr) # doctest: +SKIP """ if obj is not None: if isinstance(obj, pd.DataFrame): spark_df = self._session.createDataFrame(obj) mode = 'error' if force: mode = 'overwrite' spark_df.write.saveAsTable( table_name, format=format, mode=mode, ) return ast = self._build_ast(obj, SparkDialect.make_context()) select = ast.queries[0] statement = ddl.CTAS( table_name, select, database=database, can_exist=force, format=format, ) elif schema is not None: statement = ddl.CreateTableWithSchema( table_name, schema, database=database, format=format, can_exist=force, ) else: raise com.IbisError('Must pass expr or schema') return self._execute(statement.compile())