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=
separados por espacios.key
,Value=value
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"