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

u2nhd7ah  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(475)

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

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]
  -----------------------------------------------;

是否可以从红移光谱查询配置单元视图?我使用的是配置单元元存储(不是粘合数据目录)。
我想要有一个视图来限制对原始表的访问,其中包含一组有限的列和分区。另外,因为我的原始表(Parquet数据)有一些Map字段,所以我想做一些类似的操作,以便更容易从redshift进行查询,因为在redshift中处理Map字段有点复杂:

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中查询表myu events,但是它很乱,因为properties是一个map字段,而不是一个struct,所以我需要用红移将它分解成几行。
谢谢

snvhrwxg

snvhrwxg1#

从错误的Angular 来看,在查询外部表和视图时,spectrum似乎总是在寻找s3路径。这对于外部表是有效的,因为这些表总是有一个位置,但是视图永远不会有一个显式的s3位置。

Error type    -> Assert
Error context -> context: loc->length() > 5 && loc->substr(0, 5) == "s3://"

如果是Hive视图, loc->length() 将返回0,并且整个语句将返回 False 并导致Assert错误。
对此的确认可以是第二条:

loc->substr(0, 5) == "s3://"

它期望的位置是一个s3路径,如果我们计算其中的字符数 "s3://" 它是 5 ,这也证实了第一条:

loc->length() > 5

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

相关问题