Sql 复制到带有额外列的雪花表中
我在Snowflake中定义了一个表: GLPCT 以及一个如下所示的文件: GLPCT.csv 例如: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=”您可以在将
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);