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"