Utilisation des AWS CLI métastores with Hive - 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.

Utilisation des AWS CLI métastores with Hive

Vous pouvez utiliser les commandes CLI aws athena pour gérer les catalogues de données de métastore Hive que vous utilisez avec Athena. Une fois que vous avez défini un ou plusieurs catalogues à utiliser avec Athena, vous pouvez les référencer dans vos commandes DDL et DML aws athena.

Utilisation du AWS CLI pour gérer les catalogues de métastores Hive

Enregistrer un catalogue : C reate-data-catalog

Pour enregistrer un catalogue de données, utilisez la commande create-data-catalog. Utilisez le paramètre name pour spécifier le nom que vous souhaitez utiliser pour le catalogue. Passage de l'ARN de la fonction Lambda à l'option metadata-function de l'argument parameters. Pour créer des identifications pour le nouveau catalogue, utilisez le paramètre tags avec une ou plusieurs paires d'arguments Key=key,Value=value séparées par des espaces.

L'exemple suivant enregistre le catalogue de métastore Hive nommé hms-catalog-1. La commande a été formatée pour être lisible.

$ aws athena create-data-catalog --name "hms-catalog-1" --type "HIVE" --description "Hive Catalog 1" --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3,sdk-version=1.0" --tags Key=MyKey,Value=MyValue --region us-east-1

Afficher les détails du catalogue : G et-data-catalog

Pour afficher les détails d'un catalogue, passez le nom du catalogue à la commande get-data-catalog, comme dans l'exemple suivant.

$ aws athena get-data-catalog --name "hms-catalog-1" --region us-east-1

L'exemple de résultat suivant est au format JSON.

{ "DataCatalog": { "Name": "hms-catalog-1", "Description": "Hive Catalog 1", "Type": "HIVE", "Parameters": { "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3", "sdk-version": "1.0" } } }

Liste des catalogues enregistrés : L ist-data-catalogs

Pour répertorier les catalogues enregistrés, utilisez la commande list-data-catalogs et spécifiez éventuellement une région, comme dans l'exemple suivant. Les catalogues répertoriés incluent toujours AWS Glue.

$ aws athena list-data-catalogs --region us-east-1

L'exemple de résultat suivant est au format JSON.

{ "DataCatalogs": [ { "CatalogName": "AwsDataCatalog", "Type": "GLUE" }, { "CatalogName": "hms-catalog-1", "Type": "HIVE", "Parameters": { "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3", "sdk-version": "1.0" } } ] }

Mettre à jour un catalogue : U pdate-data-catalog

Pour mettre à jour un catalogue de données, utilisez la commande update-data-catalog, comme dans l'exemple suivant. La commande a été formatée pour être lisible.

$ aws athena update-data-catalog --name "hms-catalog-1" --type "HIVE" --description "My New Hive Catalog Description" --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new,sdk-version=1.0" --region us-east-1

Supprimer un catalogue : D elete-data-catalog

Pour supprimer un catalogue de données, utilisez la commande delete-data-catalog, comme dans l'exemple suivant.

$ aws athena delete-data-catalog --name "hms-catalog-1" --region us-east-1

Afficher les détails de la base de données : Get-database

Pour afficher les détails d'une base de données, passez le nom du catalogue et de la base de données à la commande get-database, comme dans l'exemple suivant.

$ aws athena get-database --catalog-name hms-catalog-1 --database-name mydb

L'exemple de résultat suivant est au format JSON.

{ "Database": { "Name": "mydb", "Description": "My database", "Parameters": { "CreatedBy": "Athena", "EXTERNAL": "TRUE" } } }

Liste des bases de données dans un catalogue : List-databases

Pour répertorier les bases de données dans un catalogue, utilisez la commande list-databases et spécifiez éventuellement une région, comme dans l'exemple suivant.

$ aws athena list-databases --catalog-name AwsDataCatalog --region us-west-2

L'exemple de résultat suivant est au format JSON.

{ "DatabaseList": [ { "Name": "default" }, { "Name": "mycrawlerdatabase" }, { "Name": "mydatabase" }, { "Name": "sampledb", "Description": "Sample database", "Parameters": { "CreatedBy": "Athena", "EXTERNAL": "TRUE" } }, { "Name": "tpch100" } ] }

Affichage des détails du tableau : G et-table-metadata

Pour afficher les métadonnées d'une table, y compris les noms de colonnes et les types de données, transmettez le nom du catalogue, de la base de données et de la table à la commande get-table-metadata, comme dans l'exemple suivant.

$ aws athena get-table-metadata --catalog-name AwsDataCatalog --database-name mydb --table-name cityuseragent

L'exemple de résultat suivant est au format JSON.

