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
)
-- 继续添加其他字段...

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

相关推荐
東隅已逝,桑榆非晚44 分钟前
算法2. 双指针法-复写零
c++·笔记·学习·算法
云析赢指标公式网41 小时前
文华财经指标源码笔记:WINNER筹码函数、控盘变量与MACD变体的调试记录
java·笔记·算法
对空六课1 小时前
埋点上报太频繁拖性能,先做批量合并和时机控制
sql·工具选型·数据上报·埋点方案·sdk接入
CC数分3 小时前
统计学基础|先把问题问对:数据分析的六大类型
大数据·人工智能·算法
java_nnnn3 小时前
Spring IoC & DI 从入门到理解:控制反转、依赖注入与 Bean 管理详解
数据库·sql·spring
地平线开发者3 小时前
CLIP 的训练机制:从对比学习到图文对齐
深度学习·算法·自动驾驶
hetao17338374 小时前
2026-11-02 hetao1733837 的刷题记录
c++·算法
Geektec4 小时前
IMU 选型完全指南:从硬件参数到算法融合的系统工程视角
算法·imu·陀螺仪·加速度计·元器件选型
会议咨询4 小时前
2027年云计算、机电一体化与电子通信国际会议(CMEC 2027)
云计算·机电一体化·电子通信
CQU_JIAKE4 小时前
11.2【A】
算法