Sql 复制到带有额外列的雪花表中

Sql 复制到带有额外列的雪花表中,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,我在Snowflake中定义了一个表: GLPCT 以及一个如下所示的文件: GLPCT.csv 例如: CTACCT,CTPAGE "Test Account",100 "Second Account", 200 我的“复制到”命令如下所示: 从复制到GLPCT\u POC'azure://ouraccount.blob.core.windows.net/landing/GLPCT“credentials=(azure_sas_token=”您可以在将

我在Snowflake中定义了一个表:

GLPCT 以及一个如下所示的文件:

GLPCT.csv 例如:

CTACCT,CTPAGE
"Test Account",100
"Second Account", 200
我的“复制到”命令如下所示:

从复制到GLPCT\u POC'azure://ouraccount.blob.core.windows.net/landing/GLPCT“credentials=(azure_sas_token=”您可以在将数据和副本拉入查询时添加“转换”。在这种情况下,您的转换可以是添加空列

但是,为了使用此功能,您需要为外部源创建一个stage

create or replace stage my_stage 
url='azure://ouraccount.blob.core.windows.net/landing/GLPCT'
credentials=(azure_sas_token='<SAS_TOKEN')
file_format=(TYPE=CSV, SKIP_HEADER = 1, FIELD_OPTIONALLY_ENCLOSED_BY='"');

copy into GLPCT_POC 
from (SELECT NULL, $1, $2 FROM @my_stage);
创建或替换后台my_后台
url='1〕azure://ouraccount.blob.core.windows.net/landing/GLPCT'

credentials=(azure_sas_token=”似乎可以通过COPY into语句指示要插入的列,因此我们的列变为:


从复制到GLPCT\u POC(CTACCT,CTPAGE)'azure://ouraccount.blob.core.windows.net/landing/GLPCT“credentials=(azure_sas_token=”Snowflake允许您设置文件格式中的错误列计数不匹配

错误_在_列上_计数_不匹配=真|假布尔值指定 如果分隔列数 输入数据文件中的(即字段)与 对应表中的列

如果设置为FALSE,则不会生成错误并继续加载。如果 文件已成功加载:

如果输入文件中包含的字段多于中的列的记录 表中的匹配字段按出现顺序加载 未加载文件和其余字段

如果输入文件包含的字段数少于中的列数的记录 在该表中,表中不匹配的列加载为NULL 价值观


从文档中可以看出,当使用外部源代码时,它们COPY-INTO命令不支持转换。我在上面尝试了您的命令,收到了以下错误:
SQL编译错误:COPY语句只支持简单的SELECT-from-stage语句进行导入。
啊,是的。我忘记了。为此,您需要设置一个阶段作为一个额外的步骤。相应地更新我的答案。我不知道这一点,对于简单的一次性拷贝查询来说,这是一个很好的方法。我只想补充一点,通常建议在生产环境中使用阶段,以改进维护、可恢复性和模块化。
CTACCT,CTPAGE
"Test Account",100
"Second Account", 200
create or replace stage my_stage 
url='azure://ouraccount.blob.core.windows.net/landing/GLPCT'
credentials=(azure_sas_token='<SAS_TOKEN')
file_format=(TYPE=CSV, SKIP_HEADER = 1, FIELD_OPTIONALLY_ENCLOSED_BY='"');

copy into GLPCT_POC 
from (SELECT NULL, $1, $2 FROM @my_stage);