gpt4 book ai didi

hive - 使用 Redshift Spectrum 查询 Hive View

转载 作者:行者123 更新时间:2023-12-04 04:14:46 31 4
gpt4 key购买 nike

我正在尝试使用 Redshift Spectrum 查询 Hive View ,但它给了我这个错误:

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

是否可以从 Redshift Spectrum 查询 Hive View ?我正在使用 Hive Metastore(不是 Glue 数据目录)。

我想要一个 View 来限制对原始表的访问,其中包含一组有限的列和分区。而且因为我的原始表(Parquet 数据)有一些 Map 字段,所以我想做类似的事情,以便从 Redshift 查询更容易,因为 Map 字段在 Redshift 中处理起来有点复杂:

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 是一个 Map 字段,而不是一个 Struct,所以我需要在 Redshift 中将它分解成几行。

谢谢

最佳答案

查看错误,Spectrum 似乎总是在查询外部表和 View 时寻找 S3 路径。这对外部表有效,因为它们总是有一个位置,但 View 永远不会有一个明确的 S3 位置。

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

如果是 hive View ,loc->length() 将返回 0,整个语句将返回 False 并导致断言错误。

对此的确认可以是第二个子句:

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

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

loc->length() > 5

看起来 Spectrum 不支持 Hive View (或者通常不支持任何没有显式 S3 路径的对象)

关于hive - 使用 Redshift Spectrum 查询 Hive View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60934904/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com