使用 Redshift Spectrum 查询 Hive 视图
Query Hive view with Redshift Spectrum
我正在尝试使用 Redshift Spectrum 查询 Hive 视图,但出现此错误:
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 视图?我正在使用 Hive Metastore(不是 Glue 数据目录)。
我想要一个视图来限制对原始 table 的访问,其中包含一组有限的列和分区。而且因为我原来的 table (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 查询 table my_events 但它很乱,因为 properties 是一个 Map 字段,而不是 Struct,所以我需要在 Redshift 中将它分解成几行。
谢谢
查看错误,似乎在查询外部表和视图时 Spectrum 总是寻找 S3 路径。
这对外部表有效,因为它们总是有一个位置,但视图永远不会有一个明确的 S3 位置。
Error type -> Assert
Error context -> context: loc->length() > 5 && loc->substr(0, 5) == "s3://"
如果是蜂巢视图,
loc->length()
将 return 0,整个语句将 return False
并导致断言错误。
对此的确认可以是第二个条款:
loc->substr(0, 5) == "s3://"
它期望位置是 S3 路径,如果我们计算 "s3://"
中的字符数,它是 5
,这也证实了第一个子句:
loc->length() > 5
看起来 Spectrum 不支持 Hive 视图(或者通常不支持任何没有显式 S3 路径的对象)
我正在尝试使用 Redshift Spectrum 查询 Hive 视图,但出现此错误:
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 视图?我正在使用 Hive Metastore(不是 Glue 数据目录)。
我想要一个视图来限制对原始 table 的访问,其中包含一组有限的列和分区。而且因为我原来的 table (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 查询 table my_events 但它很乱,因为 properties 是一个 Map 字段,而不是 Struct,所以我需要在 Redshift 中将它分解成几行。
谢谢
查看错误,似乎在查询外部表和视图时 Spectrum 总是寻找 S3 路径。 这对外部表有效,因为它们总是有一个位置,但视图永远不会有一个明确的 S3 位置。
Error type -> Assert
Error context -> context: loc->length() > 5 && loc->substr(0, 5) == "s3://"
如果是蜂巢视图,
loc->length()
将 return 0,整个语句将 return False
并导致断言错误。
对此的确认可以是第二个条款:
loc->substr(0, 5) == "s3://"
它期望位置是 S3 路径,如果我们计算 "s3://"
中的字符数,它是 5
,这也证实了第一个子句:
loc->length() > 5
看起来 Spectrum 不支持 Hive 视图(或者通常不支持任何没有显式 S3 路径的对象)