What's New in Version 1.30.4
Version 1.30.4 of the relationalai Python package is now available!
To upgrade, activate your virtual environment and run the following command:
pip install --upgrade relationalaiNew Features and Enhancements
Section titled “New Features and Enhancements”-
You can now use the
geometric_meanaggregate to average rates and ratios, and group it withper()like any other aggregate. It expects non-negative numbers. -
Run the new
rai config checkcommand to catch configuration mistakes before they cause errors later. It checks that your configured reasoners have valid names and sizes for your Snowflake account’s cloud. -
Queries in a deployed model that read from a Snowflake source table now run faster automatically. RelationalAI no longer sorts the table when your query doesn’t use its row order.
-
Aggregates over a relationship chain, such as
min(Customer.transaction.pay_date).per(Customer), now run faster automatically. RelationalAI no longer adds an unnecessary join.
Bug Fixes
Section titled “Bug Fixes”-
You can now deploy a model into a Snowflake schema named after a SQL reserved word, such as
ORDERorSCHEMA. Before this release, the deploy failed with an error saying the object did not exist. -
You can now deploy a model with a Snowflake role that only has
USAGEon a schema your administrator created for you, with its tags already in place. RelationalAI no longer creates an account-wide management schema. -
If your deploy role can’t create a schema it needs, the deploy now stops early with a clear error that gives you the exact grants and
CREATE SCHEMAstatements to run, instead of failing partway through. -
Redeploying a model now keeps the Snowflake grants and compatible object and column tags you applied to its tables. Before this release, a redeploy could drop them.
-
math.haversinenow returns the correct distance. Before this release, it returned a wrong value, so recompute any distances you calculated with it. -
A
selectwhose only content is a single function call on a literal, such asselect(parse_number("abc", 19, 0)), now returns one row with a null value when the call produces nothing, instead of no rows. If any of your logic treats an empty result as a signal, review it, since these queries now return a null row you can handle with null-safe logic. -
When you deploy a model, a rule whose condition matches no rows no longer adds any facts. Before this release, a rule that defined two or more fixed facts added them anyway, leaving facts in your model that shouldn’t be there.
-
When you deploy a model, a grouped aggregate whose default value sits behind an unreachable branch no longer duplicates rows. Before this release, it could return two rows per group instead of one.
-
Deploying, branching, and pulling a model through its op log is more reliable. A model that uses a standard-library function, such as
parse_float, now loads consistently in any Python session, and a model that sets thepreserve_column_casedeployment option no longer regenerates invalid Python.