标签: unnest

在不创建临时表的情况下加入数组 unnest 的输出

我在 UDF 中有一个查询(如下所示),它unnest()是一个整数数组并对其进行连接,我在 pgplsql UDF 中创建了一个本地临时表,因为我知道这有效。是否可以unnest直接在查询中使用来执行连接而不必创建临时表?

CREATE OR REPLACE FUNCTION search_posts(
    forum_id_ INTEGER,
    query_    CHARACTER VARYING,
    offset_ INTEGER DEFAULT NULL,
    limit_ INTEGER DEFAULT NULL,
    from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
    to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
    in_categories_ INTEGER[] DEFAULT '{}'
    )
RETURNS SETOF forum_posts AS $$
DECLARE
    join_string CHARACTER VARYING := ' ';
    from_where_date CHARACTER VARYING := ' ';
    to_where_date CHARACTER VARYING := ' ';
    query_string_ CHARACTER VARYING := ' ';
    offset_str_ CHARACTER VARYING …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql postgresql-9.1 unnest set-returning-functions

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

ROWS FROM()中具有多个嵌套调用的列定义

我想在select子句中使用多个数组。显而易见的一个没有用,postgresql指向ROWS FROM()...

select * from unnest(array[1,2], array[3,4]) as (a int, b int);
Run Code Online (Sandbox Code Playgroud)

错误:

