Top-level APIs¶
These methods and objects are available directly in the ibis
module.
and_(*predicates)
¶
Combine multiple predicates using &
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
predicates |
ir.BooleanValue
|
Boolean value expressions |
()
|
Returns:
Type | Description |
---|---|
BooleanValue
|
A new predicate that evaluates to True if all composing predicates are True. If no predicates were provided, returns True. |
array(values, type=None)
¶
Create an array expression.
If the input expressions are all column expressions, then the output will
be an ArrayColumn
. The input columns will be concatenated row-wise to
produce each array in the output array column. Each array will have length
n, where n is the number of input columns. All input columns should be
of the same datatype.
If the input expressions are Python literals, then the output will be a
single ArrayScalar
of length n, where n is the number of input
values. This is equivalent to
values = [1, 2, 3]
ibis.literal(values)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
values |
Iterable[V]
|
An iterable of Ibis expressions or a list of Python literals |
required |
type |
str | dt.DataType | None
|
An instance of |
None
|
Returns:
Type | Description |
---|---|
ArrayValue
|
An array column (if the inputs are column expressions), or an array scalar (if the inputs are Python literals) |
Examples:
Create an array column from column expressions
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.memtable({'a': [1, 2, 3], 'b': [4, 5, 6]})
>>> ibis.array([t.a, t.b])
┏━━━━━━━━━━━━━━━━━━━━━━┓
┃ ArrayColumn() ┃
┡━━━━━━━━━━━━━━━━━━━━━━┩
│ array<int64> │
├──────────────────────┤
│ [1, 4] │
│ [2, 5] │
│ [3, 6] │
└──────────────────────┘
Create an array scalar from Python literals
>>> ibis.array([1.0, 2.0, 3.0])
[1.0, 2.0, 3.0]
Mixing scalar and column expressions is allowed
>>> ibis.array([t.a, 42])
┏━━━━━━━━━━━━━━━━━━━━━━┓
┃ ArrayColumn() ┃
┡━━━━━━━━━━━━━━━━━━━━━━┩
│ array<int64> │
├──────────────────────┤
│ [1, 42] │
│ [2, 42] │
│ [3, 42] │
└──────────────────────┘
asc(expr)
¶
Create a ascending sort key from asc
or column name.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
expr |
ir.Column | str
|
The expression or column name to use for sorting |
required |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.examples.penguins.fetch()
>>> t[["species", "year"]].order_by(ibis.asc("year")).head()
┏━━━━━━━━━┳━━━━━━━┓
┃ species ┃ year ┃
┡━━━━━━━━━╇━━━━━━━┩
│ string │ int64 │
├─────────┼───────┤
│ Adelie │ 2007 │
│ Adelie │ 2007 │
│ Adelie │ 2007 │
│ Adelie │ 2007 │
│ Adelie │ 2007 │
└─────────┴───────┘
Returns:
Type | Description |
---|---|
ir.ValueExpr
|
An expression |
case()
¶
Begin constructing a case expression.
Use the .when
method on the resulting object followed by .end
to create a
complete case.
Examples:
>>> import ibis
>>> cond1 = ibis.literal(1) == 1
>>> cond2 = ibis.literal(2) == 1
>>> expr = ibis.case().when(cond1, 3).when(cond2, 4).end()
>>> expr
SearchedCase(...)
Returns:
Type | Description |
---|---|
SearchedCaseBuilder
|
A builder object to use for constructing a case expression. |
coalesce(*args)
¶
cumulative_window(group_by=None, order_by=None)
¶
Create a cumulative window for use with window functions.
All window frames / ranges are inclusive.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
group_by |
Grouping key |
None
|
|
order_by |
Ordering key |
None
|
Returns:
Type | Description |
---|---|
Window
|
A window frame |
date(value, *args)
¶
Return a date literal if value
is coercible to a date.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
Date string, datetime object or numeric value |
required | |
args |
Month and day if |
()
|
Returns:
Type | Description |
---|---|
DateScalar
|
A date expression |
deferred = Deferred()
module-attribute
¶
Deferred expression object.
Use this object to refer to a previous table expression in a chain of expressions.
_
may conflict with other idioms in Python
See ibis-project/ibis#4704 for details.
Use from ibis import deferred as <NAME>
to assign a different name to
the deferred object builder.
Examples:
>>> from ibis import _
>>> t = ibis.table(dict(key="int", value="float"), name="t")
>>> expr = t.group_by(key=_.key - 1).agg(total=_.value.sum())
>>> expr.schema()
ibis.Schema {
key int64
total float64
}
desc(expr)
¶
Create a descending sort key from expr
or column name.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
expr |
ir.Column | str
|
The expression or column name to use for sorting |
required |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.examples.penguins.fetch()
>>> t[["species", "year"]].order_by(ibis.desc("year")).head()
┏━━━━━━━━━┳━━━━━━━┓
┃ species ┃ year ┃
┡━━━━━━━━━╇━━━━━━━┩
│ string │ int64 │
├─────────┼───────┤
│ Adelie │ 2009 │
│ Adelie │ 2009 │
│ Adelie │ 2009 │
│ Adelie │ 2009 │
│ Adelie │ 2009 │
└─────────┴───────┘
Returns:
Type | Description |
---|---|
ir.ValueExpr
|
An expression |
difference(table, *rest, distinct=True)
¶
Compute the set difference of multiple table expressions.
The input tables must have identical schemas.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
table |
ir.Table
|
A table expression |
required |
*rest |
ir.Table
|
Additional table expressions |
()
|
distinct |
bool
|
Only diff distinct rows not occurring in the calling table |
True
|
Returns:
Type | Description |
---|---|
Table
|
The rows present in |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t1 = ibis.memtable({"a": [1, 2]})
>>> t1
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 1 │
│ 2 │
└───────┘
>>> t2 = ibis.memtable({"a": [2, 3]})
>>> t2
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 2 │
│ 3 │
└───────┘
>>> ibis.difference(t1, t2)
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 1 │
└───────┘
dtype = dt.dtype
module-attribute
¶
get_backend(expr=None)
¶
Get the current Ibis backend to use for a given expression.
expr An expression to get the backend from. If not passed, the default backend is returned.
Returns:
Type | Description |
---|---|
BaseBackend
|
The Ibis backend. |
greatest(*args)
¶
Compute the largest value among the supplied arguments.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
args |
ir.Value
|
Arguments to choose from |
()
|
Returns:
Type | Description |
---|---|
Value
|
Maximum of the passed arguments |
ifelse = _deferred(ir.BooleanValue.ifelse)
module-attribute
¶
Construct a ternary conditional expression.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
true_expr |
ir.Value
|
Expression to return if |
required |
false_expr |
ir.Value
|
Expression to return if |
required |
Returns:
Name | Type | Description |
---|---|---|
Value |
ir.Value
|
The value of |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.memtable({"is_person": [True, False, True, None]})
>>> ibis.ifelse(t.is_person, "yes", "no")
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Where(is_person, 'yes', 'no') ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ string │
├───────────────────────────────┤
│ yes │
│ no │
│ yes │
│ no │
└───────────────────────────────┘
intersect(table, *rest, distinct=True)
¶
Compute the set intersection of multiple table expressions.
The input tables must have identical schemas.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
table |
ir.Table
|
A table expression |
required |
*rest |
ir.Table
|
Additional table expressions |
()
|
distinct |
bool
|
Only return distinct rows |
True
|
Returns:
Type | Description |
---|---|
Table
|
A new table containing the intersection of all input tables. |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t1 = ibis.memtable({"a": [1, 2]})
>>> t1
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 1 │
│ 2 │
└───────┘
>>> t2 = ibis.memtable({"a": [2, 3]})
>>> t2
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 2 │
│ 3 │
└───────┘
>>> ibis.intersect(t1, t2)
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 2 │
└───────┘
interval(value=None, unit='s', *, years=None, quarters=None, months=None, weeks=None, days=None, hours=None, minutes=None, seconds=None, milliseconds=None, microseconds=None, nanoseconds=None)
¶
Return an interval literal expression.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
int | datetime.timedelta | None
|
Interval value. |
None
|
unit |
str
|
Unit of |
's'
|
years |
int | None
|
Number of years |
None
|
quarters |
int | None
|
Number of quarters |
None
|
months |
int | None
|
Number of months |
None
|
weeks |
int | None
|
Number of weeks |
None
|
days |
int | None
|
Number of days |
None
|
hours |
int | None
|
Number of hours |
None
|
minutes |
int | None
|
Number of minutes |
None
|
seconds |
int | None
|
Number of seconds |
None
|
milliseconds |
int | None
|
Number of milliseconds |
None
|
microseconds |
int | None
|
Number of microseconds |
None
|
nanoseconds |
int | None
|
Number of nanoseconds |
None
|
Returns:
Type | Description |
---|---|
IntervalScalar
|
An interval expression |
least(*args)
¶
Compute the smallest value among the supplied arguments.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
args |
ir.Value
|
Arguments to choose from |
()
|
Returns:
Type | Description |
---|---|
Value
|
Minimum of the passed arguments |
literal(value, type=None)
¶
Create a scalar expression from a Python value.
Use specific functions for arrays, structs and maps
Ibis supports literal construction of arrays using the following functions:
Constructing these types using literal
will be deprecated in a future
release.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
Any
|
A Python value |
required |
type |
dt.DataType | str | None
|
An instance of |
None
|
Returns:
Type | Description |
---|---|
Scalar
|
An expression representing a literal value |
Examples:
Construct an integer literal
>>> import ibis
>>> x = ibis.literal(42)
>>> x.type()
Int8(nullable=True)
Construct a float64
literal from an int
>>> y = ibis.literal(42, type='double')
>>> y.type()
Float64(nullable=True)
Ibis checks for invalid types
>>> ibis.literal('foobar', type='int64')
Traceback (most recent call last):
...
TypeError: Value 'foobar' cannot be safely coerced to int64
map(keys, values=None)
¶
Create a map container object.
If the keys
and values
are Python literals, then the output will be a
MapScalar
. If the keys
and values
are expressions (ArrayColumn
),
then the the output will be a MapColumn
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
keys |
Iterable[Any] | Mapping[Any, Any] | ArrayColumn
|
Keys of the map or |
required |
values |
Iterable[Any] | ArrayColumn | None
|
Values of the map or |
None
|
Returns:
Type | Description |
---|---|
MapValue
|
An expression representing either a map column or literal (associative array with key/value pairs of fixed types) |
Examples:
Create a map literal from a dict with the type inferred
>>> import ibis
>>> ibis.options.interactive = True
>>> ibis.map(dict(a=1, b=2))
{'a': 1, 'b': 2}
Create a new map column from columns with keys and values
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.memtable({'keys': [['a', 'b'], ['b']], 'values': [[1, 2], [3]]})
>>> t
┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃ keys ┃ values ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ array<string> │ array<int64> │
├──────────────────────┼──────────────────────┤
│ ['a', 'b'] │ [1, 2] │
│ ['b'] │ [3] │
└──────────────────────┴──────────────────────┘
>>> ibis.map(t.keys, t.values)
┏━━━━━━━━━━━━━━━━━━━━━━┓
┃ Map(keys, values) ┃
┡━━━━━━━━━━━━━━━━━━━━━━┩
│ map<string, int64> │
├──────────────────────┤
│ {'a': 1, 'b': 2} │
│ {'b': 3} │
└──────────────────────┘
memtable(data, *, columns=None, schema=None, name=None)
¶
Construct an ibis table expression from in-memory data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data |
Any data accepted by the Examples of acceptable objects are a Do not depend on the underlying storage type (e.g., pyarrow.Table), it's subject to change across non-major releases. |
required | |
columns |
Iterable[str] | None
|
None
|
|
schema |
SupportsSchema | None
|
Optional |
None
|
name |
str | None
|
Optional name of the table. |
None
|
Returns:
Type | Description |
---|---|
Table
|
A table expression backed by in-memory data. |
Examples:
>>> import ibis
>>> t = ibis.memtable([{"a": 1}, {"a": 2}])
>>> t
InMemoryTable
data:
PandasDataFrameProxy:
a
0 1
1 2
>>> t = ibis.memtable([{"a": 1, "b": "foo"}, {"a": 2, "b": "baz"}])
>>> t
InMemoryTable
data:
PandasDataFrameProxy:
a b
0 1 foo
1 2 baz
Create a table literal without column names embedded in the data and pass
columns
>>> t = ibis.memtable([(1, "foo"), (2, "baz")], columns=["a", "b"])
>>> t
InMemoryTable
data:
PandasDataFrameProxy:
a b
0 1 foo
1 2 baz
Create a table literal without column names embedded in the data. Ibis generates column names if none are provided.
>>> t = ibis.memtable([(1, "foo"), (2, "baz")])
>>> t
InMemoryTable
data:
PandasDataFrameProxy:
col0 col1
0 1 foo
1 2 baz
negate()
¶
Negate a numeric expression.
Returns:
Type | Description |
---|---|
NumericValue
|
A numeric value expression |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.memtable({"values": [-1, 0, 1]})
>>> t.values.negate()
┏━━━━━━━━━━━━━━━━┓
┃ Negate(values) ┃
┡━━━━━━━━━━━━━━━━┩
│ int64 │
├────────────────┤
│ 1 │
│ 0 │
│ -1 │
└────────────────┘
NA = null()
module-attribute
¶
The NULL scalar.
Examples:
>>> import ibis
>>> my_null = ibis.NA
>>> my_null.isnull()
True
now()
¶
Return an expression that will compute the current timestamp.
Returns:
Type | Description |
---|---|
TimestampScalar
|
An expression representing the current timestamp. |
null()
¶
Create a NULL/NA scalar.
or_(*predicates)
¶
Combine multiple predicates using |
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
predicates |
ir.BooleanValue
|
Boolean value expressions |
()
|
Returns:
Type | Description |
---|---|
BooleanValue
|
A new predicate that evaluates to True if any composing predicates are True. If no predicates were provided, returns False. |
param(type)
¶
Create a deferred parameter of a given type.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
type |
dt.DataType
|
The type of the unbound parameter, e.g., double, int64, date, etc. |
required |
Returns:
Type | Description |
---|---|
Scalar
|
A scalar expression backend by a parameter |
Examples:
>>> import ibis
>>> start = ibis.param('date')
>>> end = ibis.param('date')
>>> schema = dict(timestamp_col='timestamp', value='double')
>>> t = ibis.table(schema, name='t')
>>> predicates = [t.timestamp_col >= start, t.timestamp_col <= end]
>>> t.filter(predicates).value.sum()
r0 := UnboundTable: t
timestamp_col timestamp
value float64
r1 := Selection[r0]
predicates:
r0.timestamp_col >= $(date)
r0.timestamp_col <= $(date)
Sum(value): Sum(r1.value)
show_sql(expr, dialect=None, file=None)
¶
Pretty-print the compiled SQL string of an expression.
If a dialect cannot be inferred and one was not passed, duckdb will be used as the dialect
Parameters:
Name | Type | Description | Default |
---|---|---|---|
expr |
ir.Expr
|
Ibis expression whose SQL will be printed |
required |
dialect |
str | None
|
String dialect. This is typically not required, but can be useful if ibis cannot infer the backend dialect. |
None
|
file |
IO[str] | None
|
File to write output to |
None
|
Examples:
>>> import ibis
>>> from ibis import _
>>> t = ibis.table(dict(a="int"), name="t")
>>> expr = t.select(c=_.a * 2)
>>> ibis.show_sql(expr) # duckdb dialect by default
SELECT
t0.a * CAST(2 AS TINYINT) AS c
FROM t AS t0
>>> ibis.show_sql(expr, dialect="mysql")
SELECT
t0.a * 2 AS c
FROM t AS t0
to_sql(expr, dialect=None, **kwargs)
¶
random()
¶
Return a random floating point number in the range [0.0, 1.0).
Similar to random.random
in the Python standard library.
Returns:
Type | Description |
---|---|
FloatingScalar
|
Random float value expression |
range_window(preceding=None, following=None, group_by=None, order_by=None)
¶
Create a range-based window clause for use with window functions.
This RANGE window clause aggregates rows based upon differences in the value of the order-by expression.
All window frames / ranges are inclusive.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
preceding |
Number of preceding rows in the window |
None
|
|
following |
Number of following rows in the window |
None
|
|
group_by |
Grouping key |
None
|
|
order_by |
Ordering key |
None
|
Returns:
Type | Description |
---|---|
Window
|
A window frame |
read_csv(sources, table_name=None, **kwargs)
¶
Lazily load a CSV or set of CSVs.
This function delegates to the read_csv
method on the current default
backend (DuckDB or ibis.config.default_backend
).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
sources |
str | Path | Sequence[str | Path]
|
A filesystem path or URL or list of same. Supports CSV and TSV files. |
required |
table_name |
str | None
|
A name to refer to the table. If not provided, a name will be generated. |
None
|
kwargs |
Any
|
Backend-specific keyword arguments for the file type. For the DuckDB backend used by default, please refer to: |
{}
|
Returns:
Type | Description |
---|---|
ir.Table
|
Table expression representing a file |
Examples:
>>> import ibis
>>> t = ibis.read_csv("path/to/data.csv", table_name="my_csv_table")
read_delta(source, table_name=None, **kwargs)
¶
Lazily load a Delta Lake table.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source |
str | Path
|
A filesystem path or URL. |
required |
table_name |
str | None
|
A name to refer to the table. If not provided, a name will be generated. |
None
|
kwargs |
Any
|
Backend-specific keyword arguments for the file type. |
{}
|
Returns:
Type | Description |
---|---|
ir.Table
|
Table expression representing a file |
Examples:
>>> import ibis
>>> t = ibis.read_delta("path/to/delta", table_name="my_table")
read_json(sources, table_name=None, **kwargs)
¶
Lazily load newline-delimited JSON data.
This function delegates to the read_json
method on the current default
backend (DuckDB or ibis.config.default_backend
).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
sources |
str | Path | Sequence[str | Path]
|
A filesystem path or URL or list of same. |
required |
table_name |
str | None
|
A name to refer to the table. If not provided, a name will be generated. |
None
|
kwargs |
Any
|
Backend-specific keyword arguments for the file type. See https://duckdb.org/docs/extensions/json.html for details. |
{}
|
Returns:
Type | Description |
---|---|
ir.Table
|
Table expression representing a file |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> lines = '''
... {"a": 1, "b": "d"}
... {"a": 2, "b": null}
... {"a": null, "b": "f"}
... '''
>>> with open("/tmp/lines.json", mode="w") as f:
... _ = f.write(lines)
>>> t = ibis.read_json("/tmp/lines.json")
>>> t
┏━━━━━━━┳━━━━━━━━┓
┃ a ┃ b ┃
┡━━━━━━━╇━━━━━━━━┩
│ int64 │ string │
├───────┼────────┤
│ 1 │ d │
│ 2 │ NULL │
│ NULL │ f │
└───────┴────────┘
read_parquet(sources, table_name=None, **kwargs)
¶
Lazily load a parquet file or set of parquet files.
This function delegates to the read_parquet
method on the current default
backend (DuckDB or ibis.config.default_backend
).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
sources |
str | Path | Sequence[str | Path]
|
A filesystem path or URL or list of same. |
required |
table_name |
str | None
|
A name to refer to the table. If not provided, a name will be generated. |
None
|
kwargs |
Any
|
Backend-specific keyword arguments for the file type. For the DuckDB backend used by default, please refer to:
|
{}
|
Returns:
Type | Description |
---|---|
ir.Table
|
Table expression representing a file |
Examples:
>>> import ibis
>>> t = ibis.read_parquet("path/to/data.parquet", table_name="my_parquet_table")
row_number()
¶
Return an analytic function expression for the current row number.
Returns:
Type | Description |
---|---|
IntegerColumn
|
A column expression enumerating rows |
schema(pairs=None, names=None, types=None)
¶
Validate and return a Schema
object.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pairs |
SupportsSchema | None
|
List or dictionary of name, type pairs. Mutually exclusive with |
None
|
names |
Iterable[str] | None
|
Field names. Mutually exclusive with |
None
|
types |
Iterable[str | dt.DataType] | None
|
Field types. Mutually exclusive with |
None
|
Returns:
Type | Description |
---|---|
Schema
|
An ibis schema |
Examples:
>>> 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
set_backend(backend)
¶
Set the default Ibis backend.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
backend |
str | BaseBackend
|
May be a backend name or URL, or an existing backend instance. |
required |
Examples:
You can pass the backend as a name:
>>> import ibis
>>> ibis.set_backend("polars")
Or as a URI
>>> ibis.set_backend("postgres://user:password@hostname:5432")
Or as an existing backend instance
>>> ibis.set_backend(ibis.duckdb.connect())
struct(value, type=None)
¶
Create a struct expression.
If the input expressions are all column expressions, then the output will be
a StructColumn
.
If the input expressions are Python literals, then the output will be a
StructScalar
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
Iterable[tuple[str, V]] | Mapping[str, V]
|
The underlying data for literal struct value or a pairs of field names and column expressions. |
required |
type |
str | dt.DataType | None
|
An instance of |
None
|
Returns:
Type | Description |
---|---|
StructValue
|
An expression representing a literal or column struct (compound type with fields of fixed types) |
Examples:
Create a struct literal from a dict
with the type inferred
>>> import ibis
>>> t = ibis.struct(dict(a=1, b='foo'))
Create a struct literal from a dict
with a specified type
>>> t = ibis.struct(dict(a=1, b='foo'), type='struct<a: float, b: string>')
Specify a specific type for the struct literal
>>> t = ibis.struct(dict(a=1, b=40), type='struct<a: float, b: int32>')
Create a struct array from multiple arrays
>>> ibis.options.interactive = True
>>> t = ibis.memtable({'a': [1, 2, 3], 'b': ['foo', 'bar', 'baz']})
>>> ibis.struct([('a', t.a), ('b', t.b)])
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ StructColumn() ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ struct<a: int64, b: string> │
├─────────────────────────────┤
│ {'a': 1, 'b': 'foo'} │
│ {'a': 2, 'b': 'bar'} │
│ {'a': 3, 'b': 'baz'} │
└─────────────────────────────┘
Create a struct array from columns and literals
>>> ibis.struct([('a', t.a), ('b', 'foo')])
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ StructColumn() ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ struct<a: int64, b: string> │
├─────────────────────────────┤
│ {'a': 1, 'b': 'foo'} │
│ {'a': 2, 'b': 'foo'} │
│ {'a': 3, 'b': 'foo'} │
└─────────────────────────────┘
table(schema=None, name=None)
¶
Create a table literal or an abstract table without data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
schema |
SupportsSchema | None
|
A schema for the table |
None
|
name |
str | None
|
Name for the table. One is generated if this value is |
None
|
Returns:
Type | Description |
---|---|
Table
|
A table expression |
Examples:
Create a table with no data backing it
>>> import ibis
>>> ibis.options.interactive
False
>>> t = ibis.table(schema=dict(a="int", b="string"), name="t")
>>> t
UnboundTable: t
a int64
b string
time(value, *args)
¶
Return a time literal if value
is coercible to a time.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
Time string |
required | |
args |
Minutes, seconds if |
()
|
Returns:
Type | Description |
---|---|
TimeScalar
|
A time expression |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> ibis.time("00:00:00")
datetime.time(0, 0)
>>> ibis.time(12, 15, 30)
datetime.time(12, 15, 30)
timestamp(value, *args, timezone=None)
¶
Return a timestamp literal if value
is coercible to a timestamp.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
Timestamp string, datetime object or numeric value |
required | |
args |
Additional arguments if |
()
|
|
timezone |
str | None
|
Timezone name |
None
|
Returns:
Type | Description |
---|---|
TimestampScalar
|
A timestamp expression |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> ibis.timestamp("2021-01-01 00:00:00")
Timestamp('2021-01-01 00:00:00')
trailing_range_window(preceding, order_by, group_by=None)
¶
Create a trailing range window for use with window functions.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
preceding |
A value expression |
required | |
order_by |
Ordering key |
required | |
group_by |
Grouping key |
None
|
Returns:
Type | Description |
---|---|
Window
|
A window frame |
trailing_window(preceding, group_by=None, order_by=None)
¶
Create a trailing window for use with window functions.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
preceding |
The number of preceding rows |
required | |
group_by |
Grouping key |
None
|
|
order_by |
Ordering key |
None
|
Returns:
Type | Description |
---|---|
Window
|
A window frame |
union(table, *rest, distinct=False)
¶
Compute the set union of multiple table expressions.
The input tables must have identical schemas.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
table |
ir.Table
|
A table expression |
required |
*rest |
ir.Table
|
Additional table expressions |
()
|
distinct |
bool
|
Only return distinct rows |
False
|
Returns:
Type | Description |
---|---|
Table
|
A new table containing the union of all input tables. |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t1 = ibis.memtable({"a": [1, 2]})
>>> t1
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 1 │
│ 2 │
└───────┘
>>> t2 = ibis.memtable({"a": [2, 3]})
>>> t2
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 2 │
│ 3 │
└───────┘
>>> ibis.union(t1, t2) # union all by default
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 1 │
│ 2 │
│ 2 │
│ 3 │
└───────┘
>>> ibis.union(t1, t2, distinct=True).order_by("a")
┏━━━━━━━┓
┃ a ┃
┡━━━━━━━┩
│ int64 │
├───────┤
│ 1 │
│ 2 │
│ 3 │
└───────┘
where = _deferred(ir.BooleanValue.ifelse)
module-attribute
¶
Construct a ternary conditional expression.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
true_expr |
ir.Value
|
Expression to return if |
required |
false_expr |
ir.Value
|
Expression to return if |
required |
Returns:
Name | Type | Description |
---|---|---|
Value |
ir.Value
|
The value of |
Examples:
>>> import ibis
>>> ibis.options.interactive = True
>>> t = ibis.memtable({"is_person": [True, False, True, None]})
>>> ibis.where(t.is_person, "yes", "no")
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Where(is_person, 'yes', 'no') ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ string │
├───────────────────────────────┤
│ yes │
│ no │
│ yes │
│ no │
└───────────────────────────────┘
window(preceding=None, following=None, order_by=None, group_by=None, *, rows=None, range=None, between=None)
¶
Create a window clause for use with window functions.
The ROWS
window clause includes peer rows based on differences in row
number whereas RANGE
includes rows based on the differences in row
value of a single order_by
expression.
All window frame bounds are inclusive.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
preceding |
Number of preceding rows in the window |
None
|
|
following |
Number of following rows in the window |
None
|
|
group_by |
Grouping key |
None
|
|
order_by |
Ordering key |
None
|
|
rows |
Whether to use the |
None
|
|
range |
Whether to use the |
None
|
|
between |
Automatically infer the window kind based on the boundaries |
None
|
Returns:
Type | Description |
---|---|
Window
|
A window frame |