Snowflake cloud data platform 雪花外部表需要位置列问题

Snowflake cloud data platform 雪花外部表需要位置列问题,snowflake-cloud-data-platform,snowflake-schema,Snowflake Cloud Data Platform,Snowflake Schema,我面临的一个问题是,提取的文件列可能会因不同而发生变化: 例如: 在第1天,文件可能有3列:c1、c2、c3 在第2天,文件可能有5列:c1、c3、c2、c4、c5 注意第二个文件中c3的列位置 在snowflake中使用copy-into-from-external-stage语法将不起作用,因为c3列是在c1之后引入的。 尝试使用外部表,但也需要位置列才能工作。 有人知道如何加载这些类型文件吗?您没有告诉任何有关所使用格式的信息 加载不同列的唯一方法是将文件作为单个列加载,例如,使用FIEL

我面临的一个问题是,提取的文件列可能会因不同而发生变化: 例如: 在第1天,文件可能有3列:c1、c2、c3 在第2天,文件可能有5列:c1、c3、c2、c4、c5 注意第二个文件中c3的列位置

在snowflake中使用copy-into-from-external-stage语法将不起作用,因为c3列是在c1之后引入的。 尝试使用外部表,但也需要位置列才能工作。
有人知道如何加载这些类型文件吗?

您没有告诉任何有关所使用格式的信息

加载不同列的唯一方法是将文件作为单个列加载,例如,使用FIELD_DELIMITER=NONE并将每个文件列作为属性拆分并转换为对象

如果第一条记录包含字段名c1。。。cn,您可以加载:

WITH
  file AS (SELECT * FROM VALUES ('c1,c2,c3'), ('1,2,3'), ('11,22,33') t(REC)),
  split_file AS (SELECT * FROM file CROSS JOIN LATERAL SPLIT_TO_TABLE(REC, ','))
  combined_table AS (
    SELECT content.SEQ - 1 REC_NO, OBJECT_AGG(headers.VALUE, content.VALUE::VARIANT) OBJ
    FROM split_file content
    INNER JOIN split_file headers
          ON content.INDEX = headers.INDEX AND content.SEQ > 1 AND headers.SEQ = 1
    GROUP BY content.SEQ
  )
SELECT OBJ:c1::NUMBER c1, OBJ:c2::NUMBER c2, OBJ:c3::NUMBER c3, OBJ:c4::NUMBER c4
FROM combined_table;
上面的示例将所有内容组合到一个查询中,但在您的情况下,必须单独聚合每个文件并将append插入组合的表中

之所以这样做,是因为您可以引用不存在的对象属性列,例如c4,它们将被NULL替换