Search Shortcut cmd + k | ctrl + k
parser_tools

Exposes functions for parsing referenced tables and usage context from SQL queries using DuckDB's native parser.

Maintainer(s): zacMode

Installing and Loading

INSTALL parser_tools FROM community;
LOAD parser_tools;

Example

-- Extract table references from a simple query
SELECT * FROM parse_tables('SELECT * FROM my_table');
┌─────────┬───────────┬─────────┐
 schema    table     context 
 varchar   varchar   varchar 
├─────────┼───────────┼─────────┤
 main     my_table   from    
└─────────┴───────────┴─────────┘

-- Parse a query with a CTE and a join
SELECT * FROM parse_tables($$
    WITH recent_users AS (SELECT * FROM users WHERE created_at > now() - INTERVAL '7 days')
    SELECT * FROM recent_users r JOIN logins l ON r.id = l.user_id
$$);
┌─────────┬──────────────┬────────────┐
 schema      table      context    
 varchar    varchar     varchar    
├─────────┼──────────────┼────────────┤
          recent_users  cte        
 main     users         from       
 main     logins        join_right 
 main     recent_users  from_cte   
└─────────┴──────────────┴────────────┘

-- Return a list of table names from a query
SELECT parse_table_names('SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id');
┌────────────────────────────────────┐
           parse_table_names        
             varchar[]              
├────────────────────────────────────┤
 ['orders', 'customers']            
└────────────────────────────────────┘

-- Parse queries from a csv file
SELECT parse_table_names(query) AS tables FROM 'user_queries.csv';
┌───────────────────────────────┐
            tables             
          varchar[]            
├───────────────────────────────┤
 ['users']                     
 ['orders', 'customers']       
└───────────────────────────────┘

-- Structured output as a list of table references
SELECT parse_tables('SELECT * FROM products p JOIN inventory i ON p.sku = i.sku');
┌────────────────────────────────────────────────────────────────────────────┐
                              parse_tables                                  
 list<struct<schema: varchar, table: varchar, context: varchar>>            
├────────────────────────────────────────────────────────────────────────────┤
 [{'schema': 'main', 'table': 'products',  'context': 'from'},              
  {'schema': 'main', 'table': 'inventory', 'context': 'join_right'}]        
└────────────────────────────────────────────────────────────────────────────┘

-- Detect invalid sql
SELECT query, is_parsable(query) AS valid
FROM (VALUES
    ('SELECT * FROM good_table'),
    ('BAD SQL SELECT *'),
    ('WITH cte AS (SELECT 1) SELECT * FROM cte')
) AS t(query);
┌───────────────────────────────────────────────┬────────┐
                    query                       valid  
                   varchar                      boolean
├───────────────────────────────────────────────┼────────┤
 SELECT * FROM good_table                       true   
 BAD SQL SELECT *                               false  
 WITH cte AS (SELECT 1) SELECT * FROM cte       true   
└───────────────────────────────────────────────┴────────┘

About parser_tools

parser_tools is a DuckDB extension that enables SQL query introspection using DuckDB’s native parser. It allows you to analyze SQL queries and extract structural information directly in SQL. Future versions may expose additional aspects of the parsed query structure. For more details and examples, visit the extension repository.

Added Functions

function_name function_type description comment examples
is_parsable scalar NULL NULL []
parse_table_names scalar NULL NULL []
parse_tables scalar NULL NULL []
parse_tables table NULL NULL []