AWS CLI mit Hive-Metastores verwenden
Sie können aws athena-CLI-Befehle verwenden, um die Hive-Metastore-Datenkataloge zu verwalten, die Sie mit Athena verwenden. Nach der Definition eines oder mehrerer Kataloge für die Verwendung mit Athena können Sie in den aws athena-DDL- und -DML-Befehlen auf diese Kataloge verweisen.
Verwendung der AWS CLI für die Verwaltung von Hive-Metastore-Katalogen
Registrierung eines Katalogs: Create-data-catalog
Um einen Datenkatalog zu registrieren, verwenden Sie den Befehl create-data-catalog. Sie verwenden den Parameter name, um den Namen anzugeben, den Sie für den Katalog verwenden möchten. Sie übergeben den ARN der Lambda-Funktion an die Option metadata-function des Arguments parameters. Um Tags für den neuen Katalog zu erstellen, verwenden Sie den Parameter tags mit einem oder mehreren, durch Leerzeichen getrennten Argumentpaaren Key=.key,Value=value
Im folgenden Beispiel wird ein Hive-Metastore-Katalog mit dem Namen registriert hms-catalog-1. Der Befehl wurde zur besseren Lesbarkeit formatiert.
$ 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
Anzeige von Katalogdetails: Get-data-catalog
Um die Details eines Katalogs anzuzeigen, übergeben Sie den Namen des Katalogs an den Befehl get-data-catalog wie im folgenden Beispiel gezeigt.
$ aws athena get-data-catalog --name "hms-catalog-1" --region us-east-1
Das folgende Beispielergebnis verwendet das JSON-Format.
{ "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" } } }
Auflistung registrierter Kataloge: List-data-catalogs
Um die registrierten Kataloge aufzulisten, verwenden Sie den Befehl list-data-catalogs und geben optional eine Region an, wie im folgenden Beispiel gezeigt. Die aufgelisteten Kataloge enthalten stets AWS Glue.
$ aws athena list-data-catalogs --region us-east-1
Das folgende Beispielergebnis verwendet das JSON-Format.
{ "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" } } ] }
Aktualisierung eines Katalogs: Update-data-catalog
Um einen Datenkatalog zu aktualisieren, verwenden Sie den Befehl update-data-catalog wie im folgenden Beispiel gezeigt. Der Befehl wurde zur besseren Lesbarkeit formatiert.
$ 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
Löschung eines Katalogs: Delete-data-catalog
Um einen Datenkatalog zu löschen, verwenden Sie den Befehl delete-data-catalog wie im folgenden Beispiel gezeigt.
$ aws athena delete-data-catalog --name "hms-catalog-1" --region us-east-1
Anzeige von Datenbankdetails: Get-database
Um die Details einer Datenbank anzuzeigen, übergeben Sie den Namen des Katalogs und der Datenbank an den Befehl get-database wie im folgenden Beispiel gezeigt.
$ aws athena get-database --catalog-name hms-catalog-1 --database-name mydb
Das folgende Beispielergebnis verwendet das JSON-Format.
{ "Database": { "Name": "mydb", "Description": "My database", "Parameters": { "CreatedBy": "Athena", "EXTERNAL": "TRUE" } } }
Auflistung von Datenbanken in einem Katalog: List-databases
Um die Datenbanken in einem Katalog aufzulisten, verwenden Sie den Befehl list-databases und geben optional eine Region an, wie im folgenden Beispiel gezeigt.
$ aws athena list-databases --catalog-name AwsDataCatalog --region us-west-2
Das folgende Beispielergebnis verwendet das JSON-Format.
{ "DatabaseList": [ { "Name": "default" }, { "Name": "mycrawlerdatabase" }, { "Name": "mydatabase" }, { "Name": "sampledb", "Description": "Sample database", "Parameters": { "CreatedBy": "Athena", "EXTERNAL": "TRUE" } }, { "Name": "tpch100" } ] }
Anzeige von Tabellendetails: Get-table-metadata
Um die Metadaten für eine Tabelle einschließlich Spaltennamen und Datentypen anzuzeigen, übergeben Sie den Namen des Katalogs, der Datenbank und der Tabelle an den Befehl get-table-metadata wie im folgenden Beispiel gezeigt.
$ aws athena get-table-metadata --catalog-name AwsDataCatalog --database-name mydb --table-name cityuseragent
Das folgende Beispielergebnis verwendet das JSON-Format.
{ "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" } } }
Anzeige von Metadaten für alle Tabellen in einer Datenbank: List-table-metadata
Um die Metadaten für alle Tabellen in einer Datenbank anzuzeigen, übergeben Sie den Namen des Katalogs und der Datenbank an den Befehl list-table-metadata. Der Befehl list-table-metadata ist dem Befehl get-table-metadata vergleichbar, abgesehen davon, dass kein Tabellenname angegeben wird. Um die Anzahl der Ergebnisse zu begrenzen, können Sie die Option --max-resultsverwenden wie im folgenden Beispiel gezeigt.
$ aws athena list-table-metadata --catalog-name AwsDataCatalog --database-name sampledb --region us-east-1 --max-results 2
Das folgende Beispielergebnis verwendet das JSON-Format.
{ "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==" }
Ausführung von DDL- und DML-Anweisungen
Wenn Sie für die Ausführung von DDL- und DML-Anweisungen die AWS CLI verwenden, können Sie den Namen des Hive-Metastore-Katalogs auf zwei Arten übergeben:
-
Direkt an die Anweisungen, die ihn unterstützen.
-
An den Parameter
--query-execution-contextCatalog.
DDL-Anweisungen
Im folgenden Beispiel wird der Katalogname direkt als Teil der DDL-Anweisung show create table übergeben. Der Befehl wurde zur besseren Lesbarkeit formatiert.
$ 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"
In der folgenden DDL-Beispielanweisung show create table wird der Parameter Catalog von --query-execution-context verwendet, um den Namen des Hive-Metastore-Katalogs hms-catalog-1 zu übergeben. Der Befehl wurde zur besseren Lesbarkeit formatiert.
$ 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"
DML-Anweisungen.
Die folgende DML-Beispielanweisung select übergibt den Katalognamen direkt an die Abfrage. Der Befehl wurde zur besseren Lesbarkeit formatiert.
$ 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"
In der folgenden DML-Beispielanweisung select wird der Parameter Catalog von --query-execution-context verwendet, um den Namen des Hive-Metastore-Katalogs hms-catalog-1 zu übergeben. Der Befehl wurde zur besseren Lesbarkeit formatiert.
$ 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"