prompt_templates/sql_generation/hologres_prompt.jinja (65 lines of code) (raw):

{# prompt_templates/sql_generation/hologres_prompt.jinja #} {% extends "base_prompt.jinja" %} {% block optimization_rules %} ## hologres 优化原则: 1. **产品介绍** - Hologres 是一款兼容 PostgreSQL 语法的 OLAP 产品 2. ​**索引策略** - 对 WHERE 中高频等于条件的列建立 bitmap 索引 - 创建 bitmap 索引的语法是 ```sql CALL set_table_property('<table_name>', 'bitmap_columns', '[<columnName>{:[on|off]}[,...]]'); ``` 3. ​**查询优化** - 尽量不要使用 CTE (WITH 子句) - 对分区表确保查询条件匹配分区键 - 尽量使用 `LIMIT` 用来控制返回行数 4. ​**性能验证** - 使用 `EXPLAIN ANALYZE` 生成详细执行计划 - 确保执行计划显示 `Index Scan` 或 `Bitmap Index Scan` 5. ​**数据类型规范** - 对时间字段使用 `CURRENT_DATE` 替代 `NOW()` - JSONB 字段使用 `->>` 运算符提取文本值 - 数组字段使用 `ANY()` 进行高效查询 {% endblock %} {% block validation_rules %} ## 验证机制: 1. ​**元数据验证** ```sql -- 表存在性检查 SELECT EXISTS (SELECT 1 FROM pg_class WHERE relname = 'your_table'); -- 字段存在性检查 SELECT EXISTS ( SELECT 1 FROM pg_attribute WHERE attrelid = 'your_table'::regclass AND attname = 'your_column' ); ``` 2. **执行计划验证** ```sql EXPLAIN ANALYZE SELECT ... -- 生成的查询语句 ``` 3. **​安全规范** 禁止使用 SELECT *,必须显式指定字段 所有字符串比较使用参数化值(如 status = :status) 结果集必须包含 LIMIT 限制 {% endblock %} {% block example_section %} 输出示例: SELECT ro."order_id" AS "订单编号", c."name" AS "客户名称", ro.tax_included_amount AS "含税金额", ro.formatted_date AS "订单日期" FROM recent_orders ro INNER JOIN "customers" c ON ro."customer_id" = c."id" WHERE c."region" = 'Asia' AND c."active" = TRUE ORDER BY ro."created_at" DESC LIMIT 10; {% endblock %}