背景:我有一个独特的设置,包含多个表,每个表大约有 1,600 列,我正在尝试清理这些表(这会为上游带来好处)。我知道这些列中大约 80% 始终是
[NULL]
,但我需要准确地知道哪些列(数百万行)。
我可以做以下1,600次,但看起来效率很低:
select
max(column1) as 'column1',
max(column2) as 'column2'
from mytable;
如果有区别的话,那就是 Redshift(但我无权访问 AWS)。
到目前为止,我已经尝试了上述方法作为概念证明,但它的扩展性不佳。因此,我唯一的其他选择是使用横向粘贴将标题复制并粘贴到 Excel 中,然后根据数字编写一个连接。
我感谢您提供的任何帮助 - 我会接受我的命运:-)
如果您想生成像您这样的查询:
SELECT MAX(column1) AS column1, MAX(column2) AS column2, ... FROM mytable;
试试这个:
SELECT 'SELECT ' ||
LISTAGG('MAX(' || column_name || ') AS ' || column_name, ', ')
WITHIN GROUP (ORDER BY ordinal_position) ||
' FROM your_schema.mytable;' AS generated_query
FROM information_schema.columns
WHERE table_schema = 'your_schema'
AND table_name = 'mytable';