NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2114 most downloaded on PyPI
The portable Python dataframe library
Last release 8 months ago
07 Feb 2026
Ships on a steady schedule
a new release about every 2 weeks
Most releases are documented
notes for 40 of 58 stable releases
2 versions withdrawn
withdrawn after publishing
11 years old
166 releases · first in 2015
Nothing published for this version
Nothing published for this version
api: add ibis.dtype top-level API
ibis.dtype top-level API (867e5f1)table.nunique() for counting unique table rows (adcd762)ibis.array (3355dd8)__dataframe__ protocol (15e27da)concat method equivalent to __add__/__radd__ (0ed0ab1)repeat method equivalent to __mul__/__rmul__ (b457c7b)current_schema API (955a9d0)CREATE TABLE DDL options including support for overwrite (5dac7ec)to_sql a proper str subclass (084bdb9)ops.SelfReference (983e393).sql table expression method (479bc60)current_database implementation and API consistent across all backends (eeeeee0)has_operation (acb7f3f)list_schemas() (172520e)__dataframe__ protocol (50f3be9)ops.SelfReference (9068aca)pivot_longer works with more than one column (822c912)has_operation method a [@classmethod](https://github.com/classmethod) (c1b7dbc)regexp_instr != 0 instead of REGEXP keyword (06e2be4)DataType.is_* methods (ed40fdb)dtype function (39b7a24)schema.empty_table() instead of manually constructing empty tables (c099302)result_handler in favor of expression specific methods (3dc7143)One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
deps: prevent vulnerable snowflake-connector-python versions
imports: Use of ibis.udf as a module is removed. Use ibis.legacy.udf instead.
The minimum supported Python version is now Python 3.9
api: group_by().count() no longer automatically names the count aggregation count. Use relabel to rename columns.
backends: Backend.ast_schema is removed. Use expr.as_table().schema() instead.
snowflake/postgres: Postgres UDFs now use the new @udf.scalar.python API. This should be a low-effort replacement for the existing API.
ir: ops.NullLiteral is removed
datatypes: dt.Interval has no longer a default unit, dt.interval is removed
deps: snowflake-connector-python's lower bound was increased to 3.0.2, the minimum version needed to avoid a high-severity vulernability. Please upgrade snowflake-connector-python to at least version 3.0.2.
api: Table.difference(), Table.intersection(), and Table.union() now require at least one argument.
postgres: Ibis no longer automatically defines first/last reductions on connection to the postgres backend. Use DDL shown in https://wiki.postgresql.org/wiki/First/last_(aggregate) or one of the pgxn implementations instead.
api: ibis.examples.<example-name>.fetch no longer forwards arbitrary keyword arguments to read_csv/read_parquet.
datatypes: dt.Interval.value_type attribute is removed
api: Table.count() is no longer automatically named "count". Use Table.count().name("count") to achieve the previous behavior.
trino: The trino backend now requires at least version 0.321 of the trino Python package.
backends: removed AlchemyTable, AlchemyDatabase, DaskTable, DaskDatabase, PandasTable, PandasDatabase, PySparkDatabaseTable, use ops.DatabaseTable instead
dtypes: temporal unit enums are now available under ibis.common.temporal instead of ibis.common.enums.
clickhouse: external_tables can no longer be passed in ibis.clickhouse.connect. Pass external_tables directly in raw_sql/execute/to_pyarrow/to_pyarrow_batches().
datatypes: dt.Set is now an alias for dt.Array
bigquery: Before this change, ibis timestamp is mapping to Bigquery TIMESTAMP type and no timezone supports. However, it's not correct, BigQuery TIMESTAMP type should have UTC timezone, while DATETIME type is the no timezone version. Hence, this change is breaking the ibis timestamp mapping to BigQuery: If ibis timestamp has the UTC timezone, will map to BigQuery TIMESTAMP type. If ibis timestamp has no timezone, will map to BigQuery DATETIME type.
impala: Cursors are no longer returned from DDL operations to prevent resource leakage. Use raw_sql if you need specialized operations that return a cursor. Additionally, table-based DDL operations now return the table they're operating on.
api: Column.first()/Column.last() are now reductions by default. Code running these expressions in isolation will no longer be windowed over the entire table. Code using this function in select-based APIs should function unchanged.
bigquery: when using the bigquery backend, casting float to int will no longer round floats to the nearest integer
ops.Hash: The hash method on table columns on longer accepts
the how argument. The hashing functions available are highly
backend-dependent and the intention of the hash operation is to provide
a fast, consistent (on the same backend, only) integer value.
If you have been passing in a value for how, you can remove it and you
will get the same results as before, as there were no backends with
multiple hash functions working.
duckdb: Some CSV files may now have headers that did not have them previously. Set header=False to get the previous behavior.
deps: New environments will have a different default setting for compression in the ClickHouse backend due to removal of optional dependencies. Ibis is still capable of using the optional dependencies but doesn't include them by default. Install clickhouse-cityhash and lz4 to preserve the previous behavior.
api: Table.set_column() is removed; use Table.mutate(name=expr) instead
api: the suffixes argument in all join methods has been removed in favor of lname/rname args. The default renaming scheme for duplicate columns has also changed. To get the exact same behavior as before, pass in lname="{name}_x", rname="{name}_y".
ir: IntervalType.unit is now an enum instead of a string
type-system: Inferred types of Python objects may be slightly different. Ibis now use pyarrow to infer the column types of pandas DataFrame and other types.
backends: path argument of Backend.connect() is removed, use the database argument instead
api: removed Table.sort_by() and Table.groupby(), use .order_by() and .group_by() respectively
datatypes: DataType.scalar and column class attributes are now strings.
backends: Backend.load_data(), Backend.exists_database() and Backend.exists_table() are removed
ir: Value.summary() and NumericValue.summary() are removed
schema: Schema.merge() is removed, use the union operator schema1 | schema2 instead
api: ibis.sequence() is removed
drop support for Python 3.8 (747f4ca)
__dataframe__ implementation (b3d9619)ibis.interval (22ee854)suffixes in join with lname/rname (3caf3a1)selectors.of_type (f6d2d56)across selector (a6b60e7)create_table to load example data (42e09a4).values() and map concatenation (ad49a09)header=True by default (e4b515d)to_torch API (685c8fc)create_table (3ea9a21)identical_to (aab3bae)offset, binary literals, and dropna(how='all') (d2298e9).sql methods (86f2a34)Table.sql and Backend.sql (f38c447)count rename removal refactor (5b009d2)to_timestamp returns a UTC timestamp (0ce0b9f)duckdb_engine versions (9c3d173)ca_cert None value to string (bfdfb0e)hdfs_connect function as ibis.impala.hdfs_connect (27a0d12)time_mapping with TIME_MAPPING and backwards compatible check (4c3ca20)implode deprecation warning (ce3bdad)to_pyarrow is called from the backend (41bacf2)alias method overwrites view even if types are different (7d5845b)_pandas_converter attribute is resolved correctly (9058bbe)tmpdir construction for python <3.10 (a507ae2)convert_timezone for timezone conversion instead of invalid postgres AT TIME ZONE syntax (1595e7b)experimental_python_types (bf6eeab)version computation (04d3a89)if_any and if_all (5015677)docker-compose install for conda dev env setup (e19924d)read_* methods (0767b7c)ibis.date(), ibis.time() and ibis.timestamp() functions (20f71bf)Table set operations (57e948f)count name from relations (2cb19ec)ibis.sequence() function (de0bf69)Table.set_column() method (aa5ed94)Table.sort_by() and Table.groupby() methods (1316635)ast_schema method (51b5ef8)DatabaseTable operations (d1bab97)Backend.load_data(), .exists_database() and .exists_table() methods (755555f)path argument of Backend.connect() (6737ea8)ibis.collections.DisjointSet to ibis.common.egraph (07dde21)Set() in favor of Array() datatype (30a4f7e)value_type parametrization of the Interval datatype (463cdc3)ir dependency from datatypes (d7f0be0)normalize_datetime() and normalize_timezone() common utilities (c00ab38)rlz.column_from, rlz.base_table_of and rlz.function_of rules (ed71d51)Value.summary() and NumericValue.summary() expression methods (6cd8050)ops.NullLiteral() operation (a881703)Expr._find_backends() implementation by using the ibis.common.graph utilities (91ff8d4)dt.normalize() to construct literals (bf72f16)how from backend-specific hash operation (46a55fc).compile() (e3a4d4d)_merge using pd.merge (fe74f76)Schema.merge() method (d307722)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
ux: move ibis.expr.selectors to ibis.selectors and deprecate for removal in 6.0
distinct API for dropping duplicates based on column subsets (3720ea5)Table.relabel (0583959)to_pyarrow_batches() smarter (42f5987)ops.Arbitrary (ee8dbab)pivot_longer (f600c90)ops.Arbitrary (9bcdf77)pivot_wider API (60e7731)ibis.expr.selectors to ibis.selectors and deprecate for removal in 6.0 (0ae639d)resolve method (e12c4df)make_url usage (ea10a27)create_table implementation (5a54489)match (762f4d6)SIMILAR TO instead of tilde to workaround sqlglot issue (434da27)time_zone and time_unit properties (3a2c4df)having filter (bd81a9f)ArrayRemove operation (772668b)pivot_longer semantics in the presence of multiple unnests (6bc301a)notany/notall aggregations work (c2e985f)how='first' with arbitrary reduction (315b5e7)NULL values (8618789).projection in favor of the shorter .select (73df8df)to_pyarrow_batches implementation (d6235ee)_meta instance attributes (523e198)Table.set_column in favor of Table.mutate (954a6b7)None (5cf186a)SUMMARY.md (0bdd093)ir/backends: remove various deprecated functions and methods
ibis.common.exceptions.UnsupportedOperationError in more places during compilation. You may need to catch this error type instead of the previous type, which differed between backends.Table.info now returns an expressionTable.drop is removed. Replace drop(cols) with drop(*cols).spark plugin alias is removed. Use pyspark insteadibis.expr.scope and ibis.expr.timecontext modules, access them under ibis.backends.base.df.<module>ibis.<backend> namespaces, access them on a connected backend instance instead.ibis.common.geospatial, import the functions from ibis.backends.base.sql.registry.geospatialJSON is no longer a subtype of StringCategory, CategoryValue/Column/Scalar are removed. Use string types instead.metric_name argument to value_counts is removed. Use Table.relabel to change the metric column's name.parsy is now 2.0ibis.backends.duckdb.parse_type() functionibis.backends.impala.Backend.set_database() methodibis.backends.pyspark.Backend.set_database() methodibis.backends.impala.ImpalaConnection.ping() methodibis.expr.operations.DatabaseTable.change_name() methodibis.expr.operations.ParseURL classibis.expr.operations.Value.to_projection() methodibis.expr.types.Table.get_column() methodibis.expr.types.Table.get_columns() methodibis.expr.types.StringValue.parse_url() methodSchema.from_dict(), .delete() and .append() methods are removedstruct_type.pairs is removed, use struct_type.fields insteadStruct(names, types) is not supported anymore, pass a dictionary to Struct constructor insteadmax_columns option for table repr (a3aa236)map/array accessors for easy conversion of JSON to stronger-typed values (d1e9d11)ibis.map (d365fd4)to_pandas() API for ecosystem compatibility (cad316c)cache evaluate only once per session per expression (5a8ffe9)rlz.table rule (8dcfb8d)ops.Time for sqlalchemy backends (713cd33)BIGNUMERIC type support (5c98ea4)ArrayFilter translation (f2144b6)ops.ArrayMap (45000e7)ops.MapLength (fc82eaa)Callable arguments and return types in Validator.from_annotable() (ae57c36)Decimal type (8761732)Mapping abstract base class for StructType (5df2022)ArrayFilter translation (5f35d5c)ops.ArrayMap (063602d)read_json_auto when reading json (4193867)ArrayFilter operation (e719d60)ArrayMap operation (49e5f7a)ops.Union (17c6011)schema (39c9ea8)argmin/argmax (82668ec)ops.ArgMin and ops.ArgMax (a3fa57c)Mapping abstract base class for Schema (167d85a)pivot_longer API (11c5736)MapLength operation (a7ad1db)ArrayFilter translation (50f6fcc)ops.ArrayMap (657bf61)ops.Between (d70b9c0)Table.drop (325140f)between, rows and range keyword arguments in value.over() (5763063)Limit subqueries (62f6e14)name attribute to backend proxy modules (d6d8e7e)__radd__ array concat operation (121d9a0)clickhouse_driver (ab8f064)ibis.<backend> directly (5a16431)null to duckdb datatype parser (07d2a86)temp_directory exists (00ba6cb)to_pyarrow/to_pyarrow_batches (0e8b066)struct_pack (6e598cc)g re_replace flag as literal text (aa3c31c)read_parquet and read_csv to base backend mixin (ce80d36), closes #5420find_subqueries return in topological order (3587910)rlz.map_to() rule instead of isin to normalize temporal units (a1c46a2)wrap_case_result (a3b82f7)concat_str separator argument (ced5a61)reverse/descending argument (f067d81)ops.EndsWith translation rule (4c0a5a2)array_agg preserve nulls (24b95bf)sa.Column (af4db5c)NULL when trying to call map functions on non-object JSON (d85fb28)_flatten to avoid overriding unrelated function in other backends (8c31594)strip family of functions behave like Python (dd0a04c)sa.true instead of Python literal (8423eba)value_counts aggregate column a better name (abab1d7)duckdb: faster to_parquet/to_csv implementations (6071bb5)
fix duckdb insert-from-dataframe performance (cd27b99)
deps: bump minimum required version of parsy (22020cb)
remove spark alias to pyspark and associated cruft (4b286bd)
find_subqueries() (ab3712f)frozendict and DotDict to ibis.common.collections (4451375)geospatial module to the base SQL backend (3e7bfa3)Category type and related APIs (bb0ee78)StructType.pairs property in favor of identical fields attribute (6668122)String parent type from JSON type (34f3898)StructType fields rather than names and types tuples (84455ac)limit kwarg from to_parquet/to_csv (a54460c)list<...> parsing rule (f040b86)scope and timecontext utilities (80bd494)ArrayMap to use the new callable_with validation rule (560474e)non_negative_integer and pair rules (e00920a)Schema.from_dict(), .delete() and .append() methods (8912b24)parsy (c53403a)rules test file to the ibis.expr subpackage (47f0909)schema test file to the ibis.expr subpackage (40033e1)Table.info (71cc0e0)collect method API documentation (b4fcef1)ibis-examples repo in the README (1205636)__dunder__ method API documentation (b532c63)release: update breaking changes in the release notes for 4.0.0
ibis.get_backend function (2d27df8)ibis.set_backend function (e7fabaf)connect() with no arguments (67eed42)as_struct method to convert schemas to structs (64be7b1)read_json function for consuming newline-delimited JSON files (65e65c1)DATETIME2 and DATETIMEOFFSET (aa9f151)connect() with no arguments (78cbbdd)Map(string, string) support via the built-in HSTORE extension (f968f8f)ArrayCollect (c425f68)NthValue (0dca57c)ops.Arbitrary (45f4f05)ops.StructColumn (41698ed)StringSplit (e6acc09)StructField and struct literals (286a5c3)TimestampFromUNIX (314637d)TimestampFromYMDHMS (1eba8be)typeof operation (029499c)_get_schema_using_query in SQLite backend (7ff84c8)ops.ExistsSubquery and ops.NotExistsSubquery (9b9b315)_default_backend (11252af)StructType and Schema (c9e7078)read_csv on URLs work (9e61816)to_pyarrow/to_pyarrow_batches (a1a6902)order_by on nonexistent column (57b1dd8)TimestampNow (42d95b0)ops.TableArrayView (a1ad2b7)typeof test and bring back implementations (7dc5356)exec_driver_sql in view teardown (2599c9b)AlchemyCompiler (9f4ff54)ibis.map (045edc7)pathlib.Path correctly in attach (0415bd3)to_pyarrow_batches documentation (ec1ffce)StructType fields rather than names and types tuples (ff34c7b).raw_sql call (abc939e)Schema fields rather than names and types tuples (318179a)_find_backend implementation (60f1a1b)parse_json call in ops.StructField impl (9e80231)unary instead of fixed_arity(..., 1) (4a1c7c9)_get_schema_using_query to base class (296cd7d)isnot (4ec53a4)exec_driver_sql everywhere (e8f96b6)_CorrelatedRefCheck (f49e429)functions, methods and classes marked as deprecated are removed now
HLLCardinality with ApproxCountDistinct and CMSMedian with ApproxMedian operations.JSONB type is replaced by the JSON type.ibis.expr.api. Use import ibis.expr.types as ir to access these types.@immutable_property decorator, use @attribute.default insteadtimezone argument to to_timestamp is gone. This was only supported in the BigQuery backend. Append %Z to the format string and the desired time zone to the input column if necessary.ibis.connect would return a Table object when calling connect on a parquet/csv file. This now returns a backend containing a single table created from that file. When possible users may use ibis.read instead to read files into ibis tables.histogram()'s closed argument no longer exists because it never had any effect. Remove it from your histogram method calls.register_csv and register_parquet are removed. Pass filename to register method instead.ops.NodeList and ir.List are removed. Use tuples to represent sequence of expressions instead.re_extract now follows re.match behavior. In particular, the 0th group is now the entire string if there's a match, otherwise the groups are 1-based.t[t.x.topk(...)] with t.semi_join(t.x.topk(...), "x").ir.Analytic.type() and ir.TopK.type() methods are removed.None (meaning no limit).left and right tables were renamed with an appended suffix. Now for the case of inner joins with only equality predicates, colliding columns that are known to be equal due to the join predicates aren't renamed.impala backend. To add support you'll need to install the kerberos package separately.ops.DeferredSortKey is removed. Use ops.SortKey directly instead.ibis.common.grounds.Annotable is mutable by default nownode.has_resolved_name() is removed, use isinstance(node, ops.Named) instead; node.resolve_name() is removed use node.name insteadops.Node.flat_args(), directly use node.args property insteadops.Node.inputs property, use the multipledispatched get_node_arguments() function in the pandas backendNode.blocks() method has been removed.HasSchema mixin class is no longer available, directly subclass ops.TableNode and implement schema property insteadNode.output_type property in favor of abstractmethod Node.to_expr() which now must be explicitly implementedExpr(Op(Expr(Op(Expr(Op))))) is now represented as Expr(Op(Op(Op))), so code using ibis internals must be migratedibis.common.validators.{Patameter, Signature} insteadibis.expr.lineage.lineage() is now removedir.DestructValue, ir.DestructScalar and ir.DestructColumn, use table.unpack() insteadNode.root_tables() method, use ibis.expr.analysis.find_immediate_parent_tables() insteadagg alias for aggregate (907583f)agg alias to group_by (6b6367c)ibis.read top level API function (e67132c)__getitem__ operation (3e2efb4)__array__ (1402347)drop variadic (1d69702)to_sql to support notebook syntax highlighting (87c9833)rich for interactive __repr__ (04758b8)ArrayCollect filterable (1e1a5cf)argmin and argmax (40c5f0d)pi and e (b91370a)parse_url implementation (874c5c0)INTERSECT ALL/EXCEPT ALL (f65fbc3)mode aggregation (017f07a)topk (d44903f)Limit (1ddc876)ops.StringConcat (6bb5b4f)mode aggregation (36fd152)to_timestamp (26ca1e4)register (ae07438)strftime (d3ede8d)is_* methods to DataTypes (79f5c2b)*.db files with sqlite in ibis.connect (37baf05)mode aggregation (fc023b5)RegexReplace for str (23713cc)histogram API (5bfc0fe)topk (8bfb16a)mode aggregation (7982ba2)mode aggregation (b2f1c2d)topk (0f748e0)pi and e (fea81c6)histogram API (8f4808c)mode aggregation (f35915e)parse_url (a9746e3)rowid scalar (7e1425a)time literal (068fc50)ops.Where using IF/IFF functions (4cc9c15)type_map arg to override type inference (1961bad)pi and e functions (24b6d2f)con.sql with explicit schema specified (7ca82f3)postgresql:// and postgres:// in ibis.connect (2f7a7b4)bit_xor aggregation (830acf4)EXTRACT-based functionality (6549657)approx_median (1cba8bd)parse_url (2bc87fc)round, cot, pi, and e (c0e8736)approx_distinct function (3766fff)ibis.connect always returns a backend (2d5b155)ibis.desc and ibis.asc (6861347)re_extract conform to semantics of Python's re.match (5981227)ibis.connect (67c4f87)TypeError instead of more specific error (6db19d8)Table.rowid (92b03d6)any/all filterable and reduce code size (99b10e2)to_pandas/to_pyarrow on DataType/Schema classes directly (22f3b4d)translate implementation (8690151)ibis.now() type semantics (eca4a2c)re_replace (c138f0f)has_operation (6f1d265)table.mutate with deferred named expressions (5877d0b)show_types in interactive repr (2402506)date types (39056b5)datetime.datetime values (157efde)col.day_of_week not an expr (96e1580)startswith/endswith to be case sensitive (d7469cc)RowID implementation (05f5016)substr with no length (b2c2922)now operation (f6d7327)startswith to call the right method (9e6f397)pl.Null to the null type (fd9633b)reduction helper (78bfd1d)datetime.datetime literals (4f94abe)startswith/endswith to be case sensitive (fd4a88d)arbitrary with no arguments (45156f5)__array__ methods (1294b76)verbose argument for debugging (521e188)Table.groupby alias in favor of Table.group_by (39cea3b)Table.sort_by in favor of Table.order_by (7ac7103)add benchmark for known-slow table expression (e9617f0)
expr: traverse nodes only once during compilation (69019ed)
fix join performance by avoiding Projection construction (ed532bf)
node: give Nodes the default Python repr (eb26b11)
ux: remove pandas import overhead from import ibis (ea452fc)
deps: bump duckdb lower bound (4539683)
dev-deps: replace flake8 et al with ruff and fix lints (9c1b282)
lazy_singledispatch utility (180ecff)rlz.lazy_instance_of (4e30480)Temporal base class for temporal data types (694eec4)IFF (3068ae2)cot implementations to have one less function call (0f304e5)poetry2nix overrides (5ed95bc)ops.List -> ops.NodeList (6765bd2)ops.DeferredSortKey (e629633)ops.TopKNode and ir.TopK (d4dc544)CountStar operation (e812e6e)quantile, any, and all reductions filterable (1bafc9e)value_counts always has a projection (a70a302)compat.py module (eda0fdb)_random_identifier calls (26e7942)JSONB type (c4fc0ec)is_* methods (386adc2)ops.ArrayColumn in postgres backend (f9677cc)pytest-snapshot (413dbd2)sqlgolden with pytest-snapshot (5700eb0)timezone argument to to_timestamp API (eb4762e)MultiQuantile class from Quantile (9c48f8c)rlz.lazy_instance_of to delay shapely import (d14badc)dt.infer (2e56540)backend_sensitive decorator (836f237)pip install poetry dev env setup step (69940b1)duckdb: deprecate path argument in favor of database
and_ and or_ helpers (94bd4df)argmax and argmin column methods (b52216a)distinct to Intersection and Difference operations (cd9a34c)ibis.memtable API for constructing in-memory table expressions (0cc6948)ibis.sql to easily get a formatted SQL string (d971cc3)Table.unpack() and StructValue.lift() APIs for projecting struct fields (ced5f53)psql to a show_sql public API (877a05d)argmin and argmax (ee7c878)StringReplace execution (1389f4b)argmin and argmax (854aea7)ibis.connect (fbde95d)argmin and argmax (abf03f1)argmin and argmax (bf9b948)NotContains on grouped data (976dce7)StringReplace execution (578795f)ibis.connect for pyspark (a191744)Intersection and Difference (9845a3c)ibis.connect with sqlalchemy backends (b6cefb9)Intersection and Difference (2bc0b69)StringReplace translation (29daa32)table.sort_by(ibis.random()) (693005d)rich to format Table.info() output (67234c3)sqlglot for pretty printing SQL (a3c81c5)times argument to UInt64 (b643544)repr for SQL string VALUES data (75af658)fetch_arrow_table() to be able to handle big timestamps (85a76eb)difference implementation (88a78fa)where implementation (49f8845)left (48f6c1e)GroupConcat (6545f4d)StringReplace implementation (22cb297)ibis.connect works with pyspark (a7ab107)SQLQueryResult translation (786a50f)InMemoryTable a subclass of PhysicalTable (aac9524)sort_by asc/desc handling (222b2ba)right kwarg in union/intersect/difference (719a5a1)path argument in favor of database (fcacc20)path argument in favor of database (0f85919)VALUES (422c98d)to_sql (e2821a5)memtable docstrings (72bc0f5)add __getattr__ support to StructValue
__getattr__ support to StructValue (75bded1)Schema objects in public ibis.schema (0daac6c).tables accessor to BaseBackend (7ad27f0)e function to public API (3a07e70)ops.StructColumn operation (020bfdb)isin/notin (e1374a4)ops.StructColumn operation (0063007)intersect_class and difference_class overrides in base SQL backend (2c46a15)ops.StructColumn operation (211bfab)ir.Table instance from DuckDB's register API (0d05d41)Where expressions (b8f4120)Deferred objects work in aggregations (bbb376c)None (9f91d6b). chars are parsed correctly (9448fd3)from_unixtime (1b43004)not (330ab4f)has_operation (5082346)pandas.Timestamp (fe95dca)_projection as cached_property to avoid reconstruction of projections (98510c8)docs: fix tempdir location for docs build
build: replace version before exec plugin runs
ir: The following are breaking changes due to simplifying expression internals
ibis.expr.datatypes.DataType.scalar_type and DataType.column_type factory
methods have been removed, DataType.scalar and DataType.column class
fields can be used to directly construct a corresponding expression instance
(though prefer to use operation.to_expr())ibis.expr.types.ValueExpr._name and ValueExpr._dtype`` fields are not accassible anymore. While these were not supposed to used directly now ValueExpr.has_name(), ValueExpr.get_name()andValueExpr.type()` methods
are the only way to retrieve the expression's name and datatype.ibis.expr.operations.Node.output_type is a property now not a method,
decorate those methods with @propertyibis.expr.operations.ValueOp subclasses must define output_shape and
output_dtype properties from now on (note the datatype abbreviation dtype
in the property name)ibis.expr.rules.cast(), scalar_like() and array_like() rules have been
removedt["a"].distinct() with t[["a"]].distinct().aggregate or mutatedt.float is now dt.float64; use dt.float32 for the previous behavior.execute_node dispatch rules must now accept tuples of expressions.ibis.options.graphviz_repr = True to enablefsspec instead of HDFS from ibisregister_option is no longer supported, please submit option requests upstreamExpr() -> Expr.pipe()materialize is removed. Joins with overlapping columns now have suffixes.ibis.asc expression (efe177e), closes #1454.sql on tables for mixing sql and expressions (00e8087)force argument in sqlalchemy backend base class (9df7f1b)apply_to (b0f334d)fsspec (cc6eddb)roots and find_nodes functions (d630a77)setup.py: set the correct version number for 2.1.0
consider all packages' entry points
Deprecate exists_table(table) in favor of table in list_tables()
Serialization-deserialization of Node via pickle is now byte compatible between different processes ( #2938 )
Support joining on different columns in ClickHouse backend ( #2916 )
Support summarization of empty data in pandas backend ( #2908 )
Unify implementation of fillna and isna in Pyspark backend ( #2882 )
Support binary operation with Timedelta in Pyspark backend ( #2873 )
Add group_concat operation for Clickhouse backend ( #2839 )
Support comparison of ColumnExpr to timestamp literal ( #2808 )
Make op schema a cached property ( #2805 )
Implement .insert() for SQLAlchemy backends ( #2613 , #2613 )
Infer categorical and decimal Series to more specific Ibis types in pandas backend ( #2792 )
Add startswith and endswith operations ( #2790 )
Allow more flexible return type for UDFs ( #2776 , #2797 )
Implement Clip in the Pyspark backend ( #2779 )
Use ndarray as array representation in pandas backend ( #2753 )
Support Spark filter with window operation ( #2687 )
Support context adjustment for udfs for pandas backend ( #2646 )
Add auth_local_webserver , auth_external_data , and auth_cache parameters to BigQuery connect method. Set auth_local_webserver to use a local server instead of copy-pasting an authorization code. Set auth_external_data to true to request additional scopes required to query Google Drive and Sheets. Set auth_cache to reauth or none to force reauthentication. ( #2655 )
Add bit_and , bit_or , and bit_xor integer column aggregates (BigQuery and MySQL backends) ( #2641 )
Backends are defined as entry points ( #2379 )
Add ibis.array for creating array expressions ( #2615 )
Implement Not operation in PySpark backend ( #2607 )
Added support for case/when in PySpark backend ( #2610 )
Add support for np.array as literals for backends that already support lists as literals ( #2603 )
Fix data races in impala connection pool accounting ( #2991 )
Fix null literal compilation in the Clickhouse backend ( #2985 )
Fix order of limit and offset parameters in the Clickhouse backend ( #2984 )
Replace equals operation for geospatial datatype to geo_equals ( #2956 )
Fix .drop(fields). The argument can now be either a list of strings or a string. ( #2829 )
Fix projection on differences and intersections for SQL backends ( #2845 )
Backends are loaded in a lazy way, so third-party backends can import Ibis without circular imports ( #2827 )
Disable aggregation optimization due to N squared performance ( #2830 )
Fix .cast() to array outputting list instead of np.array in pandas backend ( #2821 )
Fix aggregation with mixed reduction datatypes (array + scalar) on Dask backend ( #2820 )
Fix error when using reduction UDF that returns np.array in a grouped aggregation ( #2770 )
Fix time context trimming error for multi column udfs in pandas backend ( #2712 )
Fix error during compilation of range_window in base_sql backends (:issue: 2608 ) ( #2710 )
Fix wrong row indexing in the result for ‘window after filter’ for timecontext adjustment ( #2696 )
Fix aggregate exploding the output of Reduction ops that return a list/ndarray ( #2702 )
Fix issues with context adjustment for filter with PySpark backend ( #2693 )
Add temporary struct col in pyspark backend to ensure that UDFs are executed only once ( #2657 )
Fix BigQuery connect bug that ignored project ID parameter ( #2588 )
Fix overwrite logic to account for DestructColumn inside mutate API ( #2636 )
Fix fusion optimization bug that incorrectly changes operation order ( #2635 )
Fixes a NPE issue with substr in PySpark backend ( #2610 )
Fixes binary data type translation into BigQuery bytes data type ( #2354 )
Make StructValue picklable ( #2577 )
Improvement of the backend API. The former Client subclasses have been replaced by a Backend class that must subclass ibis.backends.base.BaseBackend . The BaseBackend class contains abstract methods for the minimum subset of methods that backends must implement, and their signatures have been standardized across backends. The Ibis compiler has been refactored, and backends don’t need to implement all compiler classes anymore if the default works for them. Only a subclass of ibis.backends.base.sql.compiler.Compiler is now required. Backends now need to register themselves as entry points. ( #2678 )
Deprecate exists_table(table) in favor of table in list_tables() ( #2905 )
Remove handwritten type parser; parsing errors that were previously IbisTypeError are now parsy.ParseError . parsy is now a hard requirement. ( #2977 )
Methods current_database and list_databases raise an exception for backends that do not support databases ( #2962 )
Method set_database has been deprecated, in favor of creating a new connection to a different database ( #2913 )
Removed log method of clients, in favor of verbose_log option ( #2914 )
Output of Client.version returned as a string, instead of a setuptools Version ( #2883 )
Deprecated list_schemas in SQLAlchemy backends in favor of list_databases ( #2862 )
Deprecated ibis.<backend>.verify() in favor of capturing exception in ibis.<backend>.compile() ( #2865 )
Simplification of data fetching. Backends don’t need to implement Query anymore ( #2789 )
Move BigQuery backend to a separate repository https://github.com/ibis-project/ibis-bigquery _. The backend will be released separately, use pip install ibis-bigquery or conda install ibis-bigquery to install it, and then use as before. ( #2665 )
Supporting SQLAlchemy 1.4, and requiring minimum 1.3 ( #2689 )
Namespace time_col config, fix type check for trim_with_timecontext for pandas window execution ( #2680 )
Remove deprecated ibis.HDFS , ibis.WebHDFS and ibis.hdfs_connect ( #2505 )
Add hash and hashbytes support for BigQuery backend
Add Struct.from_dict ( #2514 )
Add hash and hashbytes support for BigQuery backend ( #2310 )
Support reduction UDF without groupby to return multiple columns for pandas backend ( #2511 )
Support analytic and reduction UDF to return multiple columns for pandas backend ( #2487 )
Support elementwise UDF to return multiple columns for pandas and PySpark backend ( #2473 )
FEAT: Support Ibis interval for window in pyspark backend ( #2409 )
Use Scope class for scope in pyspark backend ( #2402 )
Add PySpark support for ReductionVectorizedUDF ( #2366 )
Add time context in scope in execution for pandas backend ( #2306 )
Add start_point and end_point to PostGIS backend. ( #2081 )
Add set difference to general ibis api ( #2347 )
Add rowid expression, supported by SQLite and OmniSciDB ( #2251 )
Add intersection to general ibis api ( #2230 )
Add application_name argument to ibis.bigquery.connect to allow attributing Google API requests to projects that use Ibis. ( #2303 )
Add support for casting category dtype in pandas backend ( #2285 )
Add support for Union in the PySpark backend ( #2270 )
Add support for implementign custom window object for pandas backend ( #2260 )
Implement two level dispatcher for execute_node ( #2246 )
Add ibis.pandas.trace module to log time and call stack information. ( #2233 )
Validate that the output type of a UDF is a single element ( #2198 )
ZeroIfNull and NullIfZero implementation for OmniSciDB ( #2186 )
IsNan implementation for OmniSciDB ( #2093 )
[OmnisciDB] Support add_columns and drop_columns for OmnisciDB table ( #2094 )
Create ExtractQuarter operation and add its support to Clickhouse, CSV, Impala, MySQL, OmniSciDB, pandas, Parquet, PostgreSQL, PySpark, SQLite and Spark ( #2175 )
Add translation rules for isnull() and notnull() for pyspark backend ( #2126 )
Add window operations support to SQLite ( #2232 )
Implement read_csv for omniscidb backend ( #2062 )
[OmniSciDB] Add support to week extraction ( #2171 )
Date, DateDiff and TimestampDiff implementations for OmniSciDB ( #2097 )
Create ExtractWeekOfYear operation and add its support to Clickhouse, CSV, MySQL, pandas, Parquet, PostgreSQL, PySpark and Spark ( #2177 )
Add initial support for ibis.random function ( #2060 )
Added epoch_seconds extraction operation to Clickhouse, CSV, Impala, MySQL, OmniSciDB, pandas, Parquet, PostgreSQL, PySpark, SQLite, Spark and BigQuery :issue: 2273 ( #2178 )
[OmniSciDB] Add “method” parameter to load_data ( #2165 )
Add non-nullable info to schema output ( #2117 )
fillna and nullif implementations for OmnisciDB ( #2083 )
Add load_data to sqlalchemy’s backends and fix database parameter for load/create/drop when database parameter is the same than the current database ( #1981 )
[OmniSciDB] Add support for within, d_fully_within and point ( #2125 )
OmniSciDB - Refactor DDL and Client; Add temporary parameter to create_table and “force” parameter to drop_view ( #2086 )
Create ExtractDayOfYear operation and add its support to Clickhouse, CSV, MySQL, OmniSciDB, pandas, Parquet, PostgreSQL, PySpark, SQLite and Spark ( #2173 )
Implementations of Log Log2 Log10 for OmniSciDB backend ( #2095 )
Table expressions do not recognize inet datatype (Postgres backend) ( #2462 )
Table expressions do not recognize macaddr datatype (Postgres backend) ( #2461 )
Fix aggcontext.Summarize not always producing scalar (pandas backend) ( #2410 )
Fix same window op with different window size on table lead to incorrect results for pyspark backend ( #2414 )
Fix same column with multiple aliases not showing properly in repr ( #2229 )
Fix reduction UDFs over ungrouped, bounded windows on pandas backend ( #2395 )
FEAT: Support rolling window UDF with non numeric inputs for pandas backend. ( #2386 )
Fix scope get to use hashmap lookup instead of list lookup ( #2386 )
Fix equality behavior for Literal ops ( #2387 )
Fix analytic ops over ungrouped and unordered windows on pandas backend ( #2376 )
Fix the covariance operator in the BigQuery backend. ( #2367 )
Update impala kerberos dependencies ( #2342 )
Added verbose logging to SQL backends ( #1320 )
Fix issue with sql_validate call to OmnisciDB. ( #2256 )
Add missing float types to pandas backend ( #2237 )
Allow group_by and order_by as window operation input in pandas backend ( #2252 )
Fix PySpark compiler error when elementwise UDF output_type is Decimal or Timestamp ( #2223 )
Fix interactive mode returning a expression instead of the value when used in Jupyter ( #2157 )
Fix PySpark error when doing alias after selection ( #2127 )
Fix millisecond issue for OmniSciDB :issue: 2167 , MySQL :issue: 2169 , PostgreSQL :issue: 2166 , pandas :issue: 2168 , BigQuery :issue: 2273 backends ( #2170 )
[OmniSciDB] Fix TopK when used as filter ( #2134 )
Move ibis.HDFS , ibis.WebHDFS and ibis.hdfs_connect to ibis.impala.* ( #2497 )
Drop support to Python 3.6 ( #2288 )
Simplifying tests directories structure ( #2351 )
Update google-cloud-bigquery dependency minimum version to 1.12.0 ( #2304 )
Remove “experimental” mentions for OmniSciDB and pandas backends ( #2234 )
Use an OmniSciDB image stable on CI ( #2244 )
Added fragment_size to table creation for OmniSciDB ( #2107 )
Added round() support for OmniSciDB ( #2096 )
Enabled cumulative ops support for OmniSciDB ( #2113 )
Remove pandas deprecation warnings
Improve many arguments UDF performance in pandas backend. ( #2071 )
Add DenseRank, RowNumber, MinRank, Count, PercentRank/CumeDist window operations to OmniSciDB ( #1976 )
Introduce a top level vectorized UDF module (experimental). Implement element-wise UDF for pandas and PySpark backend. ( #2047 )
Add support for multi arguments window UDAF for the pandas backend ( #2035 )
Clean up window translation logic in pyspark backend ( #2004 )
Add docstring check to CI for an initial subset files ( #1996 )
Pyspark backend bounded windows ( #2001 )
Add more POSTGIS operations ( #1987 )
SQLAlchemy Default precision and scale to decimal types for PostgreSQL and MySQL ( #1969 )
Add support for array operations in PySpark backend ( #1983 )
Implement sort, if_null, null_if and notin for PySpark backend ( #1978 )
Add support for date/time operations in PySpark backend ( #1974 )
Add support for params, query_schema, and sql in PySpark backend ( #1973 )
Implement join for PySpark backend ( #1967 )
Validate AsOfJoin tolerance and attempt interval unit conversion ( #1952 )
filter for PySpark backend ( #1943 )
window operations for pyspark backend ( #1945 )
Implement IntervalSub for pandas backend ( #1951 )
PySpark backend string and column ops ( #1942 )
PySpark backend ( #1913 )
DDL support for Spark backend ( #1908 )
Support timezone aware arrow timestamps ( #1923 )
Add shapely geometries as input for literals ( #1860 )
Add geopandas as output for omniscidb ( #1858 )
Spark UDFs ( #1885 )
Add support for Postgres UDFs ( #1871 )
Spark tests ( #1830 )
Spark client ( #1807 )
Use pandas rolling apply to implement rows_with_max_lookback ( #1868 )
Pin “clickhouse-driver” to “>=0.1.3” ( #2089 )
Fix load data stage for Linux CI ( #2069 )
Fix datamgr.py fail if IBIS_TEST_OMNISCIDB_DATABASE=omnisci ( #2057 )
Change pymapd connection parameter from “session_id” to “sessionid” ( #2041 )
Fix pandas backend to treat trailing_window preceding arg as window bound rather than window size (e.g. preceding=0 now indicates current row rather than window size 0) ( #2009 )
Fix handling of Array types in Postgres UDF ( #2015 )
Fix pydocstyle config ( #2010 )
Pinning clickhouse-driver<0.1.2 ( #2006 )
Fix CI log for database ( #1984 )
Fixes explain operation ( #1933 )
Fix incorrect assumptions about attached SQLite databases ( #1937 )
Upgrade to JDK11 ( #1938 )
sql method doesn’t work when the query uses LIMIT clause ( #1903 )
Fix union implementation ( #1910 )
Fix failing com imports on master ( #1912 )
OmniSci/MapD - Fix reduction for bool ( #1901 )
Pass scope to grouping execution in the pandas backend ( #1899 )
Fix various Spark backend issues ( #1888 )
Make Nodes enforce the proper signature ( #1891 )
Fix according to bug in pd.to_datetime when passing the unit flag ( #1893 )
Fix small formatting buglet in PR merge tool ( #1883 )
Fix the case where we do not have an index when using preceding with intervals ( #1876 )
Fixed issues with geo data ( #1872 )
Remove -x from pytest call in linux CI ( #1869 )
Fix return type of Struct.from_tuples ( #1867 )
Add support to Python 3.8 ( #2066 )
Pin back version of isort ( #2079 )
Use user-defined port variables for Omnisci and PostgreSQL tests ( #2082 )
Change omniscidb image tag from v5.0.0 to v5.1.0 on docker-compose recipe ( #2077 )
[Omnisci] The same SRIDs for test_geo_spatial_binops ( #2051 )
Unpin rtree version ( #2078 )
Link pandas issues with xfail tests in pandas/tests/test_udf.py ( #2074 )
Disable Postgres tests on Windows CI. ( #2075 )
use conda for installation black and isort tools ( #2068 )
CI: Fix CI builds related to new pandas 1.0 compatibility ( #2061 )
Fix data map for int8 on OmniSciDB backend ( #2056 )
Add possibility to run tests for separate backend via make test BACKENDS=[YOUR BACKEND] ( #2052 )
Fix “cudf” import on OmniSciDB backend ( #2055 )
CI: Drop table only if it exists (OmniSciDB) ( #2050 )
Add initial documentation for OmniSciDB, MySQL, PySpark and SparkSQL backends, add initial documentation for geospatial methods and add links to Ibis wiki page ( #2034 )
Implement covariance for bigquery backend ( #2044 )
Add Spark to supported backends list ( #2046 )
Ping dependency of rtree to fix CI failure ( #2043 )
Drop support for Python 3.5 ( #2037 )
HTML escape column names and types in png repr. ( #2023 )
Add geospatial tutorial notebook ( #1991 )
Change omniscidb image tag from v4.7.0 to v5.0.0 on docker-compose recipe ( #2031 )
Pin “semantic_version” to “<2.7” in the docs build CI, fix “builddoc” and “doc” section inside “Makefile” and skip mysql tzinfo on CI to allow to run MySQL using docker container on a hard disk drive. ( #2030 )
Fixed impala start up issues ( #2012 )
cache all ops in translate() ( #1999 )
Add black step to CI ( #1988 )
Json UUID any ( #1962 )
Add log for database services ( #1982 )
Fix BigQuery backend fixture so batting and awards_players fixture re… ( #1972 )
Disable BigQuery explicitly in all/test_join.py ( #1971 )
Re-formatting all files using pre-commit hook ( #1963 )
Disable codecov report upload during CI builds ( #1961 )
Developer doc enhancements ( #1960 )
Missing geospatial ops for OmniSciDB ( #1958 )
Remove pandas deprecation warnings ( #1950 )
Add developer docs to get docker setup ( #1948 )
More informative IntegrityError on duplicate columns ( #1949 )
Improve geospatial literals and smoke tests ( #1928 )
PostGIS enhancements ( #1925 )
Rename mapd to omniscidb backend ( #1866 )
Fix failing BigQuery tests ( #1926 )
Added missing null literal op ( #1917 )
Update link to Presto website ( #1895 )
Removing linting from windows ( #1896 )
Fix link to NUMFOCUS CoC ( #1884 )
Added CoC section ( #1882 )
Remove pandas exception for rows_with_max_lookback ( #1859 )
Move CI pipelines to Azure ( #1856 )
Add new geospatial functions to OmniSciDB backend
Add new geospatial functions to OmniSciDB backend ( #1836 )
allow pandas timedelta in rows_with_max_lookback ( #1838 )
Accept rows-with-max-lookback as preceding parameter ( #1825 )
PostGIS support ( #1787 )
Fix call to psql causing failing CI ( #1855 )
Fix nested array literal repr ( #1851 )
Fix repr of empty schema ( #1850 )
Add max_lookback to window replace and combine functions ( #1843 )
Partially revert #1758 ( #1837 )
Skip SQLAlchemy backend tests in connect method in backends.py ( #1847 )
Validate order_by when using rows_with_max_lookback window ( #1848 )
Generate release notes from commits ( #1845 )
Raise exception on backends where rows_with_max_lookback can’t be implemented ( #1844 )
Tighter version spec for pytest ( #1840 )
Allow passing a branch to ci/feedstock.py ( #1826 )
Conslidate trailing window functions
Conslidate trailing window functions ( #1809 )
Call to_interval when casting integers to intervals ( #1766 )
Add session feature to mapd client API ( #1796 )
Add min periods parameter to Window ( #1792 )
Allow strings for types in pandas UDFs ( #1785 )
Add missing date operations and struct field operation for the pandas backend ( #1790 )
Add window operations to the OmniSci backend ( #1771 )
Reimplement the pandas backend using topological sort ( #1758 )
Add marker for xfailing specific backends ( #1778 )
Enable window function tests where possible ( #1777 )
is_computable_arg dispatcher ( #1743 )
Added float32 and geospatial types for create table from schema ( #1753 )
Fix group_concat test and implementations ( #1819 )
Fix failing strftime tests on Python 3.7 ( #1818 )
Remove unnecessary (and erroneous in some cases) frame clauses ( #1757 )
Chained mutate operations are buggy ( #1799 )
Allow projections from joins to attempt fusion ( #1783 )
Fix Python 3.5 dependency versions ( #1798 )
Fix compatibility and bugs associated with pandas toposort reimplementation ( #1789 )
Fix outer_join generating LEFT join instead of FULL OUTER ( #1772 )
NullIf should enforce that its arguments are castable to a common type ( #1782 )
Fix conda create command in documentation ( #1775 )
Fix preceding and following with None ( #1765 )
PostgreSQL interval type not recognized ( #1661 )
Remove decorator hacks and add custom markers ( #1820 )
Add development deps to setup.py ( #1814 )
Fix design and developer docs ( #1805 )
Pin sphinx version to 2.0.1 ( #1810 )
Add pep8speaks integration ( #1793 )
Fix typo in UDF signature specification ( #1821 )
Clean up most xpassing tests ( #1779 )
Update omnisci container version ( #1781 )
Constrain PyMapD version to get passing builds ( #1776 )
Remove warnings and clean up some docstrings ( #1763 )
Add StringToTimestamp as unsupported ( #1638 )
Add isort pre-commit hooks ( #1759 )
Add Python 3.5 testing back to CI ( #1750 )
Re-enable CI for building step ( #1700 )
Update README reference to MapD to say OmniSci ( #1749 )
Remove a bunch of deprecated APIs and clean up warnings
Add black as a pre-commit hook ( #1735 )
Add support for the arbitrary aggregate in the mapd backend ( #1680 )
Add SQL method for the MapD backend ( #1731 )
Clean up merge PR script and use the actual merge feature of GitHub ( #1744 )
Add cross join to the pandas backend ( #1723 )
Implement default handler for multiple client pre_execute ( #1727 )
Implement BigQuery auth using pydata_google_auth ( #1728 )
Timestamp literal accepts a timezone parameter ( #1712 )
Remove support for passing integers to ibis.timestamp ( #1725 )
Add find_nodes to lineage ( #1704 )
Remove a bunch of deprecated APIs and clean up warnings ( #1714 )
Implement table distinct for the pandas backend ( #1716 )
Implement geospatial functions for MapD ( #1678 )
Implement geospatial types for MapD ( #1666 )
Add pre commit hook ( #1685 )
Getting started with mapd, mysql and pandas ( #1686 )
Support column names with special characters in mapd ( #1675 )
Allow operations to hide arguments from display ( #1669 )
Remove implicit ordering requirements in the PostgreSQL backend ( #1636 )
Add cross join operator to MapD ( #1655 )
Fix UDF bugs and add support for non-aggregate analytic functions ( #1637 )
Support string slicing with other expressions ( #1627 )
Publish the ibis roadmap ( #1618 )
Implement approx_median in BigQuery ( #1604 )
Make ibis node instances hashable ( #1611 )
Add range_window and trailing_range_window to docs ( #1608 )
Make dev/merge-pr.py script handle PR branches ( #1745 )
Fix NULLIF implementation for the pandas backend ( #1742 )
Fix casting to float in the MapD backend ( #1737 )
Fix testing for BigQuery after auth flow update ( #1741 )
Fix skipping for new BigQuery auth flow ( #1738 )
Fix bug in TableExpr.drop ( #1732 )
Filter the raw warning from newer pandas to support older pandas ( #1729 )
Fix BigQuery credentials link ( #1706 )
Add Union as an unsuppoted operation for MapD ( #1639 )
Fix visualizing an ibis expression when showing a selection after a table join ( #1705 )
Fix MapD exception for toDateTime ( #1659 )
Use == to compare strings ( #1701 )
Resolves joining with different column names ( #1647 )
Fix map get with compatible types ( #1643 )
Fixed where operator for MapD ( #1653 )
Remove parameters from mapd ( #1648 )
Make sure we cast when NULL is else in CASE expressions ( #1651 )
Fix equality ( #1600 )
Do not build universal wheels ( #1748 )
Remove tag prefix from versioneer ( #1747 )
Use releases to manage documentation ( #1746 )
Use cudf instead of pygdf ( #1694 )
Fix multiple CI issues ( #1696 )
Update mapd ci to v4.4.1 ( #1681 )
Enabled mysql CI on azure pipelines ( #1672 )
Remove support for Python 2 ( #1670 )
Fix flake8 and many other warnings ( #1667 )
Update README.md for impala and kudu ( #1664 )
Remove defaults as a channel from azure pipelines ( #1660 )
Fixes a very typo in the pandas/core.py docstring ( #1658 )
Unpin clickhouse-driver version ( #1657 )
Add test for reduction returning lists ( #1650 )
Fix Azure VM image name ( #1646 )
Updated MapD server-CI ( #1641 )
Add TableExpr.drop to API documentation ( #1645 )
Fix Azure deployment step ( #1642 )
Set up CI with Azure Pipelines ( #1640 )
Fix conda builds ( #1609 )
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →