社区小伙伴一直期待的Hudi整合Spark SQL的PR正在积极Review中并已经快接近尾声,Hudi集成Spark SQL预计会在下个版本正式发布,在集成Spark SQL后,会极大方便用户对Hudi表的DDL/DML操作,下面就来看看如何使用Spark SQL操作Hudi表。
2. 环境准备首先需要将PR拉取到本地打包,生成SPARK_BUNDLE_JAR(hudi-spark-bundle_2.11-0.9.0-SNAPSHOT.jar)包
2.1 启动spark-sql在配置完spark环境后可通过如下命令启动spark-sql
2.2 设置并发度由于Hudi默认upsert/insert/delete的并发度是1500,对于演示的小规模数据集可设置更小的并发度。
同时设置不同步Hudi表元数据
3. Create Table使用如下SQL创建表
说明:表类型为MOR,主键为id,分区字段为dt,合并字段默认为ts。
创建Hudi表后查看创建的Hudi表
4. Insert Into 4.1 Insert使用如下SQL插入一条记录
insert完成后查看Hudi表本地目录结构,生成的元数据、分区和数据与Spark Datasource写入均相同。
4.2 Select使用如下SQL查询Hudi表数据
查询结果如下
5. Update 5.1 Update使用如下SQL将id为1的price字段值变更为20
5.2 Select再次查询Hudi表数据
查询结果如下,可以看到price已经变成了20.0
查看Hudi表的本地目录结构如下,可以看到在update之后又生成了一个deltacommit,同时生成了一个增量log文件。
6. Delete 6.1 Delete使用如下SQL将id=1的记录删除
查看Hudi表的本地目录结构如下,可以看到delete之后又生成了一个deltacommit,同时生成了一个增量log文件。
6.2 Select再次查询Hudi表
查询结果如下,可以看到已经查询不到任何数据了,表明Hudi表中已经不存在任何记录了。
7. Merge Into 7.1 Merge Into Insert使用如下SQL向test_hudi_table插入数据
7.2 Select查询Hudi表数据
查询结果如下,可以看到Hudi表中存在一条记录
7.4 Merge Into Update使用如下SQL更新数据
7.5 Select查询Hudi表
查询结果如下,可以看到Hudi表中的分区已经更新了
7.6 Merge Into Delete使用如下SQL删除数据
查询结果如下,可以看到Hudi表中已经没有数据了
8. 删除表使用如下命令删除Hudi表
使用show tables查看表是否存在
可以看到已经没有表了
9. 总结通过上面示例简单展示了通过Spark SQL Insert/Update/Delete Hudi表数据,通过SQL方式可以非常方便地操作Hudi表,降低了使用Hudi的门槛。另外Hudi集成Spark SQL工作将继续完善语法,尽量对标Snowflake和BigQuery的语法,如插入多张表(INSERT ALL WHEN condition1 INTO t1 WHEN condition2 into t2),变更Schema以及CALL Cleaner、CALL Clustering等Hudi表服务。
以上就是Apache Hudi集成Spark SQL操作hide表的详细内容,更多关于Apache Hudi集成Spark SQL的资料请关注七叶笔记其它相关文章!