标签: lateral-join

LATERAL和PostgreSQL中的子查询有什么区别?

由于Postgres能够进行LATERAL连接,我一直在阅读它,因为我目前为我的团队执行复杂的数据转储,其中包含大量低效的子查询,这使得整个查询需要四分钟或更长时间.

我知道LATERAL联接可能能够帮助我,但即使在阅读了像Heap Analytics 这样的文章之后,我仍然没有完全遵循.

LATERAL加入的用例是什么?LATERAL连接和子查询之间有什么区别?

sql postgresql subquery lateral-join

119
推荐指数
5
解决办法
7万
查看次数

如何在Spark中读取嵌套集合

我有一张镶有桌子的镶木桌子

,array <struct <col1,col2,.. colN >>

可以使用LATERAL VIEW语法在Hive中对此表运行查询.

如何将此表读入RDD,更重要的是如何在Spark中过滤,映射等嵌套集合?

在Spark文档中找不到对此的任何引用.提前感谢您的任何信息!

PS.感觉可能有助于在桌子上给出一些统计数据.主表~600中的列数.行数~200m.嵌套集合中的"列"数〜10.平均集合中的平均记录数~35.

nested apache-spark parquet apache-spark-sql lateral-join

18
推荐指数
2
解决办法
2万
查看次数

雪花中 LATERAL FLATTEN(...) 和 TABLE(FLATTEN(...)) 之间的区别

LATERAL FLATTEN(...)Snowflake 中和 的使用有什么区别TABLE(FLATTEN(...))FLATTEN我检查了,LATERAL和的文档,TABLE无法明确以下查询之间的功能差异。

select
    id as account_id,
    account_regions.value::string as region
from
    salesforce.accounts,
    lateral flatten(split(salesforce.accounts.regions, ', ')) account_regions
Run Code Online (Sandbox Code Playgroud)
select
    id as account_id,
    account_regions.value::string as region
from
    salesforce.accounts,
    table(flatten(split(salesforce.accounts.regions, ', '))) account_regions
Run Code Online (Sandbox Code Playgroud)

flatten snowflake-cloud-data-platform lateral-join

13
推荐指数
1
解决办法
8761
查看次数

如何将集合返回函数移动到 LATERAL FROM 项目 PostgreSQL

我试试这个

select created_at, 
sum((json_array_elements(shipping_lines::json) ->> 'price')::float) as shipping_price
from t1
group by 1
Run Code Online (Sandbox Code Playgroud)

它显示错误:

