template: quot_rule: | 必须对数据库名、表名、字段名、别名外层加反引号(`)。 1. 点号(.)不能包含在引号内,必须写成 `database`.`table` 2. 即使标识符不含特殊字符或非关键字,也需强制加反引号 3. 在多表关联(JOIN)/ 多子查询的 SQL 中,只要多个表 / 子查询存在 同名字段,所有引用该字段的位置,必须显式指定 表别名 limit_rule: | 当需要限制行数时,必须使用标准的LIMIT语法 other_rule: | 必须为每个表生成别名(不加AS) {multi_table_condition} 禁止使用星号(*),必须明确字段名 中文/特殊字符字段需保留原名并添加英文别名 不能用 + 拼接字符串,字符串必须使用单引号 分组非常严格:SELECT 里的字段必须出现在 GROUP BY 里,或者是聚合函数 函数字段必须加别名 百分比字段保留两位小数并以%结尾 WHERE 条件中不能使用 >、<、>=、<= 等比较运算符,必须使用 = HIVE 中没有 NOT IN 操作符,必须使用 LEFT JOIN 或 EXISTS 替代 判空使用 NVL()函数 避免与数据库关键字冲突 basic_example: | 📌 以下示例严格遵循中的 Hive 规范,展示符合要求的 SQL 写法与典型错误案例。 ⚠️ 注意:示例中的表名、字段名均为演示虚构,实际使用时需替换为用户提供的真实标识符。 🔍 重点观察: 1. 反引号包裹所有数据库对象的规范用法 2. 中英别名/百分比/函数等特殊字段的处理 3. 关键字冲突的规避方式 查询 ods.orders 表的前100条订单(含中文字段和百分比) SELECT * FROM ods.orders LIMIT 100 -- 错误:未加引号、使用星号 SELECT `订单ID`, `金额` FROM `ods`.`orders` `t1` LIMIT 100 -- 错误:缺少英文别名 SELECT COUNT(`订单ID`) FROM `ods`.`orders` `t1` -- 错误:函数未加别名 SELECT `t1`.`订单ID` AS `order_id`, `t1`.`金额` AS `amount`, COUNT(`t1`.`订单ID`) AS `total_orders`, CONCAT(CAST(ROUND(`t1`.`折扣率` * 100, 2) AS STRING), '%') AS `discount_percent` FROM `ods`.`orders` `t1` GROUP BY `t1`.`订单ID`, `t1`.`金额`, `t1`.`折扣率` LIMIT 100 统计 dim.users(含关键字字段user)的活跃占比 SELECT user, status FROM dim.users -- 错误:未处理关键字和引号 SELECT `user`, ROUND(active_ratio) FROM `dim`.`users` -- 错误:百分比格式错误 SELECT `u`.`user` AS `username`, CONCAT(CAST(ROUND(`u`.`active_ratio` * 100, 2) AS STRING), '%') AS `active_percent` FROM `dim`.`users` `u` WHERE `u`.`status` = 1 统计订单表 ods.orders 中2024年每个客户的消费总金额,返回金额最高的前100名客户 SELECT `t`.`customer_id` AS `customer_id`, SUM(`t`.`amount`) AS `total_amount` FROM (SELECT `customer_id`, `amount` FROM `ods`.`orders` WHERE YEAR(`create_time`) = 2024 LIMIT 100) `t` GROUP BY `t`.`customer_id` -- 严重错误:LIMIT加在了内层子查询中,聚合只基于被截断的100行数据计算,结果错误! SELECT `o`.`customer_id` AS `customer_id`, SUM(`o`.`amount`) AS `total_amount` FROM `ods`.`orders` `o` WHERE YEAR(`o`.`create_time`) = 2024 GROUP BY `o`.`customer_id` ORDER BY `total_amount` DESC LIMIT 100 -- 正确:聚合基于完整数据计算,LIMIT只限制最终返回结果的行数,且只出现在最外层查询 example_engine: Apache Hive 2.X example_answer_1: | {"success":true,"sql":"SELECT `country` AS `country_name`, `continent` AS `continent_name`, `year` AS `year`, `gdp` AS `gdp` FROM `Sample_Database`.`sample_country_gdp` ORDER BY `country`, `year`","tables":["sample_country_gdp"],"chart-type":"line"} example_answer_1_with_limit: | {"success":true,"sql":"SELECT `country` AS `country_name`, `continent` AS `continent_name`, `year` AS `year`, `gdp` AS `gdp` FROM `Sample_Database`.`sample_country_gdp` ORDER BY `country`, `year` LIMIT 1000","tables":["sample_country_gdp"],"chart-type":"line"} example_answer_2: | {"success":true,"sql":"SELECT `country` AS `country_name`, `gdp` AS `gdp` FROM `Sample_Database`.`sample_country_gdp` WHERE `year` = '2024' ORDER BY `gdp` DESC","tables":["sample_country_gdp"],"chart-type":"pie"} example_answer_2_with_limit: | {"success":true,"sql":"SELECT `country` AS `country_name`, `gdp` AS `gdp` FROM `Sample_Database`.`sample_country_gdp` WHERE `year` = '2024' ORDER BY `gdp` DESC LIMIT 1000","tables":["sample_country_gdp"],"chart-type":"pie"} example_answer_3: | {"success":true,"sql":"SELECT `country` AS `country_name`, `gdp` AS `gdp` FROM `Sample_Database`.`sample_country_gdp` WHERE `year` = '2025' AND `country` = '中国'","tables":["sample_country_gdp"],"chart-type":"table"} example_answer_3_with_limit: | {"success":true,"sql":"SELECT `country` AS `country_name`, `gdp` AS `gdp` FROM `Sample_Database`.`sample_country_gdp` WHERE `year` = '2025' AND `country` = '中国' LIMIT 1000","tables":["sample_country_gdp"],"chart-type":"table"}