自动转换 Hive SQL 和 Spark SQL 之间的语法差异
| 功能 | Hive SQL | Spark SQL | 备注 |
|---|---|---|---|
| 数组展开 | LATERAL VIEW explode(arr) t AS col | SELECT explode(arr) AS col 或 inline() | Spark 3.x 支持 generator 在 SELECT |
| Map展开 | LATERAL VIEW explode(map) t AS k,v | SELECT explode(map) 或 explode_outer(map) | |
| 字符串聚合 | concat_ws(',', collect_set(col)) | concat_ws(',', collect_set(col)) | 兼容 |
| 条件表达式 | IF(cond, a, b) / CASE WHEN | IF(cond, a, b) / CASE WHEN | 兼容 |
| 类型转换 | CAST(x AS STRING) | CAST(x AS STRING) | 兼容,但 Spark 有更多类型 |
| JSON解析 | get_json_object(json, '$.key') | get_json_object(json, '$.key') | 兼容,Spark还有from_json |
| 正则替换 | regexp_replace(str, pattern, rep) | regexp_replace(str, pattern, rep) | 兼容 |
| 窗口函数 | ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...) | ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...) | 兼容 |
| 分区裁剪 | WHERE dt = '2024-01-01' | WHERE dt = '2024-01-01' | 需注册为分区表 |
| CTE | WITH cte AS (...) SELECT ... | WITH cte AS (...) SELECT ... | 兼容 |
| INSERT | INSERT INTO TABLE t PARTITION(dt) SELECT ... | INSERT INTO t PARTITION(dt) SELECT ... | Spark省略TABLE关键字 |
| 建表 | CREATE TABLE ... STORED AS PARQUET | CREATE TABLE ... USING PARQUET | Spark SQL用USING |
| 临时表 | CREATE TEMPORARY FUNCTION ... | CREATE TEMPORARY VIEW ... AS | |
| 排序 | DISTRIBUTE BY / SORT BY / ORDER BY | DISTRIBUTE BY / SORT BY / ORDER BY | 兼容 |
| 采样 | TABLESAMPLE(BUCKET 1 OUT OF 10) | TABLESAMPLE(BUCKET 1 OUT OF 10) | 兼容,Spark还有TABLESAMPLE(10 PERCENT) |
| 功能 | Hive 函数 | Spark SQL 函数 | 差异 |
|---|---|---|---|
| 当前日期 | current_date() | current_date() | 兼容 |
| 当前时间 | current_timestamp() | current_timestamp() | 兼容 |
| 日期差 | datediff(end, start) | datediff(end, start) | 兼容 |
| 日期加减 | date_add(date, days) | date_add(date, days) | 兼容 |
| 字符串拼接 | concat(a, b, c) | concat(a, b, c) | 兼容 |
| 子串 | substr / substring | substr / substring | 兼容 |
| 去重计数 | COUNT(DISTINCT col) | COUNT(DISTINCT col) 或 approx_count_distinct | Spark有近似去重 |
| 百分位 | percentile(col, 0.5) | percentile(col, 0.5) | 兼容 |
| 哈希 | hash(col) | hash(col) / xxhash64(col) | Spark有更多哈希 |
| 数组操作 | array_contains(arr, val) | array_contains(arr, val) | 兼容 |
| Map操作 | map_keys(m) / map_values(m) | map_keys(m) / map_values(m) | 兼容 |
| URL解析 | parse_url(url, 'HOST') | parse_url(url, 'HOST') | 兼容 |
| 窗口累积 | SUM() OVER(ORDER BY ... ROWS UNBOUNDED PRECEDING) | 同上 | 兼容 |
| 类型推断 | typeof(col) 不支持 | typeof(col) | Spark独有 |
| Schema推断 | 不支持 | schema_of_json(col) | Spark独有 |
本站不收集用户个人信息,所有工具均在浏览器本地运行,数据不会上传服务器。您可以放心使用。
TC Tools 是由个人开发维护的在线工具集合,旨在为开发者和普通用户提供便捷、实用的在线工具。所有工具均在浏览器本地运行,数据不会上传服务器。
工具异常、新增建议或合作交流,欢迎反馈:
💬 微信公众号:ai小糖罐
📩 邮箱:track_tang@126.com
1. 本工具集仅供学习交流和技术研究使用,请勿用于任何非法用途。使用本工具产生的一切后果由使用者自行承担。
2. 所有工具均在浏览器本地运行,数据不会上传服务器,但不保证数据处理结果的绝对准确性,重要场景请人工复核。
3. 法律/医疗/金融类工具仅作参考,不构成专业建议;涉及具体案件、病情或投资决策时,请咨询持牌专业人士。
4. 工具中涉及的商标、品牌名称等知识产权归原权利人所有,仅作识别用途。
5. 本站保留在法律允许范围内对本工具集进行更新、修改或下线的权利,无需另行通知。
遇到工具异常、有新工具需求或商务合作,可通过以下方式联系我们:
💬 微信公众号
搜索关注:ai小糖罐
可反馈工具异常、提交新工具建议