Paimon, 大数据

paimon-06 DQL

批量查询

在sql-client中设置执行模式为批即可

RESET 'execution.checkpointing.interval';
SET 'execution.runtime-mode' = 'batch';

时间旅行

读取指定id的快照

SELECT * FROM ws_t /*+ OPTIONS('scan.snapshot-id'='1') */;
SELECT * FROM ws_t /*+ OPTIONS('scan.snapshot-id'='2') */;

读取指定时间戳的快照

SELECT * FROM ws_t$snapshots;
SELECT * FROM ws_t /*+ OPTIONS('scan.timestamp-millis'='1693367351380') */;

读取指定标签

SELECT * FROM ws_t /*+ OPTIONS('scan.tag-name'='my-tag') */;

增量查询

去读开始快照(不包括)和结束快照之间的增量更改

比如3,5表示快照3和快照5之间的更改

SELECT * FROM ws_t /*+ OPTIONS('incremental-between'='3,5') */;

在batch模式中,不反悔DELETE记录,因此-D的记录将被删除,如果你想查看DELETE记录,可以查询audit_log表

SELECT * FROM ws_t$audit_log /*+ OPTIONS('incremental-between'='3,5') */;

流式查询

默认清空下Streaming read在第一次启动时会生成表上的最新快照,并继续读取最新更改

SET 'execution.checkpointing.interval'='30s';
SET 'execution.runtime-mode' = 'streaming';

也可以从最新读取,设置扫描模式

SELECT * FROM ws_t /*+ OPTIONS('scan.mode'='latest') */;

时间旅行

如果只想处理今天及以后的数据,则可以使用分区过滤器来实现

SELECT * FROM test_p WHERE dt > '2023-07-01'

如果不是分区表,或者无法按分区筛选,可以使用时间旅行读取流

从指定快照id开始读取变更数据

SELECT * FROM ws_t /*+ OPTIONS('scan.snapshot-id'='1') */;

从指定时间戳开始读取

SELECT * FROM ws_t /*+ OPTIONS('scan.timestamp-millis'='1693367351380') */;

第一次启动时读取指定快照数据,并继续读取变化

SELECT * FROM ws_t /*+ OPTIONS('scan.mode'='from-snapshot-full', 'scan.snapshot-id'='3') */;

Consumer ID

优点

在流式读取表时指定consumer-id,这是一个实验性功能

当流读取paimon表时 下一个快照将被记录到文件系统中,这有几个优点

  • 当之前的作业停止后,新启动的作业可以继续消费之前的进度,而不需要从状态恢复。新的读取将从消费者文件中找到的下一个快照ID开始读取
  • 在判断一个快照是否过期时,paimon会查看文件系统中该表的所有消费者,如果还有消费者依赖这个快照,那么这个快照就不会因为过期而被删除
  • 当没有水印定义时,paimon表会将快照中的水印传递到下游paimon表,这意味着可以追踪整个管道的水印进度

注意消费者将防止快照过期,可以指定consumer.expiration-time来管理消费者的声明周期

案例演示

  • 指定consumer-id开始流式查询
SELECT * FROM ws_t /*+ OPTIONS('consumer-id'='test') */;

停止调原先的流式查询插入数据

INSERT INTO ws_t VALUES(6,6,6);

再次指定consumer-id流式查询

SELECT * FROM ws_t /*+ OPTIONS('consumer-id'='test') */;

查询优化

强烈建议在查询时指定分区和主键过滤器,这将加快查询的数据跳过速度

可以加速数据条约的过滤函数有:

  • =
  • <
  • <=
  • >
  • >=
  • IN(…)
  • LIKE ‘abc%’
  • IS NULL

paimon会按主键对数据进行排序,从而加快点查询和查询范围的速度

使用复合主键时,查询过滤器最好形成主键的最左边前缀,以获得良好的加速效果

  • 按照主键从最左边开始 效果最好