>>> from ibis import schema, Schema
>>> sc = schema([("foo", "string"), ("bar", "int64"), ("baz", "boolean")])
>>> sc = schema(names=["foo", "bar", "baz"], types=["string", "int64", "boolean"])
>>> sc = schema(dict(foo="string"))
>>> sc = schema(Schema(dict(foo="string"))) # no-op
Schemas
Table Schemas
schema
=None, names=None, types=None) ibis.schema(pairs
Validate and return a Schema
object.
Parameters
Name | Type | Description | Default |
---|---|---|---|
pairs | SchemaLike | None |
List or dictionary of name, type pairs. Mutually exclusive with names and types arguments. |
None |
names | Iterable[str] | None | Field names. Mutually exclusive with pairs . |
None |
types | Iterable[str | dt .DataType ] | None |
Field types. Mutually exclusive with pairs . |
None |
Returns
Name | Type | Description |
---|---|---|
Schema | An ibis schema |
Examples
Schema
self, **kwargs) Schema(
An ordered mapping of str -> datatype, used to hold a Table’s schema.
Attributes
Name | Description |
---|---|
fields | A mapping of str to |
Methods
Name | Description |
---|---|
equals | Return whether other is equal to self . |
from_numpy | Return the equivalent ibis schema. |
from_pandas | Return the equivalent ibis schema. |
from_polars | Return the equivalent ibis schema. |
from_pyarrow | Return the equivalent ibis schema. |
from_tuples | Construct a Schema from an iterable of pairs. |
name_at_position | Return the name of a schema column at position i . |
to_numpy | Return the equivalent numpy dtypes. |
to_pandas | Return the equivalent pandas datatypes. |
to_polars | Return the equivalent polars schema. |
to_pyarrow | Return the equivalent pyarrow schema. |
to_sqlglot | Convert the schema to a list of SQL column definitions. |
equals
equals(other)
Return whether other
is equal to self
.
The order of fields in the schema is taken into account when computing equality.
Parameters
Name | Type | Description | Default |
---|---|---|---|
other | Schema | Schema to compare self to. |
required |
Examples
>>> import ibis
>>> xy = ibis.schema({"x": int, "y": str})
>>> xy2 = ibis.schema({"x": int, "y": str})
>>> yx = ibis.schema({"y": str, "x": int})
>>> xy_float = ibis.schema({"x": float, "y": str})
>>> assert xy.equals(xy2)
>>> assert not xy.equals(yx)
>>> assert not xy.equals(xy_float)
from_numpy
from_numpy(numpy_schema)
Return the equivalent ibis schema.
from_pandas
from_pandas(pandas_schema)
Return the equivalent ibis schema.
from_polars
from_polars(polars_schema)
Return the equivalent ibis schema.
from_pyarrow
from_pyarrow(pyarrow_schema)
Return the equivalent ibis schema.
from_tuples
from_tuples(values)
Construct a Schema
from an iterable of pairs.
Parameters
Name | Type | Description | Default |
---|---|---|---|
values | Iterable[tuple[str, str | dt .DataType ]] |
An iterable of pairs of name and type. | required |
Returns
Name | Type | Description |
---|---|---|
Schema | A new schema |
Examples
>>> import ibis
>>> ibis.Schema.from_tuples([("a", "int"), ("b", "string")])
ibis.Schema {
a int64
b string
}
name_at_position
name_at_position(i)
Return the name of a schema column at position i
.
Parameters
Name | Type | Description | Default |
---|---|---|---|
i | int | The position of the column | required |
Returns
Name | Type | Description |
---|---|---|
str | The name of the column in the schema at position i . |
Examples
>>> import ibis
>>> sch = ibis.Schema({"a": "int", "b": "string"})
>>> sch.name_at_position(0)
'a'
>>> sch.name_at_position(1)
'b'
to_numpy
to_numpy()
Return the equivalent numpy dtypes.
to_pandas
to_pandas()
Return the equivalent pandas datatypes.
to_polars
to_polars()
Return the equivalent polars schema.
to_pyarrow
to_pyarrow()
Return the equivalent pyarrow schema.
to_sqlglot
to_sqlglot(dialect)
Convert the schema to a list of SQL column definitions.
Parameters
Name | Type | Description | Default |
---|---|---|---|
dialect | str | sg .Dialect |
The SQL dialect to use. | required |
Returns
Name | Type | Description |
---|---|---|
list[sqlglot .expressions .ColumnDef ] |
A list of SQL column definitions. |
Examples
>>> import ibis
>>> sch = ibis.schema({"a": "int", "b": "!string"})
>>> sch
ibis.Schema {
a int64
b !string
}
>>> columns = sch.to_sqlglot(dialect="duckdb")
>>> columns
[ColumnDef(
this=Identifier(this=a, quoted=True),
kind=DataType(this=Type.BIGINT)),
ColumnDef(
this=Identifier(this=b, quoted=True),
kind=DataType(this=Type.VARCHAR),
constraints=[
ColumnConstraint(
kind=NotNullColumnConstraint())])]
One use case for this method is to embed its output into a SQLGlot CREATE TABLE
expression.
>>> import sqlglot as sg
>>> import sqlglot.expressions as sge
>>> table = sg.table("t", quoted=True)
>>> ct = sge.Create(
="TABLE",
... kind=sge.Schema(
... this=table,
... this=columns,
... expressions
... ),
... )>>> ct.sql(dialect="duckdb")
'CREATE TABLE "t" ("a" BIGINT, "b" TEXT NOT NULL)'