我们开始使用Amazon Redshift进行报告。我们可以通过S3将整个数据加载到Redshift上,并手动更新每日增量负载的数据。现在我们正在进行整个过程的自动化过程,因为脚本可以在特定时间运行,数据可以使用日常数据自动更新。
我们用于增量加载的方法如文档中所述
http://docs.aws.amazon.com/redshift/latest/dg/merge-create-staging-table.html
这可以手动正常但在自动化过程中,我不知道如何根据现有记录的更新来获取每个表的主键。简而言之,如何从redshift获取主键字段?是否有类似“索引”或其他术语可用于获取主键甚至是distkey?提前致谢
答案 0 :(得分:1)
我仍在研究查询的细节以轻松提取信息,但您可以使用此查询
select a.attname AS "column_name", format_type(a.atttypid, a.atttypmod) AS "column_type",
format_encoding(a.attencodingtype::integer) AS "encoding", a.attisdistkey AS "distkey",
a.attsortkeyord AS "sortkey", a.attnotnull AS "notnull", a.attnum, i.*
FROM pg_namespace n
join pg_class c on n.oid = c.relnamespace
join pg_attribute a on c.oid = a.attrelid AND a.attnum > 0 AND NOT a.attisdropped
left join pg_index i on c.oid = i.indrelid and i.indisprimary='true'
WHERE
c.relname = 'mytablename'
and n.nspname='myschemaname'
order by a.attnum
找到关于桌子的大部分有趣的事情。如果查看输出,则pg_index.indkey是主键列的空格分隔串联(因为它可能是复合键),表示为与pg_attribute.attnum列关联的列顺序号。