É 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=
separados por espaço.key
,Value=value
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"