amazon-web-services - 使用 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 会考虑 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
推荐阅读
- vba - 如何在 VBA 中从 Outlook 发件箱发送所有电子邮件
- nexus - 如何在(Sonatype)Nexus 原始存储库中设置原始文件的版本?
- jquery - 在 NetSuite 中用分号分隔数组中的每个对象
- c++ - 从 C++ 中的字符串向量创建元组
- java-8 - Java 8 - Streams - 流处理中的异常处理是强制性的吗?
- docker - 容器主机名未解析为 IP
- android - 从 Eclipse 导入后清单合并失败
- javascript - npm 启动和安装不起作用
- r - R - 在函数内对数据框进行子集化时选择了未定义的列
- php - functions.php 当前用户等于 page_title