将数据文件从内部阶段表复制到逻辑表

时间:2020-03-24 20:08:31

标签: snowflake-cloud-data-platform

我正在处理从Unix / S3存储桶转移到内部/外部阶段的json和csv文件 而且我没有将JSON文件从内部/外部阶段复制到静态或逻辑表的任何问题,我将它们存储为JsonFileName和JsonFileContent

尝试复制到静态表(parse_json($ 1)适用于JSON)

COPY INTO LogicalTable (FILE_NM, JSON_CONTENT) 
from (
  select METADATA$FILENAME AS FILE_NM, parse_json($1) AS JSON_CONTENT 
  from @$TSJsonExtStgName
) 
file_format = (type='JSON' strip_outer_array = true);

我正在寻找与CSV类似的东西,将csv文件名和csv文件内容从内部/外部分段复制到静态或逻辑表。主要是为了将文件复制和文件加载分开来寻找,加载可能由于列数不匹配,换行符或其中一条记录中的数据错误而失败。

如果以下任何一项得到澄清,请提出建议

1)尝试复制到静态表(METADATA $ ??????不适用于CSV)

select METADATA$FILENAME AS FILE_NM, METADATA$?????? AS CSV_CONTENT 
from @INT_REF_CSV_UNIX_STG

2)尝试使用动态列(T. *不适用于CSV)

SELECT METADATA$FILENAME,$1, $2, $3, T.* 
FROM @INT_REF_CSV_UNIX_STG(FILE_FORMAT => CSV_STG_FILE_FORMAT)T

1 个答案:

答案 0 :(得分:0)

无论文件是CSV还是JSON,您都需要确保SELECT与目标表的表布局匹配。我假设使用JSON,目标表是2列...文件名和JSON内容的VARIANT列。对于CSV,您需要执行相同的操作。因此,您需要为文件中要与目标表匹配的每一列执行$ 1,$ 2等操作。

我不知道您使用的METADATA $ ?????????是什么,

---添加

根据下面的评论,您有2个选项,它们不是COPY INTO语句所固有的:

1)创建一个存储过程,该存储过程查看表DDL并生成定义了静态列的COPY INTO语句,然后从SP内部执行COPY INTO。

2)利用外部表。通过使用METADATA $ FILENAME和其余列定义外部表,外部表将CSV内容作为JSON返回给您。从那里,您可以像对待JSON表一样对待它。