省略外部 Hive 元存储查询中的目录名称 - Amazon Athena

省略外部 Hive 元存储查询中的目录名称

在外部 Hive 元存储上运行 DML 和 DDL 查询时,如果在查询编辑器中选择了目录名称,则可以通过省略该名称来简化查询语法。此功能将受到一些限制。

DML 语句

使用已注册目录运行查询
  1. 您可以使用语法 [[data_source_name].database_name].table_name 将数据源名称置于数据库之前,如以下示例所示。

    select * from "hms-catalog-1".hms_tpch.customer limit 10;
  2. 如果已在查询编辑器中选定要使用的数据源,您可以在查询中省略数据源名称,如以下示例所示。

    select * from hms_tpch.customer limit 10:
    使用默认数据源的 DML 查询。
  3. 在查询中使用多个数据源时,只能省略默认数据源名称,并且必须为任何非默认数据源指定全名。

    例如,假设在查询编辑器中将 AwsDataCatalog 选作默认数据源。以下查询摘录中的 FROM 语句完全限定了前两个数据源名称,但省略了第三个数据源的名称,因为它位于 AWS Glue 数据目录中。

    ... FROM ehms01.hms_tpch.customer, "hms-catalog-1".hms_tpch.orders, hms_tpch.lineitem ...

DDL 语句

以下 Athena DDL 语句支持目录名称前缀。其他 DDL 语句中的目录名称前缀会导致语法错误。

SHOW TABLES [IN [catalog_name.]database_name] ['regular_expression'] SHOW TBLPROPERTIES [[catalog_name.]database_name.]table_name [('property_name')] SHOW COLUMNS IN [[catalog_name.]database_name.]table_name SHOW PARTITIONS [[catalog_name.]database_name.]table_name SHOW CREATE TABLE [[catalog_name.][database_name.]table_name DESCRIBE [EXTENDED | FORMATTED] [[catalog_name.][database_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]

与 DML 语句一样,在查询编辑器中选择了数据源和数据库时,可以省略查询中的数据源和数据库前缀。

在以下示例中,在查询编辑器中选择了 hms-catalog-1 数据源和 hms_tpch 数据库。即使查询本身中忽略 hms-catalog-1 前缀和 hms_tpch 数据库名称,show create table customer 语句也会成功。

使用默认目录的 DDL 语句。

在 JDBC 连接字符串中指定默认数据源

当您使用 Athena JDBC 驱动程序将 Athena 连接到外部 Hive 元存储时,可以使用 Catalog 参数在 SQL 编辑器(如 SQL Workbench)中的连接字符串中指定默认数据源名称。

注意

要下载最新版本的 Athena JDBC 驱动程序,请参阅将 Athena 与 JDBC 驱动程序一起使用

以下连接字符串指定默认数据源 hms-catalog-name

jdbc:awsathena://AwsRegion=us-east-1;S3OutputLocation=s3://amzn-s3-demo-bucket/lambda/results/;Workgroup=AmazonAthenaPreviewFunctionality;Catalog=hms-catalog-name;

下图显示了 SQL Workbench 中配置的示例 JDBC 连接 URL。

在 SQL Workbench 中配置 JDBC 连接 URL。