Redshift Spectrum 和 Hive Metastore - 模棱两可的错误

Posted

技术标签:

【中文标题】Redshift Spectrum 和 Hive Metastore - 模棱两可的错误【英文标题】:Redshift Spectrum and Hive Metastore - Ambiguous Error 【发布时间】:2019-06-13 04:39:51 【问题描述】:

在 Redshift 中,我使用 Hive Metastore 创建了一个外部架构。我可以看到有关表的 Redshift 元数据(例如使用:select * from SVV_EXTERNAL_TABLES),但是在查询其中一个表时,我得到一个模棱两可的错误“错误:断言”

我尝试创建外部架构并查询表。我可以查询有关表的元数据,但实际上不能查询表本身。

我创建的外部架构如下:

create external schema hive_schema
from hive metastore
database 'my_database_name'
uri 'my_ip_address' port 9083
iam_role 'arn:aws:iam::123456789:role/my_role_name';

这是运行“select * from hive_schema.my_table_name;”时的错误消息

  -----------------------------------------------
  error:  Assert
  code:      1000
  context:   loc->length() > 5 && loc->substr(0, 5) == "s3://" -
  query:     1764
  location:  scan_range_manager.cpp:221
  process:   padbmaster [pid=26902]
  -----------------------------------------------

【问题讨论】:

我猜你的蜂巢元数据不正确?它可以在其他地方工作吗(hive/presto?)你是如何创建它的? @JonScott - 是的,我可以从 hive 成功查询表。 【参考方案1】:

Hive 表的LOCATION 是什么?似乎 Redshift 是断言s3:// 开头的位置。

通过运行该查询,您应该会看到 LOCATIONs 的表:

select location from SVV_EXTERNAL_TABLES

您的 Hive 表存储在哪里?可能是HDFS吗?我怀疑 Redshift 是否支持 S3 以外的任何其他位置 - 在 this AWS guide 的 使用 AWS Glue 数据目录时的注意事项 部分中,他们描述了如何设置 Hive Metastore 以在 S3 中存储数据。

【讨论】:

很棒的观察。是的,它是作为基于 HDFS 的表创建的。我将其更改为 S3 存储桶,它消除了上面列出的错误,但是我现在遇到了超时,即使这当前是一个很小的表——只有 1 行和 1 列。任何想法为什么? ``` -----------------------------------------------错误:S3 查询异常(获取),重试超出代码:15001 上下文:S3 请求超时。查询:11397 位置:dory_util.cpp:913 进程:query0_126_11397 [pid=12636] -------------------------------- --------------- ``` 你能用其他的sql引擎查询吗?蜂巢?快吗? 由于数据在 s3 中,您可以使用粘合目录(CREATE EXTERNAL SCHEMA my_schema FROM DATA CATALOG ... 然后CREATE EXTERNAL TABLE my_schema.my_table() ... )在其上创建一个外部表 - 只是为了测试这个存储桶是否有问题。

以上是关于Redshift Spectrum 和 Hive Metastore - 模棱两可的错误的主要内容,如果未能解决你的问题,请参考以下文章

Redshift Spectrum 为查询扫描的数据大小

如何使用 Psycopg2 在 Redshift Spectrum 中添加分区 -

如何更改 Redshift Spectrum 中的外部表?

Redshift Spectrum 性能对比 Athena

查询字符串列的 Redshift Spectrum 数组

Redshift Spectrum中表名有连字符时如何查询表?