Hive 使用红移光谱查询配置单元视图

Hive 使用红移光谱查询配置单元视图,hive,amazon-redshift,amazon-redshift-spectrum,Hive,Amazon Redshift,Amazon Redshift Spectrum,我试图查询具有红移光谱的配置单元视图,但它给了我以下错误: SQL Error [500310] [XX000]: [Amazon](500310) Invalid operation: Assert Details: ----------------------------------------------- error: Assert code: 1000 context: loc->length() > 5 && loc->

我试图查询具有红移光谱的配置单元视图,但它给了我以下错误:

SQL Error [500310] [XX000]: [Amazon](500310) Invalid operation: Assert
Details: 
 -----------------------------------------------
  error:  Assert
  code:      1000
  context:   loc->length() > 5 && loc->substr(0, 5) == "s3://" - 
  query:     12103470
  location:  scan_range_manager.cpp:272
  process:   padbmaster [pid=1769]
  -----------------------------------------------;
是否可以从红移光谱查询配置单元视图?我使用的是Hive Metastore(不是Glue数据目录)

我希望有一个视图,用一组有限的列和分区来限制对原始表的访问。另外,因为我的原始表(拼花数据)有一些贴图字段,所以我想做一些类似的事情,以便更容易从红移中查询,因为在红移中处理贴图字段有点复杂:

CREATE view my_view AS
SELECT event_time, event_properties['user-id'] as user_id, event_properties['product-id'] as product_id, year, month, day
FROM my_events
WHERE event_type = 'my-event'  -- partition
我可以从Spectrum查询表my_events,但它很混乱,因为properties是一个映射字段,而不是一个结构,所以我需要用红移将它分解成几行


感谢查看错误,当查询外部表和视图时,Spectrum似乎总是查找S3路径。 这对于外部表是有效的,因为这些表总是有一个位置,但视图永远不会有显式的S3位置

Error type    -> Assert
Error context -> context: loc->length() > 5 && loc->substr(0, 5) == "s3://"
如果是蜂巢视图,
loc->length()
将返回0,整个语句将返回
False
,并导致断言错误

对此的确认可以是第二条:

loc->substr(0, 5) == "s3://"
它期望位置为S3路径,如果我们计算
“S3://”中的字符数,则为
5
,这也确认了第一条:

loc->length() > 5

看起来Spectrum不支持配置单元视图(或者通常不支持任何没有显式S3路径的对象)

好的,谢谢!我考虑了更多,对于Spectrum来说,一般来说不支持配置单元视图是有意义的,因为例如,我的视图是用Spark创建的,可以使用一些红移Spectrum中不存在的特定于Spark的函数。