def test_create_table_with_location(self): path = '/path/to/table' schema = ibis.schema([('foo', 'string'), ('bar', 'int8'), ('baz', 'int16')]) statement = ddl.CreateTableWithSchema('another_table', schema, ddl.NoFormat(), can_exist=False, path=path, database='foo') result = statement.compile() expected = """\ CREATE TABLE foo.`another_table` (`foo` string, `bar` tinyint, `baz` smallint) LOCATION '{0}'""".format(path) assert result == expected
def create_table(self, table_name, expr=None, schema=None, database=None, format='parquet', force=False, external=False, path=None, partition=None, like_parquet=None): """ Create a new table in Impala using an Ibis table expression Parameters ---------- table_name : string expr : TableExpr, optional If passed, creates table from select statement results schema : ibis.Schema, optional Mutually exclusive with expr, creates an empty table with a particular schema database : string, default None (optional) format : {'parquet'} force : boolean, default False Do not create table if table with indicated name already exists external : boolean, default False Create an external table; Impala will not delete the underlying data when the table is dropped path : string, default None Specify the path where Impala reads and writes files for the table partition : list of strings Must pass a schema to use this. Cannot partition from an expression (create-table-as-select) like_parquet : string (HDFS path), optional Can specify in lieu of a schema Examples -------- con.create_table('new_table_name', table_expr) """ if like_parquet is not None: raise NotImplementedError if expr is not None: ast = sql.build_ast(expr) select = ast.queries[0] if partition is not None: # Fairly certain this is currently the case raise ValueError('partition not supported with ' 'create-table-as-select') statement = ddl.CTAS(table_name, select, database=database, can_exist=force, format=format, external=external, path=path) elif schema is not None: statement = ddl.CreateTableWithSchema(table_name, schema, ddl.NoFormat(), database=database, format=format, can_exist=force, external=external, path=path, partition=partition) else: raise com.IbisError('Must pass expr or schema') self._execute(statement)