feat: support interactive execution of deferred DataFrames in TableWidget#17486
Conversation
# Conflicts: # packages/bigframes/bigframes/display/table_widget_angular.js # packages/bigframes/bigframes/display/table_widget_angular/README.md # packages/bigframes/bigframes/display/table_widget_angular/src/app/app.spec.ts # packages/bigframes/bigframes/display/table_widget_angular/src/app/app.ts
| { | ||
| "cells": [ | ||
| { | ||
| "cell_type": "markdown", |
There was a problem hiding this comment.
why modify this notebook?
|
|
||
| def to_sql(expr: sge.Expression) -> str: | ||
| """Generate SQL string from the given expression.""" | ||
|
|
There was a problem hiding this comment.
This part is cherry-picked from another branch, I has asked Trevor to review that PR. Revert this one here
There was a problem hiding this comment.
Why need this and when is it used? Don't see where any instances are constructed in the PR.
There was a problem hiding this comment.
It is a wrapper class for a public integration API. It is required for external notebook environments, such as colab notebook and BigQuery Studio. This wrapper class allow external integrations to wrap their query executions and display a deferred widget, such as showing dry-run info and "Run Query" Button, instead of executing the query immediately when a cell runs. When the user clicks the "Run Query" button in the UI, the widget triggers .execute() on this wrapper to compute the query and display the actual DataFrame. Since it is intended to be instantiated by external platforms calling into BF, we don't construct any instances of it within the BF library itself.
🤖 I have created a release *beep* *boop* --- ## [2.44.0](bigframes-v2.43.0...bigframes-v2.44.0) (2026-06-25) ### Features * add date functions to `bigframes.bigquery` module ([#17514](#17514)) ([e5d2e35](e5d2e35)) * **bigframes:** add AI TVFs to the pandas bq accessor ([#17402](#17402)) ([ee74e31](ee74e31)) * Experimental transpilation of unannotated python callables ([#17419](#17419)) ([ea9aad9](ea9aad9)) * support gemini-3.x models in loader and update default model to gemini-3.5-flash ([#17557](#17557)) ([3619b29](3619b29)) * support interactive execution of deferred DataFrames in TableWidget ([#17486](#17486)) ([421eebd](421eebd)) ### Bug Fixes * avoid invalid CAST(NULL AS NULL) in SQLGlot compiler ([#17487](#17487)) ([3b79caa](3b79caa)) * **bigframes:** world-readable temp zip in create_cloud_function ([#17522](#17522)) ([e726878](e726878)) * bump @angular/common, @angular/forms, @angular/platform-browser and @angular/router in /packages/bigframes/bigframes/display/table_widget_angular ([#17525](#17525)) ([2f893b1](2f893b1)) * bump langsmith from 0.8.0 to 0.8.18 in /packages/bigframes ([#17518](#17518)) ([f23063f](f23063f)) * bump msgpack from 1.1.1 to 1.2.1 in /packages/bigframes ([#17520](#17520)) ([36b5b7e](36b5b7e)) * bump undici and @angular/build in /packages/bigframes/bigframes/display/table_widget_angular ([#17519](#17519)) ([6fc45e3](6fc45e3)) * handle empty endpoints during cloud function reuse ([#17501](#17501)) ([4f5593a](4f5593a)) ### Documentation * ensure that PlotAccessor is included in the API reference ([#17513](#17513)) ([6febabf](6febabf)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

This PR introduces support for deferred execution rendering in TableWidget (the anywidget-based interactive table viewer for Jupyter notebooks). Users can now view dry-run estimations (e.g., query size/cost) and trigger execution directly from the notebook output.
Verified at:
vs code: go/scrcast/NjcyODQxMDY2MjQzNjg2NHxlNjJhY2Y0NS1hMg
colab notebook: go/scrcast/NTk1NzEyMTg0NDcwNzMyOHxjZGQ1ZjQ0NS05NQ
Fixes #<460865443> 🦕