BigQuery
Why Use Foyle with BigQuery
If you are using BigQuery as your data warehouse then you’ll want to query that data. Constructing the right query is often a barrier to leveraging that data. Using Foyle you can train a personalized AI assistant to be an expert in answering high level questions using your data warehouse.
Prerequisites
Install the Data TableRenderers extension in vscode
- This extension can render notebook outputs as tables
- In particular, this extension can render JSON as nicely formatted, interactive tables
How to integrate BigQuery with RunMe
Below is an example code cell illustrating the recommended pattern for executing BigQuery queries within RunMe.
cat <<EOF >/tmp/query.sql
SELECT
DATE(created_at) AS date,
COUNT(*) AS pr_count
FROM
\`githubarchive.month.202406\`
WHERE
type = "PullRequestEvent"
AND
repo.name = "jlewi/foyle"
AND
json_value(payload, "$.action") = "closed"
AND
DATE(created_at) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 28 DAY) AND CURRENT_DATE()
GROUP BY
date
ORDER BY
date;
EOF
export QUERY=$(cat /tmp/query.sql)
bq query --format=json --use_legacy_sql=false "$QUERY"
As illustrated above, the pattern is to use cat
to write the query to a file. This allows
us to write the query in a more human readable format. Including the entire SQL query in the code
cell is critical for enabling Foyle to learn the query.
The output is formatted as JSON. This allows the output to be rendered using the Data TableRenderers extension.
Before executing the code cell click the configure button in the lower right hand side of the cell and then uncheck the box under “interactive”. Running the cell in interactive mode prevents the output from being rendered using Data TableRenders. For more information refer to the RunMe Cell Configuration Documentation.
We then use bq query
to execute the query.
Controlling Costs
BigQuery charges based on the amount of data scanned. To prevent accidentally running expensive queries you can
use the --maximum_bytes_billed
to limit the amount of data scanned. BigQuery currently charges
$6.25 per TiB.
Troubleshooting
Output Isn’t Rendered Using Data TableRenderers
If the output isn’t rendered using Data TableRenderers there are a few things to check
Click the ellipsis to the left of the the upper left hand corner and select change presentation
- This should show you different mime-types and options for rendering them
- Select Data table
Another problem could be that
bq
is outputting status information while running the query and this is interfering with the rendering. You can work around this by redirecting stderr to/dev/null
. For example,bq query --format=json --use_legacy_sql=false "$QUERY" 2>/dev/null
Try explicitly configuring the mime type by opening the cell configuration and then
- Go to the advanced tab
- Entering “application/json” in the mime type field
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.