首页 > 解决方案 > 使用 Redshift 或 DBT 中的 pg_table_def 数据创建表

问题描述

pg_table_def为了从对我的用户可见的所有数据创建一个表,我尝试了:

create table adhoc_schema.pg_table_dump as ( 
  select *
  from pg_table_def
);

但它会引发错误:

列“schemaname”具有不受支持的类型“name”

pg_table_def有什么方法可以从or创建表information_schema.columns

标签: amazon-web-servicesamazon-redshiftdbt

解决方案


从另一个线程中找到了这个,这似乎会有所帮助。

Amazon 会考虑 INFORMATION_SCHEMA.COLUMNS 使用的内部函数仅使用 Leader-Node 函数。亚马逊并没有明智地重新定义标准化的 INFORMATION_SCHEMA.COLUMNS,而是试图定义自己的专有版本。为此,他们提供了另一个功能 PG_TABLE_DEF 似乎可以满足相同的需求。请注意中心关于将架构添加到 search_path 的注释。

存储有关表列的信息。

PG_TABLE_DEF 仅返回有关用户可见的表的信息。如果 PG_TABLE_DEF 未返回预期结果,请验证 search_path 参数是否设置正确以包含相关模式。

您可以使用 SVV_TABLE_INFO 查看有关表的更全面的信息,包括数据分布偏斜、键分布偏斜、表大小和统计信息。

因此,使用您的示例代码(为了清楚起见,重写为使用 NOT EXISTS),

SET SEARCH_PATH to '$user', 'public', 'target_schema';

SELECT "column" 
FROM dev.fields f
WHERE NOT EXISTS (
  SELECT 1
  FROM PG_TABLE_DEF pgtd
  WHERE pgtd.column = f.field
  AND schemaname = 'target_schema'
);

也可以看看,

关于查询 Redshift 系统表的官方文档:https ://docs.aws.amazon.com/redshift/latest/dg/t_querying_redshift_system_tables.html


推荐阅读