Presto SQL使用ST_相交进行左连接,ST_交叉会产生意外的结果

Presto SQL使用ST_相交进行左连接,ST_交叉会产生意外的结果,sql,presto,amazon-athena,Sql,Presto,Amazon Athena,抱歉,如果标题没有提供信息 使用AWS雅典娜 有两个表: 1.1事务表 location time status type .... deleted_at BLOB 2020-09-01 BLOB 2020-09-02 BLOB 2020-09-03 2.面积表 boundary created_at deleted_at POLYGON((...)) 2020-0

抱歉,如果标题没有提供信息

使用AWS雅典娜

有两个表:

1.1事务表

location      time         status    type    ....   deleted_at
  BLOB     2020-09-01
  BLOB     2020-09-02
  BLOB     2020-09-03
2.面积表

 boundary              created_at     deleted_at
  POLYGON((...))       2020-09-01       null
  POLYGON((...))       2020-09-01       null
  POLYGON((...))       2020-09-01     2020-10-01
对于事务_表中的每一行,我希望添加适当的边界

    select date(time) as dt
         , count(time) As cnt
      from transaction_table t
 left join area_table a
        on ST_intersects(boundary, ST_Point(ST_X(t.location), ST_Y(t.location)))
     where t.status = 'complete'
       and t.deleted_at is null
       and t.time >= date('2020-09-01')
       and a.deleted_at is null
  group by date(withdraw_time);
问题是当我使用ST_相交或ST_包含每日cnt减少时,查询中没有左连接,这对我来说没有意义,因为左连接总是输出与左表相同或更大的行

左表和右表都没有空值,并且没有增加行数的多个联接(如果是这样,使用左联接的查询比不使用左联接的查询多行)

现在使用ST_Crosss修复了问题->输出相同的结果(带/不带左连接)。但我不确定为什么在上面的查询中行数会减少

编辑:ST_Cross似乎没有连接任何行,因此与查询时没有左连接的值相同。所以我的问题是,为什么使用左连接ST_相交或ST_包含时,每日cnt会减少?Mysql中的相同查询(ST_point->point)运行得非常好

来自和

  • 点(lat,lng)给出零维的点对象
  • ST_Point(lat,lng)是一种几何图形,是二维的

因此,我猜使用ST_相交(Geom,Geom)和ST_相交(Geom,Point)的效果不同,但这仍然不能解释在左连接上减少的每日cnt。

雅典娜基于Presto 0.172-根据他们的发行说明,没有可用的地理空间功能:

雅典娜的地理空间功能是作为一个Presto插件实现的,这里有完整的参考资料:

一个要考虑的事实是<代码>参数的顺序:StPosit < /C> >代码> StPoT(经度,纬度)< /代码>,经度为第一个参数,纬度为第二个。 您还在where条件中引用左表和右表,这肯定会导致行数减少