一、登录spark客户端

  1. spark-sql --master yarn \
  2. --deploy-mode client \
  3. --queue default \
  4. --name wang \
  5. --driver-memory 12G \
  6. --num-executors 10 \
  7. --executor-cores 2 \
  8. --executor-memory 10G

二、sql查询表信息

1、查询表快照信息

SELECT * FROM spark_catalog.data_lake_ods.test_table.snapshots order by committed_at desc

SELECT count(1) FROM spark_catalog.data_lake_ods.test_table.snapshots

2、查询表数据文件

--查询当前快照对应的数据文件

SELECT count(1) FROM data_lake_ods_test.dwd_mkt_uqun_call_detail.data_files

--查询表所有数据文件

SELECT count(1) FROM data_lake_ods_test.dwd_mkt_uqun_call_detail.all_data_files

3、查询删除文件

--查询当前快照对应的删除文件

SELECT count(1) FROM data_lake_ods.test_table.delete_files

--查询所有删除文件

SELECT * FROM data_lake_ods.test_table.all_delete_files

SELECT count(1) FROM data_lake_ods.test_table.all_delete_files

4、查询表快照历史

select * from data_lake_ods.ods_bdg_dp_data_source.history

5、查询manifests

select * from iceberg_catalog.data_lake_ods.ods_bdg_dp_data_source.manifests

三、Iceberg表DDL操作

1、建非分区表

  1. --建表。 布隆筛选建议和主键一样,最多不超过3
  2. CREATE TABLE data_lake_ods.test123(
  3. changed_type int comment 'null',
  4. id bigint comment 'id',
  5. create_time string comment '创建时间',
  6. update_time string comment '更新时间'
  7. )USING iceberg
  8. TBLPROPERTIES(
  9. 'format-version'='2'
  10. ,'write.upsert.enabled'='true'
  11. ,'engine.hive.enabled'='true'
  12. ,'write.distribution-mode' = 'hash'
  13. ,'write.metadata.metrics.default'='full'
  14. ,'write.parquet.bloom-filter-enabled.column.id' = 'true'
  15. ,'table.drop.base-path.enabled'='true'
  16. );

2、建分桶表

  1. --分桶表。布隆筛选建议和主键一样,最多不超过3
  2. CREATE TABLE spark_catalog.data_lake_ods_test.test_bucket_month (
  3. `order_number` BIGINT COMMENT '订单编号',
  4. `user_number` BIGINT COMMENT '用户编号',
  5. `pay_number` BIGINT COMMENT '支付编号',
  6. `spu_number` BIGINT COMMENT '商品spu编号',
  7. `sku_number` BIGINT COMMENT '商品sku编号',
  8. `kafka_timestamp` TIMESTAMP COMMENT 'kafka写入时间戳'
  9. )USING iceberg
  10. PARTITIONED BY (bucket(12,order_number))
  11. TBLPROPERTIES(
  12. 'format-version'='2'
  13. ,'write.upsert.enabled'='true'
  14. ,'engine.hive.enabled'='true'
  15. ,'write.distribution-mode' = 'hash'
  16. ,'write.metadata.metrics.default'='full'
  17. ,'write.parquet.bloom-filter-enabled.column.id' = 'true'
  18. ,'table.drop.base-path.enabled'='true'
  19. );

其它优化参数

  1. TBLPROPERTIES (
  2. 'write.merge.mode' = 'merge-on-read',
  3. 'write.update.mode' = 'merge-on-read',
  4. 'write.delete.mode' ='merge-on-read',
  5. 'write.metadata.delete-after-commit.enabled' = 'true',
  6. //保留metadata.json个数,会删除历史的metadata.json,但不会清理snapshot(即manifestList、manifest、data file、delete file都不会清理)
  7. 'write.metadata.previous-versions-max' = '10',
  8. );

3、修改表属性

  1. alter table data_lake_ods.test123 SET TBLPROPERTIES('write.metadata.metrics.default'='full','write.distribution-mode' = 'hash');

4、删除表

  1. drop table data_lake_ods.test123 purge;

四、表治理

1、小文件合并(非分区表)

  1. CALL spark_catalog.system.rewrite_data_files(
  2. table => 'data_lake_ods.test123',
  3. options => map(
  4. 'partial-progress.enabled', 'true',
  5. 'rewrite-job-order', 'bytes-asc',
  6. 'partial-progress.max-commits', '10000',
  7. 'max-file-group-size-bytes', '1073741824',
  8. 'target-file-size-bytes','134217728',
  9. 'rewrite-all','true'
  10. )
  11. );

2、小文件合并(分区表)

  1. CALL spark_catalog.system.rewrite_data_files(
  2. table => 'data_lake_ods_test.test123',
  3. options => map(
  4. 'partial-progress.enabled', 'true',
  5. 'rewrite-job-order', 'bytes-asc',
  6. 'partial-progress.max-commits', '10000',
  7. 'max-file-group-size-bytes', '1073741824',
  8. 'target-file-size-bytes','134217728',
  9. 'remove-dangling-deletes','true',
  10. 'rewrite-all','true'
  11. )
  12. );

