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 %}