AWS CLI mit Hive-Metastores verwenden - Amazon Athena

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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-context Catalog.

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"