大数据分析——Apache Doris(二十七)

1,488 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

  • Insert 执行失败

执行失败表示没有任何数据被成功导入,并返回如下:

mysql >  insert into tbl1 select  *****  from tbl2 where k1 = "a" ;

ERROR 1064  ( HY000 ):  all partitions have no load data .  url :  http :// 10.74.167.16 : 8042 / api / _load_error_log ? file =__shard_2 / error_log_insert_stmt_ba8bb9e158e4879**-**ae8de8507c0bf8a2_ba8bb9e158e4879_ae8de8507c0bf8a2

其中 ERROR 1064 (HY000): all partitions have no load data 显示失败原因。后面的 url 可以用于查询错误的数据,具体见后面 查看错误行 小结。

综上,对于 insert 操作返回结果的正确处理逻辑应为:****

  • 如果返回结果为 ERROR 1064 (HY000),则表示导入失败。

  • 如果返回结果为 Query OK,则表示执行成功。

  • 如果 rows affected 为 0,表示结果集为空,没有数据被导入。

  • 如果 rows affected 大于 0:

  • 如果 status 为 committed,表示数据还不可见。需要通过 show transaction 语句查看状态直到 visible

  • 如果 status 为 visible,表示数据导入成功。

  • 如果 warnings 大于 0,表示有数据被过滤,可以通过 show load 语句获取 url 查看被过滤的行

 删除数据(Delete)

Doris 目前可以通过两种方式删除数据:DELETE FROM 语句和 ALTER TABLE DROP PARTITION 语句。

语法:

DELETE FROM table_name [ PARTITION partition_name ]

WHERE

column_name1 op {  value  |  value_list }   [  AND column_name2 op {  value  |  value_list }   ...];

 DROP PARTITION Statement(删除分区)

该命令可以直接删除指定的分区。因为 Partition 是逻辑上最小的数据管理单元,所以使用 DROP PARTITION 命令可以很轻量的完成数据删除工作。并且该命令不受 load 以及任何其他操作的限制,同时不会影响查询效率。是比较推荐的一种数据删除方式

该命令是同步命令,执行成功即生效。而后台数据真正删除的时间可能会延迟10分钟左右。

 Broadcast/Shuffle Join

doris在join操作的时候时候, 默认使用broadcast的方式进行join, 即将小表通过广播的方式广播到大表所在的节点, 形成内存hash, 然后流式读出大表数据进行hashjoin

但如果小表的数据量也很大的时候, 就会造成内存溢出, 此时需要通过shuffle join的方式进行, 也被称为partition join. 即将大表小表都按照join的key进行hash, 然后进行分布式join

  • 使用 Broadcast Join(默认