-从雪花中卸载数据-每行到一个单独的文件

时间:2020-05-20 00:10:44

标签: snowflake-cloud-data-platform

请分享您从雪花卸载数据的经验- 该表有百万行,每行大约有16MB数据。

“复制到'@ ext_stg / path / file_name' 来自schema.table”必须为每一行生成单独的文件。 目的是在S3中生成百万个文件。

“复制到”旨在一次写入批量数据。 使用“复制到”为每一行生成单独的文件非常慢。

谢谢!

2 个答案:

答案 0 :(得分:1)

Snowflake的COPY INTO LOCATION语句以ndjson格式写入,这已经使得通过很少的本地处理将记录划分变得非常简单。

看来您已经尝试进行逐行迭代以执行此类单行导出,并且发现它运行缓慢。如果这只是一次操作,它可能仍然是可行的选择。

Snowflake不提供任何并行分裂和每行导出技术(据我所知),因此,正常情况下导出整个表,然后使用下游并行处理框架(such as a Spark job )将输入分成单独的记录文件。 ndjson格式具有随时可拆分的特性,可在分布式程序框架中轻松处理文件。

P.s。将MAX_FILE_SIZE copy option指定为非常低的值(低于行大小的最小范围)将不能保证每行只有一个文件,因为写入是对从表中一起读取的行集进行的。

答案 1 :(得分:0)

您可以通过使用python甚至雪花雪花javascript过程编写脚本来实现此目的。

伪代码如下:

var_filter_list = select primary_key from schema.table;  -- primary key or unique identifier

for idx, pk_val in enumerate(var_filter_list):    -- for each row
  var_file_name = concat(file_name,idx)
  copy into @ext_stg/path/var_file_name  from ( select * from  schema.table where 
  primary_key = pk  );