hive anti join 的几种写法

这篇具有很好参考价值的文章主要介绍了hive anti join 的几种写法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

t_a 表的记录如下

c1 |
:———— |
a |
b |
c |

生成 SQL 如下:

create table t_a(c1 string);
insert into t_a values("a"),("b"),("c");

t_b 表的记录如下

c1
b
m

生成 SQL 如下:

create table t_b(c1 string);
insert into t_b values("b"),("m");

我们要在t_a 中出现,而不在 t_b中出现的记录。
结果需要为:

c1
a
c
  • 写法1 — 使用not in
select * from t_a 
where c1 not in(select c1 from t_b);
  • 写法2 —使用 left join 关联上的去掉
    这种写法不容易读懂。
select a.* from t_a a left join t_b b
on a.c1=b.c1
where b.c1 is null;

注意 left join 中 b.c1 is null 不能谓词下推。

生成的执行计划如下。注意,在 join 后才过滤 _col1 is null,关联上的 _col1 肯定是 not null,所以关联上的全去掉。文章来源地址https://www.toymoban.com/news/detail-696407.html

Plan optimized by CBO.

Vertex dependency in root stage
Map 1 <- Map 2 (BROADCAST_EDGE)

Stage-0
  Fetch Operator
    limit:-1
    Stage-1
      Map 1 vectorized
      File Output Operator [FS_20]
        Select Operator [SEL_19] (rows=1 width=93)
          Output:["_col0"]
          Filter Operator [FIL_18] (rows=1 width=93)
            predicate:_col1 is null
            Map Join Operator [MAPJOIN_17] (rows=2 width=93)
              Conds:SEL_16._col0=RS_15._col0(Left Outer),Output:["_col0","_col1"]
            <-Map 2 [BROADCAST_EDGE] vectorized
              BROADCAST [RS_15]
                PartitionCols:_col0
                Select Operator [SEL_14] (rows=2 width=85)
                  Output:["_col0"]
                  TableScan [TS_2] (rows=2 width=85)
                    ods@t_b,b,Tbl:COMPLETE,Col:NONE,Output:["c1"]
            <-Select Operator [SEL_16] (rows=2 width=85)
                Output:["_col0"]
                TableScan [TS_0] (rows=2 width=85)
                  ods@t_a,a,Tbl:COMPLETE,Col:NONE,Output:["c1"]

Time taken: 0.159 seconds, Fetched: 29 row(s)
  • 写法3 — except
    这种写法运行速度比较慢,并且如果每个表有多个字段,但是,仅按少数的字段进行判断的话就不适合。
select * from t_a except select * from t_b;

到了这里,关于hive anti join 的几种写法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive数据导出为csv、tsv文件的几种方法

    Hive数据导出csv,tsv 第一种(推荐) PS: ‘|tr “t” “,”’ 将数据分隔符 制表符 替换为 “,”. hive在hdfs中存储可能是\\001分割,替换t即可. 数据中包含\\\",\\\"会导致.csv文件不能正确解析.这时建议改为.tsv文件(制表符分割). hdfs中== 空值 采用 N 存储,可以使用 |tr -d “\\\\N” 变为正

    2024年02月15日
    浏览(40)
  • 大数据技术之Hadoop学习(七)——Hive数据仓库

    目录 素材 一、数据仓库简介 1、数据仓库的认识 (1)数据仓库是面向主题的。 (2)数据仓库是随时间变化的。 (3)数据仓库相对稳定 (4)OLTP和OLAP 2、数据仓库的结构 (1)数据源 (2)数据存储及管理 (3)OLAP 服务器 (4)前端工具 3、数据仓库的数据模型 (1)星状模

    2024年02月17日
    浏览(42)
  • MyBatis-Plus 实现分页的几种写法

    MyBatis-Plus (opens new window) (简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小 :启动即会自动注入基本 CURD,性能基本无损

    2024年01月20日
    浏览(45)
  • MySQL中按月统计并逐月累加统计值的几种写法

    有时候,我们可能有这样的场景,需要将销量按月统计,并且按月逐月累加。写惯了GROUP BY,按月统计倒是小case,但是逐月累加实现起来,要稍微麻烦一点。下面就整理几种写法,以备不时之需。 该表包含三个字段:id、sales_date、sales_amount。id为自增长主键,sales_date为销售日期

    2024年02月06日
    浏览(31)
  • Hive的几种排序方式、区别,使用场景

    Hive 支持两种主要的排序方式: ORDER BY 和 SORT BY 。除此之外,还有 DISTRIBUTE BY 和 CLUSTER BY 语句,它们也在排序和数据分布方面发挥作用。 1. ORDER BY ORDER BY 在 Hive 中用于对查询结果进行全局排序,确保结果集是全局有序的。但是,使用 ORDER BY 时,Hive 会将所有数据集中到一个

    2024年02月02日
    浏览(39)
  • hive anti用法

    a left anti join b :在查询过程中,剔除a表中和b表有交集的部分。 相当于 demo

    2024年02月16日
    浏览(37)
  • 前端 mock 数据的几种方式

    目录 接口demo Better-mock just mock koa webpack Charles 总结         具体需求开发前,后端往往只提供接口文档,对于前端,最简单的方式就是把想要的数据写死在代码里进行开发,但这样的坏处就是和后端联调前还需要再把写死的数据从代码里删除,最好的方式是无侵入的  m

    2024年02月17日
    浏览(49)
  • Unity——数据存储的几种方式

    PlayerPrefs适合用于 存储简单的键值对数据 存储的数据会在游戏关闭后依然保持,并且可以在不同场景之间共享,适合用于需要在游戏不同场景之间传递和保持的数据。 它利用key-value的方式将数据保存到本地,跟字典类似。然后通过代码进行保存、读取、更新操作。值得注意

    2024年02月03日
    浏览(44)
  • 数据大屏--->前端实时更新数据的几种方式

    优点:最大的优点就是实现简单 缺点:(1)无用的请求多,客户端不知道服务端什么时候数据更新,只能不停的向服务端发送请求, (2)数据实时性差:客户端还是需要一段时间(3s)才能拿到最新的数据 优点:解决了短轮询每隔几秒向服务端频繁发送请求的问题; 缺点:(1)服务端资源大量消

    2024年04月17日
    浏览(62)
  • 35.MySQL导出数据的几种方式

    1.导出全表数据。 select * from test into outfile \\\'/tmp/a.sql\\\'; 2.导出某个数据库下的表。 --secure-file-priv=\\\'\\\'  mysqldump -T /data/backup -u root -prootroot --set-gtid-purged=OFF  test 将test数据库导出到:backup目录下。 3.导出自定义格式的文件。 mysql -uroot -prootroot -e \\\"select * from t2;\\\" test t2.sql  id    nam

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包