Mat*_*att 2 sql amazon-redshift aginity
运行以下查询时:
WITH sublevels AS (
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1), FIELDA AS (SELECT (ROW_NUMBER() OVER ())::INT sublevel
FROM sublevels sl1, sublevels sl2, sublevels sl3)
SELECT TOP 10
FIELDB,
sublevel, REPLACE(REGEXP_REPLACE(REGEXP_SUBSTR(UPPER(FIELDC), 'FROM \\S+', 1, sublevel), 'FROM ', ''),')','') ALIASA
FROM TABLEA
JOIN FIELDA ON sublevel <= REGEXP_COUNT(UPPER(FIELDC), 'FROM ')
WHERE ALIASA != 'ABC'
AND lower(split_part(ALIASA, '.', 2)) IN (
SELECT DISTINCT lower(t.table_name)
FROM information_schema.tables t
INNER JOIN information_schema.columns c on c.table_name = t.table_name AND c.table_schema = t.table_schema
WHERE lower(column_name) similar TO '%(aaa|bbb|ccc)%')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:0A000:Redshift 表不支持指定的类型或函数(每个 INFO 消息一个)。
我不知道为什么,如果我单独运行查询,它们工作正常:
查询1
WITH sublevels AS (
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1), FIELDA AS (SELECT (ROW_NUMBER() OVER ())::INT sublevel
FROM sublevels sl1, sublevels sl2, sublevels sl3)
SELECT TOP 10
FIELDB,
sublevel, REPLACE(REGEXP_REPLACE(REGEXP_SUBSTR(UPPER(FIELDC), 'FROM \\S+', 1, sublevel), 'FROM ', ''),')','') ALIASA
FROM TABLEA
JOIN FIELDA ON sublevel <= REGEXP_COUNT(UPPER(FIELDC), 'FROM ')
WHERE ALIASA != 'ABC'
Run Code Online (Sandbox Code Playgroud)
查询2
SELECT DISTINCT lower(t.table_name)
FROM information_schema.tables t
INNER JOIN information_schema.columns c on c.table_name = t.table_name AND c.table_schema = t.table_schema
WHERE lower(column_name) similar TO '%(aaa|bbb|ccc)%'
Run Code Online (Sandbox Code Playgroud)
我发现的“仅领导节点”错误的唯一解决方法是将选择包装在循环中,如下所示。这对性能来说很糟糕,但在处理小型模式相关表(例如 information_schema、pg_views 等中的对象)时可以接受。
create or replace procedure jupiter.tmp_proc()
as
$$
declare
row record;
begin
drop table if exists tmp_ViewDef;
create table tmp_ViewDef(schemaname varchar,viewname varchar, schema_view varchar, "DDL" varchar(max));
for row in
select
cast(schemaname as varchar) as "schemaname"
,cast(viewname as varchar) as "viewname"
,cast(schemaname as varchar) || '.' || cast(viewname as varchar) as "schema_view"
,cast(definition as varchar(max)) as "DDL"
from pg_views
loop
insert into tmp_viewdef(schemaname,viewname,schema_view,ddl) values (row.schemaname,row.viewname,row.schema_view,row.ddl);
end loop
;
end;
$$
language plpgsql
;
call jupiter.tmp_proc()
;
select top 100 * from tmp_ViewDef;
Run Code Online (Sandbox Code Playgroud)