Redshift SQL搜索表中所有字段的值

写一段Redshift的SQL,检查一个表格里所有的字符串字段是否有值等于keyword的单元格,如果有,输出一张表,包含Schema名、表名、字段名和值,输出结果集不包含重复数据。

sql 复制代码
WITH column_info AS (
  -- 获取表的所有字符串类型字段
  SELECT 
    ordinal_position,
    table_schema,
    table_name,
    column_name
  FROM information_schema.columns 
  WHERE table_schema = 'your_schema_name'  -- 替换为实际的schema名
    AND table_name = 'your_table_name'     -- 替换为实际的表名
    AND data_type IN ('character', 'character varying', 'text', 'varchar', 'char')
),
check_queries AS (
  -- 为每个字符串字段生成检查查询(使用LIMIT 1)
  SELECT 
    ordinal_position,
    table_schema,
    table_name,
    column_name,
    'SELECT * FROM (SELECT ''' || table_schema || ''' AS schema_name, ''' || table_name || ''' AS table_name, ''' || column_name || ''' AS column_name, ' || column_name || ' AS value FROM ' || table_schema || '.' || table_name || ' WHERE ' || column_name || ' = ''keyword'' LIMIT 1)' || CASE ordinal_position WHEN 1 THEN ';' ELSE ' UNION ALL ' END AS query_text
  FROM column_info
)
-- 所有检查查询并合并结果
SELECT 
    query_text
FROM check_queries
ORDER BY ordinal_position DESC;

主要优化点:

  1. 使用LIMIT 1替代DISTINCT:每个字段的查询一旦找到第一个匹配项就停止扫描
  2. 减少数据扫描:不需要扫描整个字段的所有值来去重
  3. 更快的响应:特别是对于大表,性能提升显著

适用场景:

  • 只需要知道哪些字段包含关键词,而不需要所有匹配记录
  • 关注查询性能,特别是大数据量表
  • 只需要一个存在的证明,而不需要统计数量

如果确实需要所有唯一值(而不是仅确认存在性),可以使用以下折中方案:

sql 复制代码
-- 对每个字段单独查询,但使用LIMIT来限制返回数量
SELECT * FROM (
SELECT 'your_schema' AS schema_name, 'your_table' AS table_name, 'column1' AS column_name, column1 AS value
FROM your_schema.your_table 
WHERE column1 = 'keyword'
LIMIT 10)  -- 限制每个字段最多返回10条记录

UNION ALL

SELECT * FROM (
SELECT 'your_schema', 'your_table', 'column2', column2
FROM your_schema.your_table 
WHERE column2 = 'keyword'
LIMIT 10
)
-- 继续添加其他字段...

这种方案在性能和结果完整性之间取得了平衡。

相关推荐
gaize121316 小时前
华为云与火山引擎云服务对比分析
服务器·云计算
一招定胜负16 小时前
机器学习算法二:逻辑回归
算法·机器学习·逻辑回归
星诺算法备案16 小时前
算法备案材料:明晰材料逻辑,构建安全合规的算法体系
人工智能·算法·推荐算法·备案
TG:@yunlaoda360 云老大16 小时前
腾讯云国际站代理商 CSS有什么优势呢?
css·云计算·腾讯云
another heaven16 小时前
【软考 cache映射】主存容量
算法
hans汉斯16 小时前
【软件工程与应用】基于大数据的应急救援云平台构建应用研究
大数据·数据库·人工智能·物联网·系统架构·云计算·汉斯出版社
ULTRA??16 小时前
判断水仙花数并输出,c++
c++·算法
Arva .16 小时前
G1收集器
java·jvm·算法
努力毕业的小土博^_^16 小时前
【生成式AI】Cross-Attention:多模态融合的神经网络桥梁(上篇)
人工智能·深度学习·神经网络·算法·机器学习·遥感
爱考证的小刘16 小时前
12月11号阿里云ACP线上考试成绩单分享
阿里云·云计算·阿里云认证·阿里云acp考试·阿里云acp报名·阿里云acp报考·阿里云aca证书