请分享您从雪花卸载数据的经验- 该表有百万行,每行大约有16MB数据。
“复制到'@ ext_stg / path / file_name' 来自schema.table”必须为每一行生成单独的文件。 目的是在S3中生成百万个文件。
“复制到”旨在一次写入批量数据。 使用“复制到”为每一行生成单独的文件非常慢。
谢谢!
答案 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 );