Usar a AWS CLI com metastores do Hive - Amazon Athena

Usar a AWS CLI com metastores do Hive

É possível usar os comandos da CLI aws athena para gerenciar os catálogos de dados do metastore do Hive que você usa com o Athena. Depois de definir um ou mais catálogos para usar com o Athena, você poderá referenciar esses catálogos em seus comandos DDL e DML aws athena.

Usar a AWS CLI para gerenciar catálogos de metastore do Hive

Registrar um catálogo: create-data-catalog

Para registrar um catálogo de dados, use o comando create-data-catalog. Use o parâmetro name para especificar o nome que você deseja usar para o catálogo. Insira o ARN da função do Lambda na opção metadata-function do argumento parameters. Para criar tags para o novo catálogo, use o parâmetro tags com um ou mais pares de argumentos Key=key,Value=value separados por espaço.

O exemplo a seguir registra o catálogo de metastore do Hive chamado hms-catalog-1. O comando foi formatado para legibilidade.

$ 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

Mostrar detalhes do catálogo: get-data-catalog

Para mostrar os detalhes de um catálogo, passe o nome do catálogo para o comando get-data-catalog, como no exemplo a seguir.

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

O resultado de exemplo a seguir está em 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" } } }

Listar catálogos registrados: list-data-catalogs

Para listar os catálogos registrados, use o comando list-data-catalogs e, opcionalmente, especifique uma região, como no exemplo a seguir. Os catálogos listados sempre incluem o AWS Glue.

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

O resultado de exemplo a seguir está em 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" } } ] }

Atualizar um catálogo: update-data-catalog

Para atualizar um catálogo de dados, use o comando update-data-catalog, como no exemplo a seguir. O comando foi formatado para legibilidade.

$ 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

Excluir um catálogo: delete-data-catalog

Para excluir um catálogo de dados, use o comando delete-data-catalog, como no exemplo a seguir.

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

Mostrar detalhes do banco de dados: get-database

Para mostrar os detalhes de um banco de dados, passe o nome do catálogo e do banco de dados para o comando get-database, como no exemplo a seguir.

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

O resultado de exemplo a seguir está em formato JSON.

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

Listar bancos de dados em um catálogo: list-databases

Para listar os bancos de dados em um catálogo, use o comando list-databases e, opcionalmente, especifique uma região, como no exemplo a seguir.

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

O resultado de exemplo a seguir está em formato JSON.

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

Mostrar detalhes da tabela: get-table-metadata

Para mostrar os metadados de uma tabela, incluindo nomes de coluna e tipos de dados, passe o nome do catálogo, banco de dados e o nome da tabela para o comando get-table-metadata, como no exemplo a seguir.

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

O resultado de exemplo a seguir está em 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" } } }

Visualizar metadados de todas as tabelas em um banco de dados: list-table-metadata

Para mostrar os metadados de todas as tabelas em um banco de dados, passe o nome do catálogo e do nome do banco de dados para o comando list-table-metadata. O comando list-table-metadata é semelhante ao comando get-table-metadata, exceto que você não especifica um nome de tabela. Para limitar o número de resultados, você pode usar a opção --max-results, como no exemplo a seguir.

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

O resultado de exemplo a seguir está em 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==" }

Executar instruções DDL e DML

Ao usar a AWS CLI para executar instruções DDL e DML, você pode passar o nome do catálogo de metastore do Hive de uma das duas maneiras:

  • Diretamente para as declarações que são compatíveis com ele.

  • Para o parâmetro Catalog de --query-execution-context.

Instruções DDL

O exemplo a seguir passa o nome do catálogo diretamente como parte da instrução DDL show create table. O comando foi formatado para legibilidade.

$ 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"

A instrução DDL show create table de exemplo a seguir usa o parâmetro Catalog de --query-execution-context para passar o nome do catálogo de metastore do Hive hms-catalog-1. O comando foi formatado para legibilidade.

$ 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"

Instruções DML

O exemplo da instrução DML select a seguir passa o nome do catálogo diretamente para a consulta. O comando foi formatado para legibilidade.

$ 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"

O seguinte exemplo da instrução DML select usa o parâmetro Catalog de --query-execution-context para passar o nome do catálogo de metastore do Hive hms-catalog-1. O comando foi formatado para legibilidade.

$ 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"