(impala) AnalysisException: select 列表不支持子查询
(impala) AnalysisException: Subqueries are not supported in the select list
我有一个这样的查询,显然 Impala 不支持 SELECT 语句中的子查询。我怎样才能在Impala中巧妙地重写它?
SELECT
col1,
col2,
...
CASE
WHEN (SELECT 1
FROM
table1 x,
table2 y
WHERE
x.id = y.id
LIMIT 1) = 1
THEN
'A'
ELSE
'B'
END
coln
FROM
...
您的查询有以下错误:
AnalysisException:select 列表不支持子查询。
你可以试试
SELECT col1, col2, ... 'A' coln
FROM ...
WHERE EXISTS (SELECT 1 FROM table1 x, table2 y WHERE x.id = y.id LIMIT 1)
UNION ALL
SELECT col1, col2, ... 'B' coln
FROM ...
WHERE NOT EXISTS (SELECT 1 FROM table1 x, table2 y WHERE x.id = y.id LIMIT 1)
没有保证,我自己没试过。
通常,更简洁的解决方案是将子查询放入 FROM 子句中,从而通过内部或左联接将子查询链接到主 table。我通常在处理 Impala 中的复杂类型时这样做。
但是,在您的具体示例中,您尝试进行左联接,为每一行定义一个字段,指示联接是否成功 ('A') 或失败 ('B')。在这种情况下,您可以执行以下操作:
SELECT
x.id, x.col2, x.col3, ...
CASE
WHEN y.id IS NOT NULL THEN 'A'
ELSE 'B'
END
coln
FROM table1 x LEFT JOIN
table2 y USING (id)
...
我有一个这样的查询,显然 Impala 不支持 SELECT 语句中的子查询。我怎样才能在Impala中巧妙地重写它?
SELECT
col1,
col2,
...
CASE
WHEN (SELECT 1
FROM
table1 x,
table2 y
WHERE
x.id = y.id
LIMIT 1) = 1
THEN
'A'
ELSE
'B'
END
coln
FROM
...
您的查询有以下错误:
AnalysisException:select 列表不支持子查询。
你可以试试
SELECT col1, col2, ... 'A' coln
FROM ...
WHERE EXISTS (SELECT 1 FROM table1 x, table2 y WHERE x.id = y.id LIMIT 1)
UNION ALL
SELECT col1, col2, ... 'B' coln
FROM ...
WHERE NOT EXISTS (SELECT 1 FROM table1 x, table2 y WHERE x.id = y.id LIMIT 1)
没有保证,我自己没试过。
通常,更简洁的解决方案是将子查询放入 FROM 子句中,从而通过内部或左联接将子查询链接到主 table。我通常在处理 Impala 中的复杂类型时这样做。
但是,在您的具体示例中,您尝试进行左联接,为每一行定义一个字段,指示联接是否成功 ('A') 或失败 ('B')。在这种情况下,您可以执行以下操作:
SELECT
x.id, x.col2, x.col3, ...
CASE
WHEN y.id IS NOT NULL THEN 'A'
ELSE 'B'
END
coln
FROM table1 x LEFT JOIN
table2 y USING (id)
...