如何从Snowflake的数据库表中下载超过100MB的数据到CSV文件?

4
有没有办法从Snowflake下载超过100MB的数据到Excel或CSV中?通过UI,我可以通过点击“下载或查看结果按钮”下载高达100MB的数据。
1个回答

9
您需要考虑使用我们所称的“卸载”(即COPY INTO LOCATION),具体可以参考以下文档: https://docs.snowflake.net/manuals/sql-reference/sql/copy-into-location.html 另外一个选项是使用不同类型的客户端(如Python脚本或类似工具)。
希望这能帮到您...Rich。
以下是修改后的内容:
使用卸载(COPY INTO LOCATION)并不像看上去那么晦涩难懂,如果您可以使用snowSQL客户端(而非webUI),您可以轻松地从我们称之为“INTERNAL STAGE”的文件中“获取”文件,例如下面这个例子。
CREATE TEMPORARY STAGE my_temp_stage;

COPY INTO @my_temp_stage/output_filex
FROM (select * FROM databaseNameHere.SchemaNameHere.tableNameHere)
FILE_FORMAT = ( 
 TYPE='CSV' 
 COMPRESSION=GZIP 
 FIELD_DELIMITER=',' 
 ESCAPE=NONE 
 ESCAPE_UNENCLOSED_FIELD=NONE 
 date_format='AUTO' 
 time_format='AUTO' 
 timestamp_format='AUTO'
 binary_format='UTF-8' 
 field_optionally_enclosed_by='"' 
 null_if='' 
 EMPTY_FIELD_AS_NULL = FALSE 
)  
overwrite=TRUE 
single=FALSE 
max_file_size=5368709120 
header=TRUE;

ls @my_temp_stage;

GET @my_temp_stage file:///tmp/ ;

这个示例:

  1. 在Snowflake中创建一个临时的stage对象,并在关闭会话时丢弃。
  2. 将查询结果加载到一个或多个csv文件中,这些文件位于内部临时的Stage中,具体数量取决于输出大小。请注意,我没有创建另一个名为“FILE FORMAT”的数据库对象,这被认为是最佳实践,但如果您不介意命令如此冗长,您可以进行单个提取而无需创建该独立对象。
  3. 列出阶段中的文件,以便查看已创建的内容。
  4. 使用GET将文件下载下来,在这种情况下,它在我的mac上运行并将文件放置在/tmp中,如果您正在使用Windoz,则需要进行一些修改。

感谢您的回复,该文档讲述了加载到阶段、桶等内容。但我没有找到直接将其下载为CSV的方法。我可能错过了什么。您能否请粘贴一个查询或脚本,以便我可以运行它将数据下载到桌面上的Excel或CSV中? - npool
@user2630818 - 请查看上面答案中的编辑,创建阶段、执行卸载和获取文件非常容易,特别是如果您可以使用snowSQL客户端(或支持执行命令的其他客户端)。不幸的是,WebUI不支持GET(或PUT)命令。 - Rich Murnane
这并不是真正有效的,因为它会将文件分成很多部分。有没有办法阻止它这样做? - Christopher Turnbull
@ChristopherTurnbull - 1.5年前的原始问题并没有要求一个单一的文件,分解巨大的文件有其好处,但如果你必须要尝试一个文件,你可以尝试使用single=TRUE复制选项-虽然如果数据最终变得太大,它仍然会分解它。https://docs.snowflake.com/en/sql-reference/sql/copy-into-location.html#copy-options-copyoptions - Rich Murnane
是的,这个选项可用非常好 :) - Christopher Turnbull
1
嗨,@npool,如果我的(或其他人的)答案对您有帮助,请花点时间通过单击答案旁边的复选标记将其从“灰色”切换为“填充”,以接受帮助。 - Rich Murnane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接