Skip to main content

Generate SQL queries from natural language

Project description

GitHub PyPI Colab Documentation
GitHub PyPI Colab Documentation

Vanna.AI

Vanna is a Python-based AI SQL co-pilot. Our initial users are data-savvy data analysts, data scientists, engineers, and similar people that use Vanna to automate writing complex SQL.

Vanna can:

Natural Language to SQL

sql = vn.generate_sql(question='Who are the top 10 customers?')

Output:

SELECT customer_name,
       total_sales
FROM   (SELECT c.c_name as customer_name,
               sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales,
               row_number() OVER (ORDER BY sum(l.l_extendedprice * (1 - l.l_discount)) desc) as rank
        FROM   snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o
                ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c
                ON o.o_custkey = c.c_custkey
        GROUP BY customer_name)
WHERE  rank <= 10;

Run SQL

This function is provided as a convenience. You can choose to run your SQL however you normally do and use the rest of the downstream functions.

df = vn.get_results(cs, database, sql)

Output:

customer_name total_sales
Customer#000000001 68127.72
Customer#000000002 65898.69
...

Generate Plotly Code

plotly_code = vn.generate_plotly_code(question=my_question, sql=sql, df=df)

Output:

fig = go.Figure(go.Bar(
    x=df['CUSTOMER_NAME'],
    y=df['TOTAL_SALES'],
    marker={'color': df['TOTAL_SALES'], 'colorscale': 'Viridis'},
    text=df['TOTAL_SALES'],
    textposition='auto',
))

fig.update_layout(
    title="Top 10 Customers by Sales",
    xaxis_title="Customer",
    yaxis_title="Total Sales",
    xaxis_tickangle=-45,
    yaxis_tickprefix="$",
)

Run Plotly Code

fig = vn.get_plotly_figure(plotly_code=plotly_code, df=df)
fig.show()

Output:

Top 10 Customers by Sales

Improve Your Training Data

vn.store_sql(
    question=my_question,
    sql=sql,
)

How Vanna Works

flowchart LR
    DB[(Known Correct Question-SQL)]
    Try[Try to Use DDL/Documentation]
    SQL(SQL)
    Check{Is the SQL correct?}
    Generate[fa:fa-circle-question Use Examples to Generate]
    DB --> Find
    Question[fa:fa-circle-question Question] --> Find{fa:fa-magnifying-glass Do we have similar questions?}
    Find -- Yes --> Generate
    Find -- No --> Try
    Generate --> SQL
    Try --> SQL
    SQL --> Check
    Check -- Yes --> DB
    Check -- No --> Analyst[fa:fa-glasses Analyst Writes the SQL]
    Analyst -- Adds --> DB

Getting Started

Install Vanna from PyPI and import it:

%pip install vanna
import vanna as vn

Enter your email to set an API Key

This will send a one-time code to your email address. Copy and paste the code into the prompt.

my_email = '' # Enter your email here
vn.login(email=my_email)

Add Training Data

vn.train(
    question="Which products have the highest sales?",
    sql="...",
)

Generate SQL

sql = vn.generate_sql(question="Who are the top 10 customers?")

Documentation

Full Documentation

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vanna-0.0.13.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vanna-0.0.13-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file vanna-0.0.13.tar.gz.

File metadata

  • Download URL: vanna-0.0.13.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for vanna-0.0.13.tar.gz
Algorithm Hash digest
SHA256 b710e2c448e16a2545abdb6d950c7d106f559528e59f6529a21297f39e9f6ed0
MD5 bf1da23dbedcf00c847875ae797f02d9
BLAKE2b-256 03b24f7eb4a2afd4713b5a0d120cbaea58b1497cdd27f7a2377b4607540a89b9

See more details on using hashes here.

File details

Details for the file vanna-0.0.13-py3-none-any.whl.

File metadata

  • Download URL: vanna-0.0.13-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for vanna-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 5a3b0e7e78792907cfd09210956216ca44129ea8401dec97a2461e75c0e55569
MD5 c419d6aaddf3b298bb281d2163c5cab1
BLAKE2b-256 f76d0dfbd7e456dbf0c33f10b9c8166a175bd6c2304dc52ed4aaa0448543dcd3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page