错误:聚合函数调用不能包含设置返回函数调用第 5 行:sum(((json_array_elements(shipping_lines::json) ->> 'price')... ^ 提示:您也许可以移动设置返回函数进入 LATERAL FROM 项目。

如何使用 Lateral From 解决这个问题?我读了这个 PsSQL 文档,但并没有真正理解横向功能

sql arrays postgresql json lateral-join

11
推荐指数
1
解决办法
9915
查看次数

如何解决 Spark SQL 横向连接的这种情况?

我有一个lateral join这样的定义:

select A.id, B.value
from A
left join lateral (
    select value
    from B
    where B.id = A.id
    limit 1
) as X on true;
Run Code Online (Sandbox Code Playgroud)

它具有limit 1内部的特殊点(在更复杂的情况下,我可以在连接中有一些额外的选项来缩小值和/或)order by。我知道 Spark-SQL 目前还没有这样的东西,那么我怎样才能找到解决方法呢?

apache-spark apache-spark-sql lateral-join

8
推荐指数
1
解决办法
1254
查看次数

PostgreSQL中Outer Apply的等效语法是什么

我试图找到一个关于从MSSQL到PostgreSQL的等效使用OUTER APPLY的SQL查询,但似乎很难找到.

我的MSSQL示例查询是这样的.

希望有人可以帮我解决我的问题.提前致谢.

SELECT table1.col1, table1.col2, Supp.ID, Supp.Supplier

FROM SIS_PRS table1 

OUTER APPLY (SELECT TOP 1 ID, SupplierName  FROM table2 WHERE table2.ID = table1.SupplierID) AS Supp
Run Code Online (Sandbox Code Playgroud)

sql-server postgresql lateral-join

7
推荐指数
1
解决办法
4601
查看次数

LEFt JOIN LATERAL 显示 SELECT 错误

我正在尝试运行以下查询:

SELECT
tc.ID_NUMBER AS AFC_RPP_Number,
hc.BUSINESS AS Business,
hc.DIRECTOR AS Director,
tc.REASON_FOR_REVISION AS Description_of_Change
FROM alo_gg.AWS_PIM tc
left join lateral(
    select BUSINESS,DIRECTOR                
    FROM alo_ggg.tracker
    WHERE START_DATE <= tc.DATE AND  SO = tc.SO 
    ORDER BY START_DATE DESC 
    LIMIT 1
) hc;
Run Code Online (Sandbox Code Playgroud)

上面的查询显示错误:

ERROR:  syntax error at or near "SELECT"
left join lateral (SELECT BUSINESS,DIRECTOR...
Run Code Online (Sandbox Code Playgroud)

如果我单独运行子查询,它会给我一个结果,但lateral它会给我一个错误。

sql greenplum lateral-join

6
推荐指数
1
解决办法
6990
查看次数

PostgreSQL 可以在 jsonb 数组对象上加入吗?

由于 JSON 支持,我正在考虑切换到 PostgreSQL。但是,我想知道,是否可以通过单个查询实现以下功能:

假设有两个表:

表 1) 组织:

  ID (INT)  |  members (JSONB)                                        |
------------+---------------------------------------------------------|
     1      | [{ id: 23, role: "admin" }, { id: 24, role: "default" }]|
     2      | [{ id: 23, role: "user" }]
Run Code Online (Sandbox Code Playgroud)

表2)用户:

  ID (INT)  | name TEXT | email TEXT    |
------------+-----------+---------------|
     23     | Max       | max@gmail.com |
     24     | Joe       | joe@gmail.com |
Run Code Online (Sandbox Code Playgroud)

现在我想得到这样的结果(我只有组织的 ID [1]):

  ID (INT)  |  members (JSONB)                                       |
------------+--------------------------------------------------------|
     1      | [{ id: 23, name: "Max", email: "max@gmail.com", role: …
Run Code Online (Sandbox Code Playgroud)

sql arrays postgresql json lateral-join

5
推荐指数
1
解决办法
6118
查看次数

用于从与 Timescaledb N id 对应的表中查找时间戳的最新或最大值的 SQL 查询

我在 timescale db 中有一个表 tab1,它有 3 列标签、时间、值。time 和 tag 组成了表的 pk:(time, tag)。

行数超过 500 万行。我需要找到 N 个标签中每个标签的最新时间戳或最大(时间)。

我尝试过的事情很少,我将与大家分享我的经验:

  1. 内部查询
SELECT "time", "tag", "value"
FROM tab1 
WHERE ("tag","time") IN 
(SELECT "tag", MAX("time") FROM tab1 WHERE "tag" IN(tag1,tag2) GROUP BY "tag" );
Run Code Online (Sandbox Code Playgroud)

这是给出结果,但需要大约 19 秒来执行,这超出了可接受的限制

  1. 使用时间刻度数据库中的最后一个函数
SELECT tag, last(time, time), last(value,time)
FROM tab1
WHERE "tag" IN (tag1,tag2) GROUP BY "tag" ;
Run Code Online (Sandbox Code Playgroud)

这会在 10 秒内给出输出。

我需要找到另一种类似于第二个解决方案的可行解决方案,该解决方案可能性能更好。我尝试了一些其他的东西,如 LATERAL JOIN (3)、WINDOW FUNCTIONS (ROW_NUMBER, PARTITION) (4),但解决方案并不符合预期。

  1. 使用横向给出了多列的交叉,而不是具有预期最大时间的单个值。此外,执行需要 15 秒,但这可能是由于错误的查询。
SELECT table1."tag", table1."time",table1."value" from tab1 as table1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql time-series lateral-join timescaledb

5
推荐指数
1
解决办法
532
查看次数

“t(sites)”对于 presto 查询意味着什么?

以下是 aws 网站的片段:

WITH dataset AS (
  SELECT ARRAY[
    CAST(
      ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ),
    CAST(
      ROW('news.cnn.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ),
    CAST(
      ROW('netflix.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    )
  ] as items
)
SELECT sites.hostname, sites.flaggedActivity.isNew
FROM dataset, UNNEST(items) t(sites)
WHERE sites.flaggedActivity.isNew = true;
Run Code Online (Sandbox Code Playgroud)

它有效!但什么t(sites)意思呢?当我尝试使用真实表而不是dataset我收到错误时Table 'site' not found

它看起来很奇怪 - 就像用关键字调用的函数一样UNNEST。有人能解释一下这是什么吗?

arrays amazon-web-services presto amazon-athena lateral-join

4
推荐指数
1
解决办法
1093
查看次数