Semantic aliases Innovation Release

Semantic aliases are reusable, parameterized SQL queries with semantic descriptions. They function like enhanced database views that can be discovered through natural language search.

Why use semantic aliases?

  • Discoverability: Users find queries by describing what they need ("customer purchase history") rather than memorizing names
  • Reusability: Common business queries are defined once and executed many times
  • Governance: Approved queries can be centrally managed and audited
  • Parameterization: Dynamic values without SQL injection risks

Creating an alias

SELECT aidb.create_semantic_alias(
    'get_customer_orders',                              -- unique name
    'Retrieve all orders for a specific customer',      -- semantic description
    'SELECT * FROM orders WHERE customer_id = ${customer_id}
     AND order_date >= ${start_date}',                  -- query with placeholders
    aidb.alias_params(
        aidb.alias_param('customer_id', 'integer', 'The customer ID'),
        aidb.alias_param('start_date', 'date', 'Start date for order search')
    ),
    'my_embedding_model'                                -- model for vectorizing description
);

Parameter placeholders: Use ${param_name} syntax. Parameters are safely substituted at execution time.

Defining parameters

Parameters describe the inputs your query accepts:

aidb.alias_param(
    name,          -- TEXT: matches ${name} placeholder in query
    param_type,    -- TEXT: data type ('integer', 'text', 'date', 'boolean', etc.)
    description,   -- TEXT: human-readable description
    enum_values    -- TEXT[]: optional allowed values (default: NULL)
);

With enum constraint

Restricts allowed values:

aidb.alias_param('status', 'text', 'Order status filter',
    ARRAY['pending', 'shipped', 'delivered', 'cancelled'])

Combining multiple parameters

aidb.alias_params(
    aidb.alias_param('customer_id', 'integer', 'Customer identifier'),
    aidb.alias_param('limit', 'integer', 'Maximum results to return')
)

Executing an alias

SELECT * FROM aidb.execute_semantic_alias(
    'get_customer_orders',
    '{"customer_id": 123, "start_date": "2024-01-01"}'::jsonb
);

With role-based execution

Runs the query as a specified role:

SELECT * FROM aidb.execute_semantic_alias(
    'get_customer_orders',
    '{"customer_id": 123, "start_date": "2024-01-01"}'::jsonb,
    'analytics_role'
);

Searching for aliases

Find aliases by semantic similarity to a natural language description:

SELECT name, description, query_text, similarity
FROM aidb.search_semantic_aliases(
    'my_embedding_model',           -- must match model used to create aliases
    'find customer purchase history',
    0.7,
    10,
    0
);

Managing aliases

List all aliases

SELECT * FROM aidb.get_semantic_aliases();

Get details for a specific alias

SELECT * FROM aidb.get_semantic_alias('get_customer_orders');

Delete an alias

SELECT aidb.delete_semantic_alias('get_customer_orders');

Example: building a query library

Build a centralized, searchable collection of approved queries:

-- Create the embedding model
SELECT aidb.create_model(
    'query_lib_model', 'openai_embeddings',
    aidb.embeddings_config(model => 'text-embedding-3-small', api_key => 'sk-...')
);

-- Create commonly-used business queries
SELECT aidb.create_semantic_alias(
    'monthly_revenue_by_product',
    'Calculate total revenue grouped by product for a given month',
    'SELECT p.name, SUM(o.amount) as revenue
     FROM orders o JOIN products p ON o.product_id = p.id
     WHERE DATE_TRUNC(''month'', o.created_at) = DATE_TRUNC(''month'', ${target_month}::date)
     GROUP BY p.name ORDER BY revenue DESC',
    aidb.alias_params(
        aidb.alias_param('target_month', 'date', 'Any date within the target month')
    ),
    'query_lib_model'
);

-- Users discover queries semantically
SELECT * FROM aidb.search_semantic_aliases(
    'query_lib_model', 'product sales report', 0.7, 5, 0
);

-- Execute discovered query
SELECT * FROM aidb.execute_semantic_alias(
    'monthly_revenue_by_product',
    '{"target_month": "2024-06-01"}'::jsonb
);