Impala - WITH子句后的CREATE TABLE

问题描述 投票:1回答:2

我有几个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 Expected: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'

注意 :

  • 上面的查询WORKS没有“CREATE”语句
  • 我现在的情况比这个简单的例子更复杂,为了清楚起见,我想保留WITH语句。
sql create-table impala with-statement
2个回答
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列在结果中重复 - 这应该会产生另一个错误。实际上,您应该准确选择所需的列。


0
投票

或者,你也可以......

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

© www.soinside.com 2019 - 2024. All rights reserved.