简体   繁体   中英

Errors trying to copy data from a view into a table in snowflake

I am new to snowflake and I am trying to copy data from a view into an existing table

the below CTEs does some processes my data but when I try to copy the output view into a table I get Unexpected insert

with LD as(
 
         select "ID",
                 "Value",
                "Set",
                ROW_NUMBER()OVER ( PARTITION BY "ID" order by "Set" desc )  as rownum 
         from "Archive"."Prty" l
         where l."Prty" = 'Log' AND "ID"= 111
   ),
   LD2 as (
    select "ID",
            "Value",
            "Set",
            ROWNUM
    from LD where ROWNUM = 1
     )
 
 ---- copy view into table -------

 
INSERT INTO "v1" ("ID", "Value","Set",ROWNUM )
  SELECT  * FROM LD2 

After much research, I discovered that the insert statement should be at the top and select at the bottom

INSERT INTO "v1" ("ID", "Value","Set",ROWNUM )
    
with LD as(
     
             select "ID",
                     "Value",
                    "Set",
                    ROW_NUMBER()OVER ( PARTITION BY "ID" order by "Set" desc )  as rownum 
             from "Archive"."Prty" l
             where l."Prty" = 'Log' AND "ID"= 111
       ),
       LD2 as (
        select "ID",
                "Value",
                "Set",
                ROWNUM
        from LD where ROWNUM = 1
         )

      SELECT  * FROM LD2 

You answer is correct the reason is the instruction is

INSERT INTO X SELECT

which is the same as

INSERT INTO X (SELECT)

and the WITH CLAUSE is a pre-fix to a SELECT, thus second form

INSERT INTO X (WITH y SELECT)

You can see this also happen with things like recursive CTE's which expect the first item to be the recursive CTE but if you want a "prior CTE" you end up having the form

WITH cte_a as (
  -- body of cte_a
), cte_b as(
    WITH recursive_cte as(
       -- body of recursive that uses cte_a
    )
    SELECT * FROM recursive_cte
)
SELECT * from cte_b 

This is works, is somewhat ugly, but there we are, there are patterns that the parser expects, and they must be confirmed to.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM