我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?

Posted

技术标签:

【中文标题】我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?【英文标题】:Can we load the files from a file location to Named internalstage using stored proc in snowflake? 【发布时间】:2021-07-09 11:56:40 【问题描述】:

我们可以使用雪花中的存储过程将文件从文件位置加载到内部阶段吗?我知道我们不能在这里使用 put 命令。请帮忙

【问题讨论】:

可以使用外部 lambda 函数,但不能使用 Snowflake 存储过程。 【参考方案1】:

您将无法使用 Snowflake 存储过程将文件从本地放置到内部阶段。

以下是一些链接,可能会有所帮助:

https://community.snowflake.com/s/article/How-to-use-Variable-Substitution-in-PUT-command-using-Snowflake-Python-connector

https://community.snowflake.com/s/article/How-to-use-an-ODBC-DSN-connection-in-a-NET-Client-to-put-the-file-to-Snowflake-internal-stage

【讨论】:

【参考方案2】:

您不能使用 Snowflake 存储过程。如果文件在云存储(AWS、Azure、GCP)中,那么您可以设置一个外部阶段并直接从它们中提取。如果文件是本地文件,则需要使用工具推送到 Internal Stage。例如。 Snowsql 客户端、python、.Net 或可以使用 ODBC 或 JDBC 客户端的工具。

【讨论】:

【参考方案3】:

简短的回答是否定的。 原因是,该雪花正在云中运行,并且无法访问您的本地计算机。

您必须通过支持的工具将文件从本地机器上传到云存储解决方案,然后您才能使用存储过程来处理文件。

以下是一些附加信息

要将文件从计算机或虚拟机加载到雪花,您正在寻找以下两个选项之一:

    通过PUT command上传到雪花内部舞台 或 通过云提供商工具从您的计算机上传到 Snowflake External Stage,

AWS:

aws s3 cp filename.txt s3://bucket-name

Azure:

az storage blob upload \
    --account-name <storage-account> \
    --container-name <container> \
    --name helloworld \
    --file helloworld \
    --auth-mode login

GCP:

gsutil cp *.txt gs://my-bucket

将数据加载到阶段之后。

如果您不确定要使用哪种类型的舞台,请参阅Choosing a Stage

您通过COPY INTO 命令将数据加载到表中

如果您使用的是雪花内部阶段,则以下示例脚本是一个上传命令,用于上传您的文件。

put file:///tmp/data/mydata.csv @my_int_stage;

您可以使用适用于 python 的雪花连接器从 snowsql 或 python 运行 PUT 命令。

向我们提供您尝试使用的代码和错误消息,我们可以帮助您继续前进。

【讨论】:

以上是关于我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以从雪花中的函数调用存储过程吗

每天从 S3 存储桶加载一个新文件到雪花表

使用 talend 将数据从 as400 加载到雪花时数据发生变化

雪花 CDC 从 S3 到雪花

外部表的雪花外部阶段文件推荐

使用 Python 将数据写入雪花