如何提取Redshift嵌套表struct列内数组的首个提交邮箱?
解决GitHub数据提取首个提交邮箱的问题
错误原因
你之前的查询报错是因为直接尝试访问数组commits的嵌套author字段,Hive/Spark SQL不允许这种直接访问方式。commits是数组类型,必须先指定数组元素的索引,或者用数组处理函数来访问内部结构。
正确查询语句
如果只需要提取首个提交的邮箱,直接通过数组索引[0]访问第一个元素即可:
SELECT payload.action, payload.commits[0].author.email AS first_commit_email FROM ghdata g
兼容空数组的健壮写法
如果存在commits数组为空的情况,可以添加判断避免报错:
SELECT payload.action, CASE WHEN size(payload.commits) > 0 THEN payload.commits[0].author.email ELSE NULL END AS first_commit_email FROM ghdata g
补充:若需提取所有提交的邮箱
如果后续需要提取所有提交的邮箱,才需要用LATERAL VIEW explode展开数组:
SELECT payload.action, c.author.email FROM ghdata g LATERAL VIEW explode(payload.commits) exploded_commits AS c
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

