在外部 Hive 元存储查询中使用默认数据源
在外部 Hive 元存储上运行 DML 和 DDL 查询时,如果在查询编辑器中选择了目录名称,则可以通过省略该名称来简化查询语法。此功能将受到一些限制。
DML 语句
使用已注册目录运行查询
-
您可以使用语法
[[
将数据源名称置于数据库之前,如以下示例所示。data_source_name
].database_name
].table_name
select * from "hms-catalog-1".hms_tpch.customer limit 10;
-
如果已在查询编辑器中选定要使用的数据源,您可以在查询中省略数据源名称,如以下示例所示。
select * from hms_tpch.customer limit 10:
-
在查询中使用多个数据源时,只能省略默认数据源名称,并且必须为任何非默认数据源指定全名。
例如,假设在查询编辑器中将
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 语句。](images/datastores-hive-default-catalog-4.png)
在 JDBC 连接字符串中指定默认数据源
当您使用 Athena JDBC 驱动程序将 Athena 连接到外部 Hive 元存储时,可以使用 Catalog
参数在 SQL 编辑器(如 SQL Workbench
注意
要下载最新版本的 Athena JDBC 驱动程序,请参阅将 Athena 与 JDBC 驱动程序一起使用。
以下连接字符串指定默认数据源 hms-catalog-name
。
jdbc:awsathena://AwsRegion=us-east-1;S3OutputLocation=s3://DOC-EXAMPLE-BUCKET/lambda/results/;Workgroup=AmazonAthenaPreviewFunctionality;Catalog=
hms-catalog-name
;
下图显示了 SQL Workbench 中配置的示例 JDBC 连接 URL。
![在 SQL Workbench 中配置 JDBC 连接 URL。](images/datastores-hive-default-catalog-jdbc-1.jpg)