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"