<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g" -->

---
title: From Raw Tables to Conversational Analytics in One Afternoon
description: A walkthrough demonstrates ingesting the Chinook relational dataset into BigQuery using dlt, building clean canonical views, declaring a native BigQuery...
canonical: https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: From Raw Tables to Conversational Analytics in One Afternoon | daily.dev
og:description: A walkthrough demonstrates ingesting the Chinook relational dataset into BigQuery using dlt, building clean canonical views, declaring a native BigQuery...
og:url: https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g
og:image: https://api.daily.dev/og/posts/LLmAOS62G.png
og:image:alt: From Raw Tables to Conversational Analytics in One Afternoon
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# From Raw Tables to Conversational Analytics in One Afternoon

**[dltHub](https://daily.dev/sources/dlthub)** · 7 min read · 0 upvotes · 0 comments

## Summary

A walkthrough demonstrates ingesting the Chinook relational dataset into BigQuery using dlt, building clean canonical views, declaring a native BigQuery property graph over them with CREATE PROPERTY GRAPH, querying it with GQL, and finally using BigQuery's Conversational Analytics to ask natural-language questions against the graph. The key argument is that the natural-language answers are only trustworthy because the canonical modeling layer resolved ambiguity upstream, before the graph or the AI agent ever saw the data. Three practical gotchas are noted: every node and edge table needs an explicit KEY(), table references need full project.dataset.table qualification, and CONTAINS is a reserved keyword that can't be used as an edge label.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://dlthub.com/blog/bigquery-property-graph-dlt>

## Questions this post answers

### How do I create a property graph in BigQuery using CREATE PROPERTY GRAPH syntax?

Use the CREATE PROPERTY GRAPH statement to declare NODE TABLES and EDGE TABLES over existing BigQuery tables or views, with zero data movement since it is a schema declaration. Each node and edge table needs an explicit KEY(), table references require full project.dataset.table qualification, and CONTAINS cannot be used unquoted as an edge alias since it is a reserved SQL keyword.

_daily.dev surfaces practical setup gotchas like these for developers evaluating BigQuery's property graph feature._

### How do I query a BigQuery property graph for multi-hop relationships without writing a recursive CTE?

Use GQL's MATCH clause to express a multi-hop path directly, such as (c:Customer)-[:Placed]->(i:Invoice)-[:Purchased]->(t:Track)-[:RecordedOn]->(al:Album)-[:PerformedBy]->(ar:Artist), instead of hand-writing a recursive CTE with a base case, recursive step, and visited-array to prevent cycles. A single MATCH statement replaces manual JOIN and recursion logic for reachable-within-N-hops questions.

_Developers deciding between recursive SQL and native graph queries can track patterns like this on daily.dev._

### Why did BigQuery's Conversational Analytics agent answer natural language questions correctly without a manually written Instructions field?

The agent needed no Instructions field because ambiguity about what columns mean had already been resolved upstream when canonical tables were built with dlt, before the property graph or agent ever saw the data. Google's own Conversational Analytics setup normally requires hand-typed Instructions clarifying which column means what; clean canonical modeling eliminates that per-agent patching step.

_daily.dev helps teams building natural-language data agents follow real-world lessons on schema and ontology design._

## Similar posts on daily.dev

- [Conversational Analytics in BigQuery now GA](https://daily.dev/posts/conversational-analytics-in-bigquery-now-ga-o1nti3zgs) · Google Cloud · 0 upvotes · 0 comments
- [BigQuery Graph: Connecting Data and AI at Scale](https://daily.dev/posts/bigquery-graph-connecting-data-and-ai-at-scale-aqyccgg0s) · Google Cloud · 2 upvotes · 0 comments
- [Build data agents with Conversational Analytics API](https://daily.dev/posts/build-data-agents-with-conversational-analytics-api-qgmutty0g) · Google Cloud · 0 upvotes · 0 comments
- [Introducing BigQuery Graph](https://daily.dev/posts/introducing-bigquery-graph-tig40l393) · Google Cloud · 0 upvotes · 0 comments

---

Tags: [#data-engineering](https://daily.dev/tags/data-engineering), [#google-bigquery](https://daily.dev/tags/google-bigquery)

[View this post on daily.dev](https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"From Raw Tables to Conversational Analytics in One Afternoon","url":"https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g"},"datePublished":"2026-09-01T06:56:49.942Z","dateModified":"2026-09-14T07:56:46.276Z","description":"A walkthrough demonstrates ingesting the Chinook relational dataset into BigQuery using dlt, building clean canonical views, declaring a native BigQuery...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/5e3579719573747d99c1a3c483846cfc?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/5e3579719573747d99c1a3c483846cfc?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"dltHub","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"dltHub","logo":"https://media.daily.dev/image/upload/s--lanGOBQH--/f_auto/v1734606584/logos/dlthub","url":"https://daily.dev/sources/dlthub"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"data-engineering,google-bigquery","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"dltHub","item":"https://daily.dev/sources/dlthub"},{"@type":"ListItem","position":3,"name":"From Raw Tables to Conversational Analytics in One Afternoon"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/from-raw-tables-to-conversational-analytics-in-one-afternoon-llmaos62g#faq","mainEntity":[{"@type":"Question","name":"How do I create a property graph in BigQuery using CREATE PROPERTY GRAPH syntax?","acceptedAnswer":{"@type":"Answer","text":"Use the CREATE PROPERTY GRAPH statement to declare NODE TABLES and EDGE TABLES over existing BigQuery tables or views, with zero data movement since it is a schema declaration. Each node and edge table needs an explicit KEY(), table references require full project.dataset.table qualification, and CONTAINS cannot be used unquoted as an edge alias since it is a reserved SQL keyword. daily.dev surfaces practical setup gotchas like these for developers evaluating BigQuery's property graph feature."}},{"@type":"Question","name":"How do I query a BigQuery property graph for multi-hop relationships without writing a recursive CTE?","acceptedAnswer":{"@type":"Answer","text":"Use GQL's MATCH clause to express a multi-hop path directly, such as (c:Customer)-[:Placed]->(i:Invoice)-[:Purchased]->(t:Track)-[:RecordedOn]->(al:Album)-[:PerformedBy]->(ar:Artist), instead of hand-writing a recursive CTE with a base case, recursive step, and visited-array to prevent cycles. A single MATCH statement replaces manual JOIN and recursion logic for reachable-within-N-hops questions. Developers deciding between recursive SQL and native graph queries can track patterns like this on daily.dev."}},{"@type":"Question","name":"Why did BigQuery's Conversational Analytics agent answer natural language questions correctly without a manually written Instructions field?","acceptedAnswer":{"@type":"Answer","text":"The agent needed no Instructions field because ambiguity about what columns mean had already been resolved upstream when canonical tables were built with dlt, before the property graph or agent ever saw the data. Google's own Conversational Analytics setup normally requires hand-typed Instructions clarifying which column means what; clean canonical modeling eliminates that per-agent patching step. daily.dev helps teams building natural-language data agents follow real-world lessons on schema and ontology design."}}]}
```

