有没有办法通过红移来描述 external/spectrum table?

Is there a way to describe an external/spectrum table via redshift?

在 AWS Athena 中你可以写

SHOW CREATE TABLE my_table_name;

并查看描述如何构建 table 架构的类似 SQL 的查询。 它适用于架构在 AWS Glue 中定义的 table。 这对于在常规 RDBMS 中创建 table 非常有用,用于加载和探索数据视图.

以这种方式与 Athena 交互是手动的,我想自动创建与 Redshift Spectrum 具有相同架构的常规 RDBMS tables 的过程。

如何通过 运行 通过 psql 的查询来完成此操作?或者还有其他方法可以通过 aws-cli?

Redshift Spectrum 支持 SHOW CREATE TABLE 语法,但系统 table 可以提供相同的信息。我不得不说,它不如 Athena 返回的 ready to use sql 有用。

table 是

使用该数据,您可以重建 table 的 DDL。

例如,要获取 CREATE TABLE 格式的列列表及其类型,可以这样做:

select distinct
       listagg(columnname || ' ' || external_type, ',\n') 
             within group ( order by columnnum ) over ()
from svv_external_columns
where tablename = '<YOUR_TABLE_NAME>'
and schemaname = '<YOUR_SCHEM_NAME>'

查询为您提供类似于以下内容的输出:

col1 int, 
col2 string,
...

*) 我正在使用 listagg window 函数而不是聚合函数,显然 listagg 聚合函数 只能与用户定义的 tables。无赖。

我过去一直在做类似于@botchniaque 的回答,但最近在 AWS 实验室的 amazon-redshift-utils 代码包中偶然发现了一个解决方案,似乎比我的手工查询更可靠:

amazon-redshift-utils: v_generate_external_tbl_ddl

如果您无法创建由该包中列出的 ddl 支持的视图,您可以通过从查询开头删除 CREATE 语句来手动 运行 它.假设您可以将其创建为视图,用法为:

SELECT ddl
FROM admin.v_generate_external_tbl_ddl
WHERE schemaname = '<external_schema_name>'
    -- Optionally include specific table references:
    --     AND tablename IN ('<table_name_1>', '<table_name_2>', ..., '<table_name_n>')
ORDER BY tablename, seq
;