有没有办法通过红移来描述 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 是
svv_external_schemas
- 为您提供有关胶水数据库映射和绑定到它的 IAM 角色的信息
svv_external_tables
- 为您提供位置信息,以及使用的数据格式和 serdes
svv_external_columns
- 为您提供列名、类型和顺序信息。
使用该数据,您可以重建 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
;
在 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 是
svv_external_schemas
- 为您提供有关胶水数据库映射和绑定到它的 IAM 角色的信息svv_external_tables
- 为您提供位置信息,以及使用的数据格式和 serdessvv_external_columns
- 为您提供列名、类型和顺序信息。
使用该数据,您可以重建 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
;