UNNEST() with multiple arguments cannot have a column definition list  
LINE 1: select * from unnest(array[1,2], array[3,4]) as (a int, b in...
                                                         ^
HINT:  Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one.
Run Code Online (Sandbox Code Playgroud)

...

select * from rows from (unnest(array[1,2]), unnest(array[3,4])) as (a int, b int);
Run Code Online (Sandbox Code Playgroud)

错误:

ROWS FROM() with multiple functions cannot have a column definition list …
Run Code Online (Sandbox Code Playgroud)

sql arrays postgresql plpgsql unnest

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

UNNEST表达式引用既未分组也未聚合的列

Google Analytics(分析)BigQuery表的结构如下(旧版SQL表示法 - 仅显示相关字段):

visitId:                      INTEGER
hits:                         RECORD/REPEATED
hits.hour:                    INTEGER
Run Code Online (Sandbox Code Playgroud)

在一个这样的表上,以下查询运行良好:

SELECT
  visitId,
  MIN(h.hour) AS firstHitHour
FROM
  `my-table.ga_sessions_20161122`, UNNEST(hits) AS h
GROUP BY
  visitId
Run Code Online (Sandbox Code Playgroud)

但是使用这种替代语法:

SELECT
  visitId,
  (SELECT MIN(hour) FROM UNNEST(hits)) as firstHitHour
FROM
  `my-table.ga_sessions_20161122`
GROUP BY
  visitId
Run Code Online (Sandbox Code Playgroud)

触发以下错误:

错误:UNNEST表达式引用既未分组也未聚合的列命中

我知道UNNEST(hits)必须以某种方式分组或聚合,但由于这个专栏是一个array (repeated),它究竟意味着什么?

如果我hits按照要求尝试"对列进行分组",如下所示:

(SELECT MIN(hour) FROM UNNEST(hits) as h GROUP BY h) as firstHitHour
Run Code Online (Sandbox Code Playgroud)

然后我收到一个Grouping by expressions of type STRUCT is not allowed错误.

如何纠正这种替代语法以产生与第一种语法相同的结果?

sql google-analytics google-bigquery unnest

4
推荐指数
2
解决办法
8990
查看次数

Hive 中 Presto UNNEST 函数的等价物是什么

Presto 具有UNNEST分解由数组组成的列的功能。Hive 有类似的吗?在此处查看UNNESTPresto 功能的文档。

arrays hive presto hiveql unnest

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

如何在 Google Bigquery 中将日期中的 GENERATE_DATE_ARRAY 拆分为单行以创建日期视图?

我正在尝试使用 Google Bigquery 中另一个表中的最小和最大日期创建日期视图。我遇到过 GENERATE_DATE_ARRAY 并能够在单个数组中创建我想要的日期。然而,将它们拆分为每行一个日期一直是困难的部分。

我尝试使用 UNNEST 来执行此操作,但是当我运行代码时,它只给出第一个结果,因此我在这里遗漏了一些内容。

这是我用来生成数组的代码,但我坚持将其拆分:

SELECT GENERATE_DATE_ARRAY( 
              MIN(CAST(journaldate AS DATE)), 
              MAX(CAST(journaldate AS DATE))
            )
          AS Period
FROM
dataset.table
Run Code Online (Sandbox Code Playgroud)

sql arrays google-bigquery unnest

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

无法取消嵌套具有不同列类型的列表数据框

我正在从 R 包中封装的 API 中提取一些道路交通数据。我正在使用列表数据框来控制多组记录的下载。

# install.packages(webTRISr)
library(webTRISr)
library(tidyverse)

sites <- c(5745, 6345)
start_date = '01112017'
end_date = '31122017'

road_reports <- data_frame(sites, start_date, end_date) %>% 
  mutate(data = purrr::pmap(list(sites, start_date, end_date), webTRISr::webtris_report, report_type = "daily"))
Run Code Online (Sandbox Code Playgroud)

当我看到unnest结果时...

road_reports %>% 
  unnest(data)
# Error: No common type for `..1$data$Site Name` <character> and `..2$data$Site Name` <double>.
Run Code Online (Sandbox Code Playgroud)

这是因为“站点名称”列在 API 的一次调用中是一个字符,但在另一次调用中是一个双精度字符。

从这个tidyr已关闭的问题(https://github.com/tidyverse/tidyr/issues/658)开始,我认为这已被视为一个错误并已在tidyrv1.0.0 中进行排序。

有解决办法吗?这个 SO 答案的解决方案给出了相同的错误。

我尝试传递一个ptype参数来unnest()强制数据类型,但出现有损转换错误,即:

ptype <- data_frame('Site Name'= character(),
                'Report …
Run Code Online (Sandbox Code Playgroud)

r unnest tidyr

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

在 Postgres 中将复合数组 UNNEST 为行和列

Postgres 11.7。

我正在尝试解压一个数组,其中每个项目都有多个元素,并且似乎无法获得正确的语法。我希望有人能指出我所缺少的东西。这是一个例子:

select
unnest(array[

                 ('Red Large Special',     1),
                 ('Blue Small',            5),
                 ('Green Medium Special', 87)

              ]) as item_list

Run Code Online (Sandbox Code Playgroud)

这就是我要的:

item_name               item_id  
Red Large Special       1
Blue Small              5
Green Medium Special   87
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

base_strings
("Red Large Special",1)
("Blue Small",5)
("Green Medium Special",87)
Run Code Online (Sandbox Code Playgroud)

我相信我需要一个列规格列表,如下所示:

select * from
unnest(array[

                 ('Red Large Special',    1),
                 ('Blue Small',        5),
                 ('Green Medium Special', 87)

              ]) AS item_list(item_name citext, item_id int4)
Run Code Online (Sandbox Code Playgroud)

我得到的是:

ERROR:  function return row and query-specified return row do not match
DETAIL:  Returned type …
Run Code Online (Sandbox Code Playgroud)

postgresql unnest

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

将值拆分为多行

以下是我在数据库中的两个表mavenmovies

测试位置(表 1

CREATE TABLE mavenmovies.testLocation (
    id INT AUTO_INCREMENT PRIMARY KEY,
    State varchar(255),
    name varchar(255)
);
INSERT INTO testLocation (State, name)
VALUES 
('Alabama','Birmingham;Huntsville;Mobile;Montgomery'),
('Florida','Tampa;Jacksonville;Destin');
Run Code Online (Sandbox Code Playgroud)

数字(表 2

CREATE TABLE mavenmovies.numbers (
  n INT PRIMARY KEY);
INSERT INTO numbers VALUES (1),(2);
Run Code Online (Sandbox Code Playgroud)

这是我要查询的

在此处输入图片说明

这是我目前查询的内容(请参阅下面的当前查询/尝试)

在此处输入图片说明

我当前的查询/尝试

select
  testLocation.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(testLocation.name, ';', numbers.n), ';', -1) name
from
    numbers, testLocation;
Run Code Online (Sandbox Code Playgroud)

我的问题

如何扩展我的查询以处理每行未知数量的分隔值?例如,一行可能有四个、二十个或零个分隔值。

感谢大家提供的任何指导。

mysql sql csv string unnest

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

SQL presto - 交叉联接解除空值嵌套

我有不同大小的数组,我希望数组中的每个值位于单独的行中。为此,我使用了交叉连接取消嵌套。但是它正在工作,它正在删除空数组。

因此,当我这样做时,我的列 ID 包含不同的数组,其中一些为空

select *
    from table 
    cross join unnest (t.id) as t(order_id)
    where length(order_id) = 5  or order_id is NULL
 
Run Code Online (Sandbox Code Playgroud)

我只得到以下结果

ID 订单号
23deo jfr32 6582w 23deo
23deo jfr32 6582w 杰夫32
23deo jfr32 6582w 6582瓦

而且我要

ID 订单号
23deo jfr32 6582w 23deo
23deo jfr32 6582w 杰夫32
23deo jfr32 6582w 6582瓦
无效的 无效的

如果有人知道如何取消嵌套空值,我们将不胜感激。我一直在互联网上查找,我发现我们可以包含一个WITH ORDINALITY 子句,但我不知道它是如何工作的。

sql null presto unnest trino

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

SQL Unnest - 如何正确使用?

假设我的表中有一些数据,t。

id, arr
--, ---
1,  [1,2,3]
2,  [4,5,6]
Run Code Online (Sandbox Code Playgroud)

SQL

SELECT AVG(n) FROM UNNEST(
    SELECT arr FROM t AS n) AS avg_arr 
Run Code Online (Sandbox Code Playgroud)

这会返回错误,'Mismatched input 'SELECT'. Expecting <expression>。取消数组嵌套并聚合未嵌套值的正确方法是什么?

sql presto unnest

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