给出两张表: filtered_locations
包含小数据集(只有几行)
|-------------|
| loc<String> |
|-------------|
| ... |
|-------------|
``` `table_clients` 超大表(百万行)
id | name | age | locations <array |
----- | -------------------------------------- | ||
[a,b,c..] | |||
-------------------------------------------- |
我想查询表 `table_clients` 对于上的值 `filtered_locations` . 主要问题是要查询的字段 `table_clients` 是一个 `array` 类型。
所以,我分解了列,然后尝试嵌入一个子查询,只包含列中列出的位置 `filtered_locations` .
我面临的第一个问题是,配置单元(至少是我正在运行的版本)似乎不接受内部的子查询 `in` 或者 `exists` 站着。
这就是我得到的错误:
编译语句时出错:失败:semanticexception子查询sq_1[tc.location in(select fl.loc from filtered_locations fl)]的定义中的列引用'location'无效,用作sq_1
作为替代,我试着用 `LEFT JOIN` 但也不工作,因为 `explode` 呼叫第二个错误
编译语句时出错:失败:semanticexception[error 10085]:不支持带有横向视图的联接“location”
with filtered_locations as (
SELECT
'loc1' as loc
union all
'loc2' as loc
)
select
id, name, location
max(age) as max_age
from
table_clients tc
LATERAL VIEW EXPLODE(locations) l as location
-- Ideally this should work!
-- where
-- tc.location in (
-- select fl.loc from filtered_locations fl
-- )
left join filtered_locations fl
on fl.loc = tc.location
group by id, name, location
那我的问题最好的解决办法是什么呢?请注意 `table_clients` 有数百万张唱片!
谢谢
1条答案
按热度按时间kgsdhlau1#
从理论上说,这应该管用
失败:semanticexception[错误10009]:行6:8表别名“e”无效
... 但既然没有,就需要一点变通