Hive 메타스토어와 함께 AWS CLI 사용
aws athena
CLI 명령을 사용하여 Athena에서 사용하는 Hive 메타스토어 데이터 카탈로그를 관리할 수 있습니다. Athena에서 사용할 카탈로그를 하나 이상 정의한 후에는 aws athena
DDL 및 DML 명령에서 해당 카탈로그를 참조할 수 있습니다.
AWS CLI를 사용하여 Hive 메타스토어 카탈로그 관리
카탈로그 등록: Create-data-catalog
데이터 카탈로그를 등록하려면 create-data-catalog
명령을 사용합니다. name
파라미터를 사용하여 카탈로그에 사용할 이름을 지정합니다. Lambda 함수의 ARN을 parameters
인수의 metadata-function
옵션에 전달합니다. 새 카탈로그에 대한 태그를 만들려면 하나 이상의 공백으로 구분된 Key=
인수 페어와 함께 key
,Value=value
tags
파라미터를 사용합니다.
다음 예제에서는 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 문을 실행할 때 다음 두 가지 방법 중 하나로 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
문은 --query-execution-context
의 Catalog
파라미터를 사용하여 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
문은 --query-execution-context
의 Catalog
파라미터를 사용하여 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"