atoti.experimental.distributed.session module¶
-
class
atoti.experimental.distributed.session.
DistributedSession
(name, *, config, **kwargs)¶ Bases:
atoti._local_session.LocalSession
[atoti.experimental.distributed.cubes.DistributedCubes
]Holds a connection to the Java gateway.
-
create_cube
(name)¶ Create a distributed cube.
- Parameters
name (
str
) – The name of the created cube.- Return type
-
property
cubes
¶ Cubes of the session.
- Return type
-
endpoint
(route, *, method='GET')¶ Create a custom endpoint at
f"{session.url}/atoti/pyapi/{route}"
.The decorated function must take three arguments with types
User
,HttpRequest
andSession
and return a response body as a Python data structure that can be converted to JSON.DELETE
,POST
, andPUT
requests can have a body but it must be JSON.Path parameters can be configured by wrapping their name in curly braces in the route.
Example:
@session.endpoint("simple_get") def callback(request: HttpRequest, user: User, session: Session): return "something that will be in response.data" @session.endpoint(f"simple_post/{store_name}", method="POST") def callback(request: HttpRequest, user: User, session: Session): return request.path_parameters.store_name
- Parameters
route (
str
) – The path suffix after/atoti/pyapi/
. For instance, ifcustom/search
is passed, a request to/atoti/pyapi/custom/search?query=test#results
will match. The route should not contain the query (?
) or fragment (#
).method (
Literal
[‘POST’, ‘GET’, ‘PUT’, ‘DELETE’]) – The HTTP method the request must be using to trigger this endpoint.
- Return type
-
property
excel_url
¶ URL of the Excel endpoint.
To connect to the session in Excel, create a new connection to an Analysis Services. Use this URL for the server field and choose to connect with “User Name and Password”:
Without authentication, leave these fields blank.
With Basic authentication, fill them with your username and password.
Other authentication types (such as Auth0) are not supported by Excel.
- Return type
-
explain_mdx_query
(mdx, *, timeout=30)¶ Explain an MDX query.
-
export_translations_template
(path)¶ Export a template containing all translatable values in the session’s cubes.
-
property
port
¶ Port on which the session is exposed.
Can be set in
SessionConfiguration
.- Return type
-
query_mdx
(mdx, *, keep_totals=False, timeout=30)¶ Execute an MDX query and return its result as a pandas DataFrame.
- Parameters
mdx (
str
) – The MDXSELECT
query to execute.keep_totals (
bool
) – Whether the returned DataFrame should contain, if they are present in the query result, the grand total and subtotals.timeout (
int
) – The query timeout in seconds.keep_totals – Whether the resulting DataFrame should contain, if they are present in the query result, the grand total and subtotals. Totals can be useful but they make the DataFrame harder to work with since its index will have some empty values.
Example
An MDX query that would be displayed as this pivot table:
Country
Total Price.SUM
2018-01-01
2019-01-01
2019-01-02
2019-01-05
Price.SUM
Price.SUM
Price.SUM
Price.SUM
Total Country
2,280.00
840.00
1,860.00
810.00
770.00
China
760.00
410.00
350.00
France
1,800.00
480.00
500.00
400.00
420.00
India
760.00
360.00
400.00
UK
960.00
960.00
will return this DataFrame:
Date
Country
Price.SUM
2019-01-02
China
410.0
2019-01-05
China
350.0
2018-01-01
France
480.0
2019-01-01
France
500.0
2019-01-02
France
400.0
2019-01-05
France
420.0
2018-01-01
India
360.0
2019-01-01
India
400.0
2019-01-01
UK
960.0
- Return type
-
start_transaction
()¶ Start a transaction to batch several store operations.
It is more efficient than doing each store operation one after the other.
It avoids possibly incorrect intermediate states (e.g. if loading some new data first requires to drop some existing one).
Note
Some operations are not allowed during a transaction:
Long-running operations such as
load_kafka()
orload_csv()
wherewatch=True
is used.Operations changing the structure of the session’s stores such as
join()
orread_parquet()
.Operations not related to data loading or dropping such as defining a new measure.
Example
>>> df = pd.DataFrame( ... columns=["City", "Price"], ... data=[ ... ("Berlin", 150.0), ... ("London", 240.0), ... ("New York", 270.0), ... ("Paris", 200.0), ... ], ... ) >>> store = session.read_pandas( ... df, keys=["City"], store_name="start_transaction example" ... ) >>> cube = session.create_cube(store) >>> extra_df = pd.DataFrame( ... columns=["City", "Price"], ... data=[ ... ("Singapore", 250.0), ... ], ... ) >>> with session.start_transaction(): ... store += ("New York", 100.0) ... store.drop({"City": "Paris"}) ... store.load_pandas(extra_df) ... >>> store.head(10) Price City Berlin 150.0 London 240.0 New York 100.0 Singapore 250.0
- Return type
Transaction
-
visualize
(name=None)¶ Display an atoti widget to explore the session interactively.
Note
This method requires the
atoti-jupyterlab
plugin.The widget state will be stored in the cell metadata. This state should not have to be edited but, if desired, it can be found in JupyterLab by opening the “Notebook tools” sidebar and expanding the the “Advanced Tools” section.
-