红移。将逗号分隔的值转换为行

2023-11-30

我想知道如何将逗号分隔的值转换为 Redshift 中的行。我担心我自己的解决方案不是最佳的。请指教。我有一个表,其中一列具有逗号分隔的值。例如:

I have:

user_id|user_name|user_action
-----------------------------
1      | Shone   | start,stop,cancell...

我想看看

user_id|user_name|parsed_action 
------------------------------- 
1      | Shone   | start        
1      | Shone   | stop         
1      | Shone   | cancell      
....

对现有答案的一个轻微改进是使用第二个“数字”表,该表枚举所有可能的列表长度,然后使用cross join使查询更加紧凑。

据我所知,Redshift 没有一种简单的方法来创建数字表,但我们可以使用一些技巧https://www.periscope.io/blog/generate-series-in-redshift-and-mysql.html使用行号创建一个。

具体来说,如果我们假设行数cmd_logs大于逗号的最大数量user_action列,我们可以通过计算行数来创建一个数字表。首先,我们假设最多有 99 个逗号user_action column:

select 
  (row_number() over (order by true))::int as n
into numbers
from cmd_logs
limit 100;

如果我们想变得更有趣,我们可以计算出逗号的数量cmd_logs表以创建更精确的行集numbers:

select
  n::int
into numbers
from
  (select 
      row_number() over (order by true) as n
   from cmd_logs)
cross join
  (select 
      max(regexp_count(user_action, '[,]')) as max_num 
   from cmd_logs)
where
  n <= max_num + 1;

一旦有一个numbers表,我们可以这样做:

select
  user_id, 
  user_name, 
  split_part(user_action,',',n) as parsed_action 
from
  cmd_logs
cross join
  numbers
where
  split_part(user_action,',',n) is not null
  and split_part(user_action,',',n) != '';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

红移。将逗号分隔的值转换为行 的相关文章

随机推荐

  • Javascript 多个键具有相同的值 - 它们是否指向同一个地方?

    我有以下简化代码 var obj key1 aliases alias1 alias2 prop1 someVal prop2 someOtherVal var objHashMap for var key in obj objHashMa
  • 在 2D 列表中查找值的 Pythonic 方法? [复制]

    这个问题在这里已经有答案了 使用 numpy 数组 您可以使用切片检查特定列 即array 0 对于列表 检查 2D 元素是否在内部非常简单 one two in some list 然而 只是看看是否 one 存在需要迭代元素 即 one
  • pandas 基于独特的价值观和标准

    我有这个数据框 df in pd DataFrame id 123 123 123 123 123 456 ven group a a a b f f date 1 1 21 2 1 21 3 1 21 1 1 21 1 1 21 1 1
  • 输入数组而不知道其大小

    有没有一种方法可以在 Java 中创建一个数组 而无需先定义或询问其长度 又名用户输入一些数字作为参数 程序创建一个包含这么多参数的数组 有没有一种方法可以在java中创建一个数组 而无需先定义或询问它的长度 又名用户输入一些数字作为参数
  • 如何编写降序排序键函数?

    最近版本的 Python 中传递一个key功能为sort 从上一个cmp函数使我对某些对象执行复杂的排序变得更加困难 例如 我想使用一组字符串决胜字段对一组对象从最新到最旧进行排序 所以我希望日期按相反顺序排列 但字符串按自然顺序排列 使用
  • 如何在 symfony 4 中公开 LoggerInterface 服务

    我希望有Psr Log LoggerInterface在 symfony 中 public 以便能够直接从容器中获取它 container gt get Psr Log LoggerInterface 我尝试了以下方法services ya
  • 使用 SSLEngine (JSSE) 与旧客户端进行 SSL 握手

    这是 的后续问题 使用自签名证书和 SSLEngine JSSE 进行 SSL 握手 我已经实现了一个 NIO Web 服务器 可以在同一端口上处理 SSL 和非 SSL 消息 为了区分 SSL 和非 SSL 消息 我检查入站请求的第一个字
  • 如何使用InputStream从ZIP读取文件?

    我必须使用 SFTP 从 ZIP 存档 只有一个文件 我知道它的名称 获取文件内容 我唯一拥有的是 ZIPInputStream 大多数示例显示如何使用此语句获取内容 ZipFile zipFile new ZipFile location
  • 使用委托将数据传递回先前的 VC 并更新自定义单元

    我正在尝试传递数据BACK到上一个viewController使用代表 有谁知道如何从ViewController B to ViewController A 所以我想传递数据SecondVC to FirstVC并使用来自的数据更新自定义
  • 为什么我的 @Autowired 对象为空?

    我有以下 JSF 托管 bean package com example import java io Serializable import javax faces bean ManagedBean import org springfr
  • 如何在iPhone应用程序中显示不同的自定义阿拉伯字体?

    在我的应用程序中 我需要使用不同的自定义字体显示阿拉伯语文本 我按照场景添加ttf文件到info plist 根据上面的场景 我成功获得了不同字体样式的显示文本ENGLISH纯文本 我正在做同样的事情arabic字体样式 但在这里我没有得到
  • 关于值类型装箱的混乱

    在下面的代码中 int i 5 object o 5 Console WriteLine o prints 5 我有三个问题 1 获得了哪些附加 有用的功能5驻留在变量中o那5由变量表示i不具有 2 如果某些代码需要值类型 那么我们可以将
  • 我的 CSS 不会链接到我的 HTML 文件

    我正在尝试在 Sublime Text Editor 2 中构建一个简单的网站 但是 我的 CSS 文件不会链接到我的 HTML 文件 因此不会打印纯文本 我的 HTML 代码是
  • Angularjs - 控制器继承与范围继承

    下面是使用范围继承的代码
  • 立即执行时出现无效字符错误

    BEGIN exception when others then sqltext2 insert into ERROR TABLE SHREE select str from dual EXECUTE IMMEDIATE sqltext2
  • 如何在 WPF MVVM 中将组合框与外键绑定

    我知道关于数据绑定组合框有很多问题 也有很多教程 但我觉得这些教程很难 所以 我问这个问题 假设我的数据库中有两个表 Customer CustomerID Name GenderID 性别类型 GenderTypeID GenderTyp
  • 跨浏览器脚本使我的网站成为主页[重复]

    这个问题在这里已经有答案了 我有一个网站 我想要求用户将我的网站设为主页 如果他们单击 是 我想运行一个脚本 使我的网站成为用户浏览器的主页 有一个类似的主题在这里和一个解决方案here 但是 我的后一个链接中提供的解决方案仅适用于 IE
  • 用于密码验证的正则表达式

    我目前使用这个正则表达式来检查字符串是否符合一些条件 条件是 字符串长度必须介于 8 到 15 个字符之间 字符串必须至少包含一个数字 字符串必须至少包含一个大写字母 字符串必须至少包含一个小写字母 0 9 a zA Z a zA Z0 9
  • 使用 Paramiko 设置 SSH 隧道来访问 PostgreSQL

    我目前使用 Paramiko 访问 SFTP 服务器并连接到同一服务器上的 PostgreSQL 我发现很多例子使用sshtunnel登录 PostgreSQL 但我不知道如何用纯Paramiko 做到这一点 目前我的代码看起来像这样 es
  • 红移。将逗号分隔的值转换为行

    我想知道如何将逗号分隔的值转换为 Redshift 中的行 我担心我自己的解决方案不是最佳的 请指教 我有一个表 其中一列具有逗号分隔的值 例如 I have user id user name user action 1 Shone st