本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 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
選項。若要為新目錄建立標籤,請將 tags
參數與一或多個以空格分隔的 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 陳述式時,您可以透過下列兩種方式之一傳遞 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"