查询 Amazon Glue Data Catalog - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查询 Amazon Glue Data Catalog

由于许多 Amazon Web Services 都将 Amazon Glue Data Catalog 用作其中央元数据存储库,因此您可能需要查询 Data Catalog 元数据。为此,您可以在 Athena 中使用 SQL 查询。您可以使用 Athena 查询 Amazon Glue 目录元数据,如数据库、表、分区和列等。

要获取 Amazon Glue Catalog 元数据,请查询 Athena 后端上的 information_schema 数据库。本主题中的示例查询显示如何使用 Athena 查询 Amazon Glue Catalog 元数据以搜索常用案例。

注意事项和限制

  • 您可以不查询 information_schema 数据库,而是使用单独的 Apache Hive DDL 命令从 Athena 中提取特定数据库、表、视图、分区和列的元数据信息。但输出将为非表格格式。

  • 如果您的 Amazon Glue 元数据较少或中等,则查询 information_schema 的性能会最佳。如果您有大量的元数据,则可能会出现错误。

  • 不能使用 CREATE VIEWinformation_schema 数据库上创建视图。

列出数据库并搜索指定的数据库

本节中的示例演示如何按模式名称列出元数据中的数据库。

例 – 列出数据库

以下示例查询列出 information_schema.schemata 表中的数据库。

SELECT schema_name FROM information_schema.schemata LIMIT 10;

下表显示了示例结果。

6 alb-databas1
7 alb_original_cust
8 alblogsdatabase
9 athena_db_test
10 athena_ddl_db
例 – 搜索指定的数据库

在以下示例查询中,rdspostgresql 是示例数据库。

SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'rdspostgresql'

下表显示了示例结果。

schema_name
1 rdspostgresql

列出指定数据库中的表并按名称搜索表

要列出表的元数据,您可以按表架构或表名进行查询。

例 – 按架构列出表

以下查询列出了使用 rdspostgresql 表架构的表。

SELECT table_schema, table_name, table_type FROM information_schema.tables WHERE table_schema = 'rdspostgresql'

下图显示了一个示例结果。

table_schema table_name table_type
1 rdspostgresql rdspostgresqldb1_public_account BASE TABLE
例 – 按名称搜索表

以下查询获取表 athena1 的元数据信息。

SELECT table_schema, table_name, table_type FROM information_schema.tables WHERE table_name = 'athena1'

下图显示了一个示例结果。

table_schema table_name table_type
1 默认值 athena1 BASE TABLE

列出特定表的分区

您可以使用 SHOW PARTITIONS table_name 以列出指定表的分区,如以下示例所示。

SHOW PARTITIONS cloudtrail_logs_test2

您还可以使用 $partitions 元数据查询列出特定表的分区号和分区值。

例 – 使用 $partitions 语法查询表的分区

以下示例查询使用 $partitions 语法列出了表 cloudtrail_logs_test2 的分区。

SELECT * FROM default."cloudtrail_logs_test2$partitions" ORDER BY partition_number

下表显示了示例结果。

table_catalog table_schema table_name
1 awsdatacatalog default cloudtrail_logs_test2 2020 08 10
2 awsdatacatalog default cloudtrail_logs_test2 2020 08 11
3 awsdatacatalog default cloudtrail_logs_test2 2020 08 12

列出所有表的所有列

您可以列出 AwsDataCatalog 中所有表的所有列,或者 AwsDataCatalog 中特定数据库中所有表的所有列。

  • 要列出 AwsDataCatalog 中所有数据库的所有列,请使用查询 SELECT * FROM information_schema.columns

  • 要将结果限制在特定数据库中,请使用 WHERE 子句中的 table_schema='database_name'

例 — 列出特定数据库中所有表的所有列

以下示例查询列出了数据库 webdata 中所有表的所有列。

SELECT * FROM information_schema.columns WHERE table_schema = 'webdata'

列出特定的表的共同列

可以列出数据库中的特定的表的共同列。

  • 使用语法 SELECT column_name FROM information_schema.columns

  • 对于 WHERE 子句,请使用语法 WHERE table_name IN ('table1', 'table2')

例 – 列出同一个数据库中的两个表的共同列

如下示例查询列出了表 table1 和表 table2 的共同列。

SELECT column_name FROM information_schema.columns WHERE table_name IN ('table1', 'table2') GROUP BY column_name HAVING COUNT(*) > 1;

列出或搜索指定表或视图的列

您可以列出表的所有列、视图的所有列,或者在指定的数据库和表中按名称搜索列。

要列出列,请使用 SELECT * 查询。在 FROM 子句中,指定 information_schema.columns。在 WHERE 子句中,使用 table_schema='database_name' 以指定数据库,使用 table_name = 'table_name' 指定包含要列出的列的表或视图。

例 – 列出指定表的所有列

以下示例查询列出了 rdspostgresqldb1_public_account 表的所有列。

SELECT * FROM information_schema.columns WHERE table_schema = 'rdspostgresql' AND table_name = 'rdspostgresqldb1_public_account'

下表显示了示例结果。

table_catalog table_schema table_name column_name ordinal_position column_default is_nullable data_type comment extra_info
1 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account 密码 1 varchar
2 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account user_id 2 integer
3 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account created_on 3 timestamp
4 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account last_login 4 timestamp
5 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account 电子邮件 5 varchar
6 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account username 6 varchar
例 – 列出指定视图的列

以下示例查询列出了 default 数据库中用于 arrayview 视图的所有列。

SELECT * FROM information_schema.columns WHERE table_schema = 'default' AND table_name = 'arrayview'

下表显示了示例结果。

table_catalog table_schema table_name column_name ordinal_position column_default is_nullable data_type comment extra_info
1 awsdatacatalog default arrayview searchdate 1 varchar
2 awsdatacatalog default arrayview sid 2 varchar
3 awsdatacatalog default arrayview btid 3 varchar
4 awsdatacatalog default arrayview p 4 varchar
5 awsdatacatalog default arrayview infantprice 5 varchar
6 awsdatacatalog default arrayview sump 6 varchar
7 awsdatacatalog default arrayview journeymaparray 7 array(varchar)
例 – 在指定数据库和表中按名称搜索列

以下示例查询在 default 数据库的 arrayview 视图中搜索 sid 列的元数据。

SELECT * FROM information_schema.columns WHERE table_schema = 'default' AND table_name = 'arrayview' AND column_name='sid'

下图显示了一个示例结果。

table_catalog table_schema table_name column_name ordinal_position column_default is_nullable data_type comment extra_info
1 awsdatacatalog default arrayview sid 2 varchar