SQL 每个事件生成新行的函数?

SQL function to generate new row per event?

我在这里寻找答案无济于事;想知道这个问题是否最适合 SQL 环境之外,但我想我会看看如何解决它。

我正在尝试查看网络旅程,因此需要我的数据采用以下格式:

ID      DATE       EVENT
1       01/01/20   "Landing Page"
1       01/01/20   "purchase page"
2...etc

目前数据格式如下:

ID       DATE       EVENT
1        01/01/20   "Landing page","purchase page"
2... etc

我基本上想用逗号分隔事件字段,并为每个逗号分隔的事件创建一个新行,并复制所有其他字段。我的 SQL 不是很好,已经尝试了很多临时表、联合和 split_parts 来突破这个领域取得了一些成功,但无法将它放到自己的行中。

Vertica 为此提供 tokenizer function StringTokenizerDelim 作为文本搜索包的一部分:

select id, date, words as event
from (
    select id, date, StringTokenizerDelim(event, ',') over (partition by id)
    from mytable
) t

确实按照@GMB 的建议工作。

只是函数 StringTokenizerDelim() 不在默认搜索路径中。

您必须使用它所在的 v_txtindex 架构明确限定它:

WITH
-- your input
indata(id,dt,ev) AS (
          SELECT 1, DATE '2020-01-01','landing page,purchase page'
UNION ALL SELECT 2, DATE '2020-01-02','landingpage,browse-article page,purchase page'
)
,
tokens AS (
  SELECT
    id
  , dt
  , v_txtindex.StringTokenizerDelim(ev,',') OVER(PARTITION BY id,dt)
  FROM indata
)
SELECT
  id
, dt
, words AS event
FROM tokens;
-- out  id |     dt     |        event        
-- out ----+------------+---------------------
-- out   1 | 2020-01-01 | landing page
-- out   1 | 2020-01-01 | purchase page
-- out   2 | 2020-01-02 | landingpage
-- out   2 | 2020-01-02 | browse-article page
-- out   2 | 2020-01-02 | purchase page