3、治理删除文件特别多的单表(先把删除文件干掉,然后再执行上面治理命令)

  1. CALL spark_catalog.system.rewrite_data_files(
  2. table => 'data_lake_ods.test123',
  3. options => map(
  4. 'max-concurrent-file-group-rewrites','19',
  5. 'max-file-group-size-bytes','1',
  6. 'partial-progress.enabled', 'true',
  7. 'rewrite-all','true'
  8. )
  9. );

4、过期快照清理

  1. CALL spark_catalog.system.expire_snapshots(table => 'data_lake_ods.test_table', older_than => TIMESTAMP '2024-04-08 10:00:00.000');

五、表运维

1、spark3.3查询指定时间快照数据

SELECT * FROM data_lake_ods.ods_bdg_dp_data_source TIMESTAMP AS OF '2024-02-29 17:10:31';
SELECT * FROM data_lake_ods.ods_bdg_dp_data_source TIMESTAMP AS OF 499162860;

2、spark3.3查询制定快照数据

SELECT * FROM data_lake_ods.ods_bdg_dp_data_source VERSION AS OF 10963874102873;

3、回滚快照

CALL hadoop_prod.system.rollback_to_timestamp('mydb.mytest', TIMESTAMP '2021-12-23 16:56:40.000')

六、优秀文章

1、网易数帆

https://www.6aiq.com/article/1686471152273

Iceberg常用命令的更多相关文章

  1. Linux 常用命令(持续补充)

    常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...

  2. LVM基本介绍与常用命令

    一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...

  3. Linux学习笔记(一):常用命令

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  4. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  5. 【原】npm 常用命令详解

    今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...

  6. npm常用命令

    npm常用命令 环境:win7 npm 是什么 NPM(node package manager),通常称为node包管理器.顾名思义,它的主要功能就是管理node包,包括:安装.卸载.更新.查看.搜 ...

  7. Git 常用命令

    一.初始環境配置 git config --global user.name "John Doe"git config --global user.email johndoe@ex ...

  8. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  9. Linux常用命令(一)

    Linux常用命令 1. pwd查看当前路径(Print Working Directory)    [root@CentOS ~]# pwd/root 2. cd .. 返回上一级 .. 表示上一级 ...

  10. 版本控制-svn服务器搭建和常用命令(centos 6.3)

    Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的.使用Git可参考<版本控制-Git服务器搭建和常用命令使用> ...

随机推荐

  1. Echrtas 实时渲染

    1.实时曲线图 业务场景:每个时间节点产生一个数据,且时间节点间隔不固定 坐标轴配置:X轴类型设定为time,Y轴类型设定为value 数据格式:每个节点的数据都是一个数组,第一个数组为时间,第二个元 ...

  2. Vue第三方插件

    1.滚动条 vuescroll 引入插件 - 官网 <script src="https://unpkg.com/vuescroll"></script> ...

  3. 强网杯2023 谍影重重3.0 wp

    参考文章:[使用主动探测方法识别 U2hhZG93c29ja3M=(base64) 服务 - Phuker's Blog]:https://phuker.github.io/posts/U2hhZG9 ...

  4. rocketMQ集群部署

    RocketMQ集群部署 RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛.但是它是如何进行部署的呢,以及它的高可用是如何实现的呢.那么就由我来为大家讲 ...

  5. pg_index

    在pg11之后,引入了indnkeyatts字段,根据官方文档解释其作用:The number of key columns in the index, not counting any includ ...

  6. Python OpenCV按照像素点图片切割

    图像分割是从图像处理到图像分析的关键步骤,在目标检测.特征提取.图像识别等领域具有广泛应用.OpenCV是一个强大的计算机视觉库,提供了多种图像分割方法.本文将详细介绍如何使用Python和OpenC ...

  7. 为什么推荐在 .NET 中使用 YAML 配置文件

    在现代应用开发中,配置管理是一个非常重要的部分.随着微服务.容器化和云原生架构的流行,使用简单.易读的配置格式变得尤为重要.在 .NET 开发中,虽然 JSON 是默认的配置文件格式,但 YAML(& ...

  8. CoverageBuilder

    public CoverageBuilder(String gitPath, String newBranchName, String oldBranchName, List<String> ...

  9. Qt音视频开发42-网络推流(视频推流/本地摄像头推流/桌面推流/网络摄像头转发推流等)

    一.前言 上次实现的文件推流,尽管优点很多,但是只能对现在存在的生成好的音视频文件推流,而现在更多的场景是需要将实时的视频流重新推流分发,用户在很多设备比如手机/平板/网页/电脑/服务器上观看,这样就 ...

  10. 首次公开,最新手机QQ客户端架构的技术演进实践

    本文由腾讯技术何金源分享,原题"不畏移山,手机QQ技术架构升级变迁史",本文进行了排版和内容优化等. 1.引言 接上篇<总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM ...