Interrogation du AWS Glue Data Catalog - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation du AWS Glue Data Catalog

Étant donné que le AWS Glue Data Catalog est utilisé par de nombreux Services AWS comme référentiel central de métadonnées, vous voulez peut-être interroger les métadonnées du catalogue de données. Pour ce faire, vous pouvez utiliser des requêtes SQL dans Athena. Vous pouvez utiliser Athena pour interroger des métadonnées du catalogue AWS Glue telles que des bases de données, des tables, des partitions et des colonnes.

Pour obtenir les métadonnées du catalogue AWS Glue, vous interrogez la base de données information_schema sur le backend Athena. Les exemples de requête de cette rubrique montrent comment utiliser Athena pour interroger les métadonnées du catalogue AWS Glue pour les cas d'utilisation courants.

Considérations et restrictions

  • Au lieu de faire d’interroger la base de données information_schema, il est possible d'utiliser des commandes DDL Apache Hive individuelles pour extraire des informations sur les métadonnées pour des bases de données, des tables, des vues, des partitions et des colonnes spécifiques à partir d'Athena. Toutefois, le résultat est dans un format non tabulaire.

  • Les requêtes à information_schema sont plus performantes si vous avez une quantité faible à modérée de métadonnées AWS Glue. Si vous disposez d'un grand nombre de métadonnées, des erreurs peuvent se produire.

  • Vous ne pouvez pas utiliser CREATE VIEW pour créer une vue sur la base de données information_schema.

Liste des bases de données et recherche dans une base de données spécifiée

Les exemples de cette section montrent comment répertorier les bases de données dans les métadonnées par nom de schéma.

Exemple – Liste des bases de données

L'exemple de requête suivant répertorie les bases de données de la table information_schema.schemata.

SELECT schema_name FROM information_schema.schemata LIMIT 10;

Le tableau suivant présente des exemples de résultats.

6 alb-databas1
7 alb_original_cust
8 alblogsdatabase
9 athena_db_test
10 athena_ddl_db
Exemple – Recherche dans une base de données spécifiée

Dans l'exemple de requête suivant, rdspostgresql est un exemple de base de données.

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

Le tableau suivant présente des exemples de résultats.

nom_schéma
1 rdspostgresql

Liste des tables dans une base de données spécifiée et recherche d'une table par nom

Pour répertorier les métadonnées des tables, vous pouvez effectuer une interrogation par schéma de table ou par nom de table.

Exemple – Liste des tables par schéma

La requête suivante répertorie les tables qui utilisent le schéma de table rdspostgresql.

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

Le tableau suivant montre un exemple de résultat.

table_schema table_name table_type
1 rdspostgresql rdspostgresqldb1_public_account BASE TABLE
Exemple – Recherche d'une table par nom

La requête suivante obtient des informations de métadonnées pour la table athena1.

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

Le tableau suivant montre un exemple de résultat.

table_schema table_name table_type
1 default athena1 BASE TABLE

Liste des partitions d'une table spécifique

Vous pouvez utiliser SHOW PARTITIONS table_name pour répertorier les partitions d'une table spécifiée, comme dans l'exemple suivant.

SHOW PARTITIONS cloudtrail_logs_test2

Vous pouvez également utiliser une requête de métadonnées $partitions pour répertorier les numéros de partition et les valeurs de partition d'une table spécifique.

Exemple – Interrogation des partitions d'une table à l'aide de la syntaxe $partitions

L'exemple de requête suivant répertorie les partitions pour la table cloudtrail_logs_test2 en utilisant la syntaxe $partitions.

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

Le tableau suivant présente des exemples de résultats.

table_catalog table_schema table_name Année Mois jour
1 awsdatacatalog par défaut cloudtrail_logs_test2 2020 08 10
2 awsdatacatalog par défaut cloudtrail_logs_test2 2020 08 11
3 awsdatacatalog par défaut cloudtrail_logs_test2 2020 08 12

Liste de toutes les colonnes pour toutes les tables

Vous pouvez répertorier toutes les colonnes de toutes les tables dans AwsDataCatalog ou pour toutes les tables d’une base de données spécifique dans AwsDataCatalog.

  • Pour répertorier toutes les colonnes de toutes les bases de données dans AwsDataCatalog, utilisez la requête SELECT * FROM information_schema.columns.

  • Pour limiter les résultats à une base de données spécifique, utilisez table_schema='database_name' dans la clause WHERE.

Exemple – Liste de toutes les tables d’une base de données spécifique

L’exemple de requête suivant répertorie toutes les colonnes pour toutes les tables dans la base de données webdata.

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

Affichage des colonnes communes à des tables spécifiques

Vous pouvez afficher les colonnes que des tables spécifiques d’une base de données ont en commun.

  • Utilisez la syntaxe SELECT column_name FROM information_schema.columns.

  • Pour la clause WHERE, utilisez la syntaxe WHERE table_name IN ('table1', 'table2').

Exemple – Affichage des colonnes communes à deux tables de la même base de données

L'exemple de requête suivant affiche les colonnes que les tables table1 et table2 ont en commun.

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

Liste ou recherche de colonnes pour une table ou une vue spécifiée

Vous pouvez répertorier toutes les colonnes d'une table, toutes les colonnes d'une vue ou rechercher une colonne par nom dans une base de données et une table spécifiées.

Pour répertorier les colonnes, utilisez une requête SELECT *. Dans la clause FROM, spécifiez information_schema.columns. Dans la clause WHERE, utilisez table_schema='database_name' pour spécifier la base de données et table_name = 'table_name' pour spécifier la table ou la vue qui a les colonnes que vous voulez répertorier.

Exemple – Liste de toutes les colonnes d'une table spécifiée

L'exemple de requête suivant répertorie toutes les colonnes de la table rdspostgresqldb1_public_account.

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

Le tableau suivant présente des exemples de résultats.

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 password 1 OUI varchar
2 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account user_id 2 OUI entier
3 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account created_on 3 OUI timestamp
4 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account last_login 4 OUI timestamp
5 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account Amazon EC2 5 OUI varchar
6 awsdatacatalog rdspostgresql rdspostgresqldb1_public_account username 6 OUI varchar
Exemple – Liste des colonnes d'une vue spécifiée

L'exemple de requête suivant répertorie toutes les colonnes de la base de données default de la vue arrayview.

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

Le tableau suivant présente des exemples de résultats.

table_catalog table_schema table_name column_name ordinal_position column_default is_nullable data_type comment extra_info
1 awsdatacatalog par défaut arrayview searchdate 1 OUI varchar
2 awsdatacatalog par défaut arrayview sid 2 OUI varchar
3 awsdatacatalog par défaut arrayview btid 3 OUI varchar
4 awsdatacatalog par défaut arrayview p 4 OUI varchar
5 awsdatacatalog par défaut arrayview infantprice 5 OUI varchar
6 awsdatacatalog par défaut arrayview sump 6 OUI varchar
7 awsdatacatalog par défaut arrayview journeymaparray 7 OUI array(varchar)
Exemple – Recherche d'une colonne par nom dans une base de données et une table spécifiées

L'exemple de requête suivant recherche les métadonnées de la colonne sid dans la vue arrayview de la base de données default.

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

Le tableau suivant montre un exemple de résultat.

table_catalog table_schema table_name column_name ordinal_position column_default is_nullable data_type comment extra_info
1 awsdatacatalog par défaut arrayview sid 2 OUI varchar