Uso de la AWS CLI con metastores de Hive - Amazon Athena

Uso de la AWS CLI con metastores de Hive

Puede utilizar comandos de la CLI de aws athena para administrar los catálogos de datos de metaalmacén de Hive que utilice con Athena. Después de definir uno o más catálogos para utilizarlos con Athena, puede hacer referencia a esos catálogos en los comandos DDL y DML de aws athena.

Uso de la AWS CLI para administrar catálogos de almacenes de metadatos de Hive

Registro de un catálogo: create-data-catalog

Para registrar un catálogo de datos, utilice el comando create-data-catalog. Utilice el parámetro name para especificar el nombre que desea utilizar para el catálogo. Pase el ARN de la función de Lambda a la opción metadata-function del argumento parameters. Para crear etiquetas para el nuevo catálogo, utilice el parámetro tags con uno o más pares de argumentos Key=key,Value=value separados por espacios.

En el siguiente ejemplo se registra el catálogo de metaalmacén de Hive denominado hms-catalog-1. El comando se ha formateado para fines de legibilidad.

$ 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

Visualización de los detalles del catálogo: get-data-catalog

Para mostrar los detalles de un catálogo, pase el nombre del catálogo al comando get-data-catalog, como en el ejemplo siguiente.

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

El siguiente resultado de ejemplo está en formato 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" } } }

Enumeración de los catálogos registrados: list-data-catalogs

Para enumerar los catálogos registrados, utilice el comando list-data-catalogs y, opcionalmente, especifique una región, como en el ejemplo siguiente. Los catálogos enumerados siempre incluyen AWS Glue.

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

El siguiente resultado de ejemplo está en formato 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" } } ] }

Actualización de un catálogo: update-data-catalog

Para actualizar un catálogo de datos, utilice el comando update-data-catalog, como en el ejemplo siguiente. El comando se ha formateado para fines de legibilidad.

$ 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

Eliminación de un catálogo: delete-data-catalog

Para eliminar un catálogo de datos, utilice el comando delete-data-catalog, como en el ejemplo siguiente.

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

Visualización de los detalles de la base de datos: get-database

Para mostrar los detalles de una base de datos, pase el nombre del catálogo y la base de datos al comando get-database, como en el ejemplo siguiente.

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

El siguiente resultado de ejemplo está en formato JSON.

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

Enumeración de las bases de datos de un catálogo: list-databases

Para enumerar las bases de datos de un catálogo, utilice el comando list-databases y, como opción, especifique una región, como en el ejemplo siguiente.

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

El siguiente resultado de ejemplo está en formato JSON.

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

Visualización de los detalles de la tabla: get-table-metadata

Para mostrar los metadatos de una tabla, incluidos los nombres de columna y los tipos de datos, pase el nombre del catálogo, la base de datos y el nombre de tabla al comando get-table-metadata, como en el ejemplo siguiente.

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

El siguiente resultado de ejemplo está en formato 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://amzn-s3-demo-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" } } }

Visualización de los metadatos de todas las tablas de una base de datos: list-table-metadata

Para mostrar los metadatos de todas las tablas de una base de datos, pase el nombre del catálogo y el nombre de la base de datos al comando list-table-metadata. El comando list-table-metadata es similar al comando get-table-metadata, excepto que no se especifica un nombre de tabla. Para limitar el número de resultados, puede utilizar la opción --max-results, como en el ejemplo siguiente.

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

El siguiente resultado de ejemplo está en formato 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://amzn-s3-demo-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://amzn-s3-demo-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==" }

Ejecución de instrucciones DDL y DML

Cuando utiliza la AWS CLI para ejecutar instrucciones DDL y DML, puede pasar el nombre del catálogo de metaalmacén de Hive de dos maneras:

  • Directamente en las instrucciones que son compatibles.

  • Al parámetro de Catalog --query-execution-context.

Instrucciones DDL

En el ejemplo siguiente se pasa el nombre del catálogo directamente como parte de la instrucción DDL show create table. El comando se ha formateado para fines de legibilidad.

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

La instrucción DDL show create table de ejemplo siguiente utiliza el parámetro Catalog de --query-execution-context para pasar el nombre del catálogo de metaalmacén de Hive hms-catalog-1. El comando se ha formateado para fines de legibilidad.

$ 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://amzn-s3-demo-bucket/lambda/results"

instrucciones DML

La siguiente instrucción DML select de ejemplo pasa directamente el nombre del catálogo a la consulta. El comando se ha formateado para fines de legibilidad.

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

La siguiente instrucción DML select de ejemplo utiliza el parámetro Catalog de --query-execution-context para pasar en el nombre del catálogo de metaalmacén de Hive hms-catalog-1. El comando se ha formateado para fines de legibilidad.

$ 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://amzn-s3-demo-bucket/lambda/results"