Gemini for Data Analytics (Conversational Analytics API) enables natural language interactions with your data. Ask questions in plain English and get SQL queries, visualizations, and insights from BigQuery and Looker data sources.Key capabilities:
Natural language to SQL: “Show me sales by region” → automatic SQL generation
Multi-datasource: Query BigQuery tables, Looker explores, and Looker Studio simultaneously
Automatic visualization: Generate charts and graphs from query results
from google.colab import authauth.authenticate_user()
Or for non-Colab environments:
gcloud auth application-default login
4
Create Your First Agent
from google.cloud import geminidataanalytics_v1beta as gdaclient = gda.DataAgentServiceClient()# Configure BigQuery datasourcebq_reference = gda.BigQueryTableReference( project_id="bigquery-public-data", dataset_id="faa", table_id="us_airports",)# Create data agentagent = client.create_data_agent( parent=f"projects/{PROJECT_ID}/locations/global", data_agent_id="airports_agent", data_agent=gda.DataAgent( data_analytics_agent=gda.DataAnalyticsAgent( published_context=gda.Context( system_instruction="You are an aviation data analyst", datasource_references=gda.DatasourceReferences( bq=gda.BigQueryTableReferences( table_references=[bq_reference] ) ), ) ) ),)
5
Ask Questions
chat_client = gda.DataChatServiceClient()# Create conversationconversation = chat_client.create_conversation( parent=f"projects/{PROJECT_ID}/locations/global", conversation=gda.Conversation( agents=[agent.name] ),)# Ask a questionresponse = chat_client.generate_message( conversation=conversation.name, messages=[gda.Message( user_message=gda.UserMessage( text="How many airports are in California?" ) )],)# Process responsefor msg in response.messages: if msg.system_message.data: # SQL was generated and executed print("Generated SQL:", msg.system_message.data.generated_sql) print("Results:", msg.system_message.data.result.data)
system_instruction = "You are a sales analyst for an e-commerce company. Always include percentages and comparisons to previous periods."context = gda.Context( system_instruction=system_instruction, datasource_references=datasource_refs,)
chat_client = gda.DataChatServiceClient()# Create conversationconversation = chat_client.create_conversation( parent=f"projects/{PROJECT_ID}/locations/global", conversation_id="sales_analysis_1", conversation=gda.Conversation( agents=[agent.name] ),)# First questionresponse1 = chat_client.generate_message( conversation=conversation.name, messages=[gda.Message( user_message=gda.UserMessage( text="Show me sales by region for Q4 2024" ) )],)# Follow-up question (context maintained)response2 = chat_client.generate_message( conversation=conversation.name, messages=[gda.Message( user_message=gda.UserMessage( text="Now compare that to Q4 2023" # "that" refers to previous query ) )],)# Another follow-upresponse3 = chat_client.generate_message( conversation=conversation.name, messages=[gda.Message( user_message=gda.UserMessage( text="Show it as a bar chart" # "it" refers to the comparison ) )],)
def handle_response(response): for msg in response.messages: system_msg = msg.system_message # Text response if system_msg.text: print("Text:", system_msg.text.parts) # Schema information elif system_msg.schema: print("Schema resolved:") for datasource in system_msg.schema.result.datasources: print(f" Table: {datasource.bigquery_table_reference.table_id}") # Data query results elif system_msg.data: if system_msg.data.generated_sql: print("SQL:", system_msg.data.generated_sql) if system_msg.data.result: # Convert to pandas DataFrame import pandas as pd fields = [f.name for f in system_msg.data.result.schema.fields] rows = [{f: row[f] for f in fields} for row in system_msg.data.result.data] df = pd.DataFrame(rows) print(df) # Chart visualization elif system_msg.chart: import altair as alt import json # Render Vega-Lite chart vega_config = system_msg.chart.result.vega_config chart = alt.Chart.from_dict(dict(vega_config)) chart.display() # Clarification needed elif system_msg.clarification: print("Please clarify:") for question in system_msg.clarification.questions: print(f" {question.question}") for option in question.options: print(f" - {option}")handle_response(response)
stream = chat_client.generate_message_stream( conversation=conversation.name, messages=[gda.Message( user_message=gda.UserMessage( text="Analyze sales trends over the past year" ) )],)for chunk in stream: for msg in chunk.messages: if msg.system_message.text: print(msg.system_message.text.parts, end="", flush=True)
chat_client = gda.DataChatServiceClient()# Define context inlineinline_context = gda.Context( system_instruction="You are a data analyst", datasource_references=datasource_refs,)# Generate response without creating agent or conversationresponse = chat_client.generate_message( inline_context=inline_context, messages=[gda.Message( user_message=gda.UserMessage( text="How many airports are in Texas?" ) )],)
context = gda.Context( system_instruction="You are a data scientist", datasource_references=datasource_refs, options=gda.ConversationOptions( analysis=gda.AnalysisOptions( python=gda.AnalysisOptions.Python( enabled=True # Enable Python for complex calculations ) ) ),)# Agent can now use Python for:# - Statistical analysis# - Data transformations# - Complex calculations# - Custom visualizations
response = chat_client.generate_message( conversation=conversation.name, messages=[gda.Message( user_message=gda.UserMessage( text="Create a line chart of monthly sales with a trend line" ) )], visualization_config=gda.VisualizationConfig( chart_type="line", show_legend=True, theme="dark", ),)
# Combine BigQuery and Lookerbq_ref = gda.BigQueryTableReference( project_id="my-project", dataset_id="warehouse", table_id="raw_events",)looker_ref = gda.LookerExploreReference( looker_instance_uri="https://company.looker.com", lookml_model="business_intelligence", explore="sales_metrics",)datasource_refs = gda.DatasourceReferences( bq=gda.BigQueryTableReferences(table_references=[bq_ref]), looker=gda.LookerExploreReferences(explore_references=[looker_ref]),)agent = client.create_data_agent( parent=f"projects/{PROJECT_ID}/locations/global", data_agent=gda.DataAgent( data_analytics_agent=gda.DataAnalyticsAgent( published_context=gda.Context( system_instruction="""You have access to both raw event data (BigQuery) and business metrics (Looker). Use raw data for detailed analysis and Looker for standard business metrics.""", datasource_references=datasource_refs, ) ) ),)# Query spans both sourcesresponse = chat_client.generate_message( inline_context=gda.Context( datasource_references=datasource_refs, ), messages=[gda.Message( user_message=gda.UserMessage( text="Compare funnel conversion rates from raw events with the aggregated metrics in Looker" ) )],)
for agent in client.list_data_agents( parent=f"projects/{PROJECT_ID}/locations/global"): print(f"Agent: {agent.name}") print(f" Created: {agent.create_time}")