Hive メタストアで AWS CLI を使用する - Amazon Athena

Hive メタストアで AWS CLI を使用する

aws athena CLI コマンドを使用して、Athena で使用する Hive メタストアデータカタログを管理できます。Athena で使用するカタログを 1 つ、または複数定義したら、aws athena DDL コマンドと DML コマンドでこれらのカタログを参照できます。

AWS CLI を使用して Hive メタストアカタログを管理する

カタログの登録: Create-data-catalog

データカタログを登録するには、create-data-catalog コマンドを使用します。name パラメータを使用して、カタログに使用する名前を指定します。Lambda 関数の ARN を parameters 引数の metadata-function オプションに渡します。新しいカタログのタグを作成するには、tags パラメータを、スペースで区切った 1 つ以上の Key=key,Value=value 引数ペアとともに使用します。

次の例では、hms-catalog-1 という名前の Hive メタストアカタログを登録します。コマンドは、読みやすい形式にしてあります。

$ 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

カタログの詳細の表示: Get-data-catalog

カタログの詳細を表示するには、次の例のように、カタログの名前を get-data-catalog コマンドに渡します。

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

次のサンプル結果は 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" } } }

登録済みカタログのリスト化: List-data-catalogs

登録されたカタログをリスト化するには、list-data-catalogs コマンドを使用し、必要に応じて次の例のようにリージョンを指定します。リストされているカタログには、常に AWS Glue が含まれます。

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

次のサンプル結果は 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" } } ] }

カタログの更新: Update-data-catalog

データカタログを更新するには、次の例のように update-data-catalog コマンドを使用します。コマンドは、読みやすい形式にしてあります。

$ 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

カタログの削除: Delete-data-catalog

データカタログを削除するには、次の例のように delete-data-catalog コマンドを使用します。

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

データベース詳細の表示: Get-database

データベースの詳細を表示するには、次の例のように、カタログとデータベースの名前を get-database コマンドに渡します。

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

次のサンプル結果は JSON 形式です。

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

カタログ内のデータベースのリスト化: List-databases

カタログのデータベースをリスト化するには、list-databases コマンドを使用し、必要に応じて次の例のようにリージョンを指定します。

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

次のサンプル結果は JSON 形式です。

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

テーブルの詳細の表示: Get-table-metadata

カラム名やデータ型を含むテーブルのメタデータを表示するには、次の例のように、カタログ、データベース、およびテーブル名を get-table-metadata コマンドに渡します。

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

次のサンプル結果は 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" } } }

データベース内のすべてのテーブルのメタデータの表示: List-table-metadata

データベース内のすべてのテーブルのメタデータを表示するには、カタログの名前とデータベース名を list-table-metadata コマンドに渡します。list-table-metadata コマンドは、テーブル名を指定しない点を除いて、get-table-metadata コマンドに似ています。結果件数を制限するには、次の例のように --max-results オプションを使用します。

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

次のサンプル結果は 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==" }

DDL および DML ステートメントの実行

AWS CLI を使用して DDL および DML 文を実行する場合、次の 2 つの方法のいずれかで Hive メタストアカタログの名前を渡すことができます。

  • それをサポートするステートメントに直接渡す。

  • --query-execution-context Catalog パラメータに渡す。

DDL ステートメント

次の例では、show create table DDL ステートメントの一部としてカタログ名に直接渡します。コマンドは、読みやすい形式にしてあります。

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

次の DDL show create table ステートメントの例では、Catalog--query-execution-context パラメータを使用して Hive メタストアカタログ名 hms-catalog-1 に渡します。コマンドは、読みやすい形式にしてあります。

$ 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 ステートメント

次の DML select ステートメントの例では、カタログ名をクエリに直接渡します。コマンドは、読みやすい形式にしてあります。

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

次の DML select ステートメントの例では、Catalog--query-execution-context パラメータを使用して Hive メタストアカタログ名 hms-catalog-1 に渡します。コマンドは、読みやすい形式にしてあります。

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