流数据湖平台Apache Paimon(六)集成Spark之DML插入数据

news/2024/11/29 22:52:30/

文章目录

    • 4.4. 插入数据
    • 4.5. 查询数据
      • 4.5.1 时间旅行
      • 4.5.2 增量查询
    • 4.6 系统表
      • 4.6.1 快照表 Snapshots Table
      • 4.6.2 模式表 Schemas Table
      • 4.6.3 选项表 Options Table
      • 4.6.4 审计日志表 Audit log Table
      • 4.6.5 文件表 Files Table
      • 4.6.6 标签表 Tags Table

4.4. 插入数据

INSERT 语句向表中插入新行。插入的行可以由值表达式或查询结果指定,跟标准的sql语法一致。

INSERT INTO table_identifier [ part_spec ] [ column_list ] { value_expr | query }

part_spec

可选,指定分区的键值对列表,多个用逗号分隔。可以使用类型文字(例如,date’2019-01-02’)。

语法: PARTITION (分区列名称 = 分区列值 [ , … ] )

column_list

可选,指定以逗号分隔的字段列表。

语法:(col_name1 [,column_name2, …])

所有指定的列都应该存在于表中,并且不能相互重复。它包括除静态分区列之外的所有列。字段列表的大小应与 VALUES 子句或查询中的数据大小完全相同。

value_expr

指定要插入的值。可以插入显式指定的值或 NULL。必须使用逗号分隔子句中的每个值。可以指定多于一组的值来插入多行。

语法:VALUES ( { 值 | NULL } [ , … ] ) [ , ( … ) ]

注意:将 Nullable 字段写入 Not-null 字段

不能将另一个表的可为空列插入到一个表的非空列中。Spark可以使用nvl函数来处理,比如A表的key1是not null,B表的key2是nullable:

INSERT INTO A key1 SELECT nvl(key2, ) FROM B

案例:

INSERT INTO tests VALUES(1,1,'order','2023-07-01','1'), (2,2,'pay','2023-07-01','2');

INSERT INTO tests_p SELECT * from tests;

4.5. 查询数据

就像所有其他表一样,Paimon 表可以使用 SELECT 语句进行查询。

Paimon的批量读取返回表快照中的所有数据。默认情况下,批量读取返回最新快照。

4.5.1 时间旅行

可以在查询中使用 VERSION AS OF 和 TIMESTAMP AS OF 来进行时间旅行。

1)读取指定id的快照

SELECT * FROM tests VERSION AS OF 1;

SELECT * FROM tests VERSION AS OF 2;

2)读取指定时间戳的快照

-- 查看快照信息

SELECT * FROM tests&snapshots;

SELECT * FROM tests TIMESTAMP AS OF '2023-07-03 15:34:20.123';

-- 时间戳指定到秒(向上取整)

SELECT * FROM tests TIMESTAMP AS OF 1688369660;

3)读取指定标签

SELECT * FROM tests VERSION AS OF 'my-tag';

4.5.2 增量查询

读取开始快照(不包括)和结束快照之间的增量更改。例如,“3,5”表示快照 3 和快照 5 之间的更改:

spark.read()

.format(“paimon”)

.option(“incremental-between”, “3,5”)

.load(“path/to/table”)

4.6 系统表

系统表包含有关每个表的元数据和信息,例如创建的快照和使用的选项。用户可以通过批量查询访问系统表。

4.6.1 快照表 Snapshots Table

通过snapshots表可以查询表的快照历史信息,包括快照中发生的记录数。Spark中使用需要反引号表名$系统表名

SELECT * FROM tests$snapshots;

通过查询快照表,可以了解该表的提交和过期信息以及数据的时间旅行。

4.6.2 模式表 Schemas Table

通过schemas表可以查询该表的历史schema。

SELECT * FROM tests$schemas;

可以连接快照表和模式表以获取给定快照的字段。

SELECT s.snapshot_id, t.schema_id, t.fields

FROM tests$snapshots s JOIN tests$schemas t

ON s.schema_id=t.schema_id where s.snapshot_id=3;

4.6.3 选项表 Options Table

可以通过选项表查询DDL中指定的表的选项信息。未显示的选项将是默认值。

SELECT * FROM tests$options;

4.6.4 审计日志表 Audit log Table

如果需要审计表的changelog,可以使用audit_log系统表。通过audit_log表,获取表增量数据时可以获取rowkind列。您可以利用该栏目进行过滤等操作来完成审核。

rowkind 有四个值:

+I:插入操作。

-U:使用更新行的先前内容进行更新操作。

+U:使用更新行的新内容进行更新操作。

-D:删除操作。

SELECT * FROM tests$audit_log;

4.6.5 文件表 Files Table

可以查询特定快照表的文件。

– 查询最新快照的文件

SELECT * FROM tests$files;

4.6.6 标签表 Tags Table

通过tags表可以查询表的标签历史信息,包括基于哪些快照进行标签以及快照的一些历史信息。您还可以通过名称获取所有标签名称和时间旅行到特定标签的数据。

SELECT * FROM tests$tags;


http://www.ppmy.cn/news/1011137.html

相关文章

【ROS2】ROS2的框架知识

一、说明 对于初学ROS的同学,如果没有有效的学习规划,那么不妨看看该文,在这里,我们将对ROS2出现的知识板块进行介绍,期望对初识ROS2的同学起到导航作用。 二、ROS2的优势所在 2.1 ROS1的不足 ROS1项⽬的初衷是为了给…

Leetcode-每日一题【剑指 Offer 56 - II. 数组中数字出现的次数 II】

题目 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums [3,4,3,3]输出:4 示例 2: 输入:nums [9,1,7,9,7,9,7]输出:1 限制…

C语言错题之 8

前言: 今天依然是五道小题,都不难,主要是一些细节的知识。 这选择题做的真是让我大开眼界,长见识了(🤦‍) 1. 题干: 点击此处跳转 答案: ABCD 解析: …

无人驾驶实战-第八课(定位算法)

无人驾驶中定位的作用: 定位高精度地图:提供当前位置的静态环境感知 (车道线/交通指示牌/红绿灯/柱子/建筑物/等) 定位动态物体感知:将感知到的动态物体正确放入静态环境 定位获取位置姿态:用于路径规划/决…

Vue系列第八篇:echarts绘制柱状图和折线图

本篇将使用echarts框架进行柱状图和折线图绘制。 目录 1.绘制效果 2.安装echarts 3.前端代码 4.后端代码 1.绘制效果 2.安装echarts // 安装echarts版本4 npm i -D echarts4 3.前端代码 src/api/api.js //业务服务调用接口封装import service from ../service.js //npm …

postgresql 使用之 存储架构 触摸真实数据的存储结构以及组织形式,存入数据库的数据原来在这里

存储架构 ​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 postgresql 数据库服务运行时,数据在磁…

排序八卦炉之归并、计数

文章目录 1.归并排序1.1初识代码1.2代码分析1.3复杂度1.4非递归版本1.01.初识代码2.代码分析 1.5非递归版本2.01.初识代码2.代码分析 2.计数排序2.1初始代码2.2代码分析 1.归并排序 1.1初识代码 //归并排序 时间复杂度:O(N*logN) 空间复杂度:O(N) vo…

Element-UI简介

目录 安装 常用组件 Container 布局容器 Button 按钮 MessageBox 弹框 Form 表单验证 element-ui是一个前端的ui框架,封装了很多已经写好的ui组件,例如表单组件,布局组件,表格组件.......是一套桌面端组件。 Element - 网站…