如何解决regexp_like 中的嵌套选择语句无法正确解析
我对 AWS 和 Athena 非常陌生。我正在使用 Athena 通过胶水爬虫从 S3 查询数据文件 (CSV) 以创建目录,然后查询该信息。我有由胶水创建的目录表,其中包含 fName、sName、mName 信息。我正在尝试使用单个查询从所有行和列中搜索正则表达式模式。
我创建了第二个表,其中包含主表的列名,即 fName、sName、mName。
我想遍历第二个表行 -> 使用我的 regexp_like 函数中的每个值来搜索以“B”开头的任何名称 例如
where regexp_like(fname,'^B')
where regexp_like(sname,'^B')
where regexp_like(mname,'^B')
并显示所有这些。
这可能吗?即使硬编码搜索条件,我也无法使第一个查询正常工作 例如
select * from primary_table
where regexp_like((Select column from secondary_table where column_name='fname'),'^B')
above sql -> Select column from secondary_table where column_name='fname' 解析为 fname 作为字符串,而不是主表中的 fname 列。
解决方法
通常不建议将列名和表名存储为数据。为了使用这些信息,您需要使用动态 SQL——即将查询构造为字符串并执行。
你可以使用很多逻辑来得到类似的东西。但是您必须明确检查每一列:
select p.*
from primary p join
secondary s
on s.column_name = 'fname' and regexp_like(p.fname,'^B') or
s.column_name = 'sname' and regexp_like(p.sname,'^B') or
s.column_name = 'mname' and regexp_like(p.mname,'^B') ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。