Impala - 在 WITH 子句之后创建 TABLE
Posted
技术标签:
【中文标题】Impala - 在 WITH 子句之后创建 TABLE【英文标题】:Impala - CREATE TABLE after a WITH clause 【发布时间】:2019-02-15 12:18:06 【问题描述】:我有一个带有几个 WITH 子句的查询,然后是一个 CREATE TABLE
:
WITH TABLE_1 AS (
SELECT * FROM SOMEWHERE_1
), TABLE_2 AS (
SELECT * FROM SOMEWHERE_2
(
CREATE TABLE TABLE_3 AS
(
SELECT TABLE_1.*, TABLE_2.*
FROM TABLE_1
INNER JOIN TABLE_2 ON TABLE_2.key = TABLE_1.key
)
)
但是我有以下错误:
遇到:CREATE 预期:SELECT、VALUES、WITH CAUSED BY:异常:语法错误
所以我尝试将 CREATE 语句放在首位:
CREATE TABLE_3 AS
(
WITH TABLE_1 AS (
SELECT * FROM SOMEWHERE_1
), TABLE_2 AS (
SELECT * FROM SOMEWHERE_2
(
SELECT TABLE_1.*, TABLE_2.*
FROM TABLE_1
INNER JOIN TABLE_2 ON TABLE_2.key = TABLE_1.key
)
)
但现在我有以下错误:
AnalysisException:无法解析表引用:'TABLE_1'
请注意:
上述查询在没有“CREATE”语句的情况下也可以工作 我现在的情况比这个简单的例子更复杂,为了清楚起见,我想保留 WITH 语句。【问题讨论】:
【参考方案1】:嗯。我认为这会奏效:
CREATE TABLE TABLE_3 AS
WITH TABLE_1 AS (
SELECT * FROM SOMEWHERE_1
),
TABLE_2 AS (
SELECT * FROM SOMEWHERE_2
)
SELECT TABLE_1.*, TABLE_2.*
FROM TABLE_1 INNER JOIN
TABLE_2
ON TABLE_2.key = TABLE_1.key;
当然,您还会遇到其他问题,例如key
列在结果中重复——这应该会产生另一个错误。在实践中,您应该准确地选择您想要的列。
【讨论】:
我不确定为什么我的第二次尝试失败了,但您的解决方案有效。非常感谢。 这应该会失败。语法不正确。Create table <tablename>
是正确的语法
@XING 。 . .谢谢。【参考方案2】:
或者,你也可以这样做......
WITH TABLE_1 AS (
SELECT * FROM SOMEWHERE_1
),
TABLE_2 AS (
SELECT * FROM SOMEWHERE_2
)
SELECT TABLE_1.*, TABLE_2.* INTO TABLE_3
FROM TABLE_1 INNER JOIN
TABLE_2
ON TABLE_2.key = TABLE_1.key
强烈建议随时准备好 DDL 并运行 INSERT INTO TABLE SELECT * FROM CTE
【讨论】:
以上是关于Impala - 在 WITH 子句之后创建 TABLE的主要内容,如果未能解决你的问题,请参考以下文章
哪个更快? Spark SQL with Where 子句或在 Spark SQL 之后在 Dataframe 中使用过滤器
Impala 或 Hive 在其他 SQL 语法中是不是有类似 IN 子句的东西?
Impala:AnalysisException:LEFT OUTER JOIN 需要 ON 或 USING 子句