spark sql hive sql join 之 using语法

792 篇文章 ¥99.90 ¥299.90
本文探讨了在Spark SQL和Hive SQL中使用JOIN using语法的情况,指出当连接条件两侧字段同名时可以使用。特别提醒,使用using会自动去除结果集中的重复关联列。文中通过示例展示了在不同环境中如何实现这一操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql join using语法.

什么时候使用

join on条件的两侧字段同名就可以用:

SELECT
post.post_id,
title,
review
FROM post
INNER JOIN post_comment ON post.post_id = post_comment.post_id
ORDER BY post.post_id, post_comment_id

等效于:

SELECT
post_id,
title,
review
FROM post
INNER JOIN post_comment USING(post_id)
ORDER BY post_id, post_comment_id

注意事项: select * 使用Using 会去除重复的关联列

可以看到 常规写法 * 会保留两侧的关联键 post_id

对应到spark-shell中 join(...,Seq(),...) 就是using语法,他会提出结果集中重复的关联字段.

SELECT *
FROM post
INNER JOIN post_comment ON post.post_id = post_com
### Spark SQL 语法使用指南 Spark SQL 提供了一种强大的方式来处理结构化和半结构化数据,支持标准的 SQL 查询以及 DataFrame 和 Dataset API。以下是关于 Spark SQL 语法的一些核心概念和使用方法: #### 1. 创建表 在 Spark SQL 中,可以通过多种方式创建临时视图或持久化的 Hive 表。 - **基于现有 RDD 或 DataFrames 创建临时视图** ```scala val df = spark.read.json("examples/src/main/resources/people.json") df.createOrReplaceTempView("people") // 创建一个名为 people 的临时视图[^1] ``` - **创建永久表 (Hive 支持)** 如果启用了 Hive 支持,则可以创建永久表。 ```sql CREATE TABLE IF NOT EXISTS employees ( name STRING, salary FLOAT ) USING PARQUET; ``` --- #### 2. 执行 SQL 查询 一旦定义了表或视图,就可以通过 `spark.sql` 方法运行 SQL 查询。 - **基本查询** ```sql SELECT * FROM people WHERE age > 30; -- 基本过滤条件[^1] ``` - **聚合操作** ```sql SELECT department, COUNT(*) AS count FROM employees GROUP BY department ORDER BY count DESC; -- 聚合并排序[^1] ``` - **连接操作** ```sql SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.dept_id = d.id; -- 连接两个表[^1] ``` --- #### 3. 参数设置与性能优化 为了提高 Spark SQL 的执行效率,可以根据具体场景调整配置参数。 - **ORC 文件拆分策略** ```sql SET spark.hadoop.hive.exec.orc.split.strategy=ETL; -- 设置 ORC 文件拆分策略为 ETL[^2] ``` - **文件切片大小控制** ```sql SET spark.hadoop.mapreduce.input.fileinputformat.split.maxsize=64000000; -- 控制最大切片大小为 64MB[^2] SET spark.hadoop.mapreduce.input.fileinputformat.split.minsize=64000000; -- 控制最小切片大小为 64MB[^2] ``` - **避免分区合并** ```sql SET spark.hadoopRDD.targetBytesInPartition=-1; -- 禁用目标字节数限制以防止不必要的分区合并[^2] ``` --- #### 4. UDF 定义与注册 用户自定义函数(UDF)允许扩展内置功能。 - **Scala/Python 注册 UDF 示例** ```scala import org.apache.spark.sql.functions.udf // Scala 版本 val toUpperUdf = udf((str: String) => str.toUpperCase()) val resultDf = df.withColumn("upperName", toUpperUdf($"name")) // Python 版本 from pyspark.sql.functions import udf to_upper_udf = udf(lambda s: s.upper() if s is not None else "", StringType()) result_df = df.withColumn("upperName", to_upper_udf(df["name"])) ``` --- #### 5. 数据保存 完成计算后,可将结果写入外部存储系统。 - **保存为 Parquet 格式** ```scala df.write.mode("overwrite").parquet("/path/to/output.parquet"); -- 将结果保存为 Parquet 文件 ``` - **保存为 CSV 格式** ```scala df.write.option("header", "true").csv("/path/to/output.csv"); -- 添加头部信息并将结果保存为 CSV 文件 ``` --- ### 总结 以上介绍了 Spark SQL 的基础语法及其一些高级特性,包括如何创建表、执行复杂查询、优化性能以及定义 UDF 函数等内容。这些工具可以帮助开发人员更高效地利用 Spark 处理大规模数据集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas2143

您的打赏是我的动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值