{ "TableMetadata": { "Name": "cityuseragent", "CreateTime": 1586451276.0, "LastAccessTime": 0.0, "TableType": "EXTERNAL_TABLE", "Columns": [ { "Name": "city", "Type": "string" }, { "Name": "useragent1", "Type": "string" } ], "PartitionKeys": [], "Parameters": { "COLUMN_STATS_ACCURATE": "false", "EXTERNAL": "TRUE", "inputformat": "org.apache.hadoop.mapred.TextInputFormat", "last_modified_by": "hadoop", "last_modified_time": "1586454879", "location": "s3://DOC-EXAMPLE-BUCKET/", "numFiles": "1", "numRows": "-1", "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "rawDataSize": "-1", "serde.param.serialization.format": "1", "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "totalSize": "61" } } }

Affichage des métadonnées pour toutes les tables d'une base de données : L ist-table-metadata

Pour afficher les métadonnées de toutes les tables d'une base de données, transmettez le nom du catalogue et celui de la base de données à la commande list-table-metadata. La commande list-table-metadata est similaire à la commande get-table-metadata, sauf que vous ne spécifiez pas de nom de table. Pour limiter le nombre de résultats, vous pouvez utiliser l'option --max-results, comme dans l'exemple suivant.

$ aws athena list-table-metadata --catalog-name AwsDataCatalog --database-name sampledb --region us-east-1 --max-results 2

L'exemple de résultat suivant est au format JSON.

{ "TableMetadataList": [ { "Name": "cityuseragent", "CreateTime": 1586451276.0, "LastAccessTime": 0.0, "TableType": "EXTERNAL_TABLE", "Columns": [ { "Name": "city", "Type": "string" }, { "Name": "useragent1", "Type": "string" } ], "PartitionKeys": [], "Parameters": { "COLUMN_STATS_ACCURATE": "false", "EXTERNAL": "TRUE", "inputformat": "org.apache.hadoop.mapred.TextInputFormat", "last_modified_by": "hadoop", "last_modified_time": "1586454879", "location": "s3://DOC-EXAMPLE-BUCKET/", "numFiles": "1", "numRows": "-1", "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "rawDataSize": "-1", "serde.param.serialization.format": "1", "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "totalSize": "61" } }, { "Name": "clearinghouse_data", "CreateTime": 1589255544.0, "LastAccessTime": 0.0, "TableType": "EXTERNAL_TABLE", "Columns": [ { "Name": "location", "Type": "string" }, { "Name": "stock_count", "Type": "int" }, { "Name": "quantity_shipped", "Type": "int" } ], "PartitionKeys": [], "Parameters": { "EXTERNAL": "TRUE", "inputformat": "org.apache.hadoop.mapred.TextInputFormat", "location": "s3://DOC-EXAMPLE-BUCKET/", "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "serde.param.serialization.format": "1", "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "transient_lastDdlTime": "1589255544" } } ], "NextToken": "eyJsYXN0RXZhbHVhdGVkS2V5Ijp7IkhBU0hfS0VZIjp7InMiOiJ0Ljk0YWZjYjk1MjJjNTQ1YmU4Y2I5OWE5NTg0MjFjYTYzIn0sIlJBTkdFX0tFWSI6eyJzIjoiY2xlYXJpbmdob3VzZV9kYXRhIn19LCJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE1ODkzNDIwMjIsIm5hbm9zIjo2NTUwMDAwMDB9fQ==" }

Exécution d'instructions DDL et DML

Lorsque vous utilisez les instructions DDL et DML AWS CLI pour exécuter, vous pouvez transmettre le nom du catalogue de métastores Hive de deux manières :

  • Directement dans les déclarations qui le soutiennent.

  • Au paramètre --query-execution-context Catalog.

Instructions DDL

L'exemple suivant transmet le nom du catalogue directement dans le cadre de l'instruction show create table DDL. La commande a été formatée pour être lisible.

$ aws athena start-query-execution --query-string "show create table hms-catalog-1.hms_tpch_partitioned.lineitem" --result-configuration "OutputLocation=s3://DOC-EXAMPLE-BUCKET/lambda/results"

L'exemple suivant d'instruction show create table DDL utilise le paramètre Catalog de --query-execution-context pour transmettre le nom du catalogue de métastore Hive hms-catalog-1. La commande a été formatée pour être lisible.

$ aws athena start-query-execution --query-string "show create table lineitem" --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" --result-configuration "OutputLocation=s3://DOC-EXAMPLE-BUCKET/lambda/results"

Instructions DML

L'exemple suivant d'instruction select DML transmet directement le nom du catalogue dans la requête. La commande a été formatée pour être lisible.

$ aws athena start-query-execution --query-string "select * from hms-catalog-1.hms_tpch_partitioned.customer limit 100" --result-configuration "OutputLocation=s3://DOC-EXAMPLE-BUCKET/lambda/results"

L'exemple suivant d'instruction select DML utilise le paramètre Catalog de --query-execution-context pour transmettre le nom du catalogue de métastore Hive hms-catalog-1. La commande a été formatée pour être lisible.

$ aws athena start-query-execution --query-string "select * from customer limit 100" --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" --result-configuration "OutputLocation=s3://DOC-EXAMPLE-BUCKET/lambda/results"