iceberg-Spark3.0SQL测试案例
参考:,
测试使⽤的Spark3.0版本
⼀、配置及参数
1、配置jar包:
iceberg0.11.0版本,官⽹下载jar包,放到spark的jars⽬录下。
点击下载和的驱动包。
注意:要在Spark中使⽤Iceberg,请⾸先配置catalogs(注意:Spark2.4不⽀持DDL操作)
2、注意:
1、iceberg命名空间:V1和V2表:
v1表:使⽤⾃⼰启动时的本地空间,创建的表直接写⼊本地所指定的位置。
注意:iceberg中,v1表是不能⽤的,创建的iceberg表 hive、spark都是不认同的。所以必须切换到v2表进⾏操作。
v2表:创建Session时,catalog指定的名称。
st切换后的表,创建的表直接写⼊到Hive元数据所指定的位置,建表写⼊数据均正常,且Hive可以查询到数据。
注意:V2表只能看到iceberg表。hive其他表⽆法看到,v2表建表后,Spark下show create table 是查不到建表语句的。只能desc 查看表数据,如果想看建表语句,则需要⽤hive看,spark建表语句和hive是不同的。
3、参数及启动
创建⼀个名字叫zdm的catalog链接。
1、HIVE
spark.sql.catalog.zdm=org.apache.iceberg.spark.SparkCatalog
spark.sql.pe=hive #hive
spark.sql.catalog.zdm.uri=thrift://metastore-host:port
#astore.uris 可以去l⾥查看
sions=org.apache.sions.IcebergSparkSessionExtensions #SQL扩展,开启⽀持merge及CALL操作
2、HDFS
spark.sql.catalog.zdm=org.apache.iceberg.spark.SparkCatalog
conf spark.sql.pe=hadoop
conf spark.sql.catalog.zdm.warehouse=hdfs://HDFS81339//tmp/iceberg
3、其他
查看⽬录和空间名称:SHOW CURRENT NAMESPACE
切换本地/Hive库:st
4、启动
spark3-sql--master yarn \
--conf spark.sql.catalog.zdm=org.apache.iceberg.spark.SparkCatalog \
--conf sions=org.apache.sions.IcebergSparkSessionExtensions \
--conf spark.sql.pe=hive \
--conf spark.sql.catalog.zdm.uri=thrift://metastore-host:port
⼆、Spark3.0-SQL测试案例
DDL操作
1、建表
create table iceberg_spark(id int,name string,dt String)using iceberg PARTITIONED by(dt);
2、插⼊数据
hive>insert into table iceberg_table values(5,'e');
3、删除表
hive>insert into table iceberg_table values(5,'e');
4、重命名
ALTER st.iceberg_spark RENAME st.iceberg_spark1;
5、新增列(FIRST和AFTER更改顺序):
ALTER st.iceberg_spark1 ADD COLUMN sex String AFTER id;
6、删除列:
ALTER table iceberg_spark1 DROP COLUMN flag;
7、分区操作
新增/更改/删除分区字段:
添加分区字段是元数据操作,不会更改任何现有表数据。新数据将使⽤新分区写⼊,旧数据还在改之前分区中。对于元数据表中的新分区字段,旧数据⽂件将具有空值。
注意:
1、启动时必须加SQL扩展参数;
2、不要删除分区操作,删除分区时显⽰成功,但是测试中发现,会删除元数据,导致后续命令desc和insert 失败。
ALTER st.iceberg_spark ADD PARTITION FIELD catalog;
ALTER st.iceberg_spark ADD PARTITION FIELD truncate(dt,4);
ALTER st.iceberg_spark ADD PARTITION FIELD years(dt);--dt必须是timestamp类型
thriftALTER st.iceberg_spark DROP PARTITION FIELD truncate(dt,4);--慎重
8、设置顺序写⼊
表写顺序不能保证查询的数据顺序。它仅影响将数据写⼊表的⽅式。⽐如 MERGE INTO 在Spark中将
使⽤表排序。
ALTER st.iceberg_spark1 WRITE ORDERED BY id
DML操作
1、插⼊数据
insert into/overwrite table iceberg_spark values(1,"a","2021"),(2,"b","2021"),(3,"c","2021");
2、删除数据
delete st.iceberg_spark where id=4;
3、merge数据
merge测试有异常,因为SQL扩展未能成功,Yarn UI上查看的确已经加载了扩展的jar包,也有了加载参数,但是却始终报未加载成功异常,社区提issus之后也未能解决。暂时使⽤官⽹案例。
MERGE INTO prod.db.target t -- a target table
) s -- the source updates
ON t.id = s.id -- condition to find updates for target rows
<-- updates
----------------------------------------------------------------------
WHEN后⾯跟条件
WHEN MATCHED AND s.op ='delete'THEN DELETE
WHEN MATCHED unt IS NULL AND s.op ='increment'THEN UPDATE unt =0
WHEN MATCHED AND s.op ='increment'THEN UPDATE unt = t.count +1
----------------------------------------------------------------------
不匹配则插⼊:
WHEN NOT MATCHED THEN INSERT*
----------------------------------------------------------------------
插⼊还⽀持其他条件:
WHEN NOT MATCHED AND s.event_time > still_valid_threshold THEN INSERT(id, count)VALUES(s.id,1)
其他运维操作
1、查看版本信息(必须写全表namespace.database.table.history):
select*st.iceberg_spark.history;
2、展⽰元数据信息
select*st.iceberg_spark.manifests;
3、显⽰⼀个表的数据⽂件和每个⽂件的元数据
select*st.iceberg_spark.files
4、查看快照信息
SELECT*st.iceberg_spark.snapshots
5、使⽤CALL对表进⾏运维操作
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论