snowflake-cloud-data-platform - 仅使用 REST 和 SQL 命令批量插入到 Snowflake
问题描述
我正在使用 Snowflake 数据库和 HiQ FRENDS 集成平台。FRENDS 没有(据我所知)Snowflake 插件。我在运行 Frends 服务器的 Windows 平台上安装了 sbnowflake ODBC 驱动程序。
我正在寻找一种将批量上传到从 FRENDS 到 Snowflake 的方法。我知道我应该将我的数据文件上传到 Snowflake 的舞台区域,然后使用 COPY 命令将其附加到 DB。但我还没有找到通过 REST API(或任何其他方法)将我的数据上传到舞台的方法。我发现与该主题相关的唯一文档是 Snowpipes ( https://docs.snowflake.com/en/user-guide/data-load-snowpipe-rest-apis.html ),但我不想要求我的过程中的管道。我知道这是可能的,因为某些软件,例如 Alteryx 可以在目标数据库中没有管道的情况下进行批量上传。
有没有人想办法将结构化的 JSON/CSV 数据上传到 Snowflake 以进行批量插入,而无需调用外部二进制文件(例如put
命令)?
解决方案
Snowflake ODBC 驱动程序支持 PUT 命令将文件上传到内部阶段https://docs.snowflake.com/en/sql-reference/sql/put.html#put
您可以在此处获取 ODBC 驱动程序https://sfc-repo.snowflakecomputing.com/odbc/index.html
然后,您可以像使用任何其他 SQL 命令一样通过 ODBC 驱动程序使用标准方法使用 PUT 命令。请注意,当 ODBC 放置失败时,ODBC 驱动程序提供的消息是通用的。您可以通过转到 Web UI 中的 Snowflake History 选项卡来获取更好的信息,以获取更详细的错误消息。
static void Main(string[] args)
{
Console.WriteLine("Connecting to Snowflake...");
string connetionString = null;
OdbcConnection cnn;
connetionString = "Driver={SnowflakeDSIIDriver};Server=XXXXXXXXXXXXX.snowflakecomputing.com;Database=TEST;UID=greg;PWD=*******";
cnn = new OdbcConnection(connetionString);
try
{
cnn.Open();
Console.WriteLine("Connected.");
String putCmd = "put file://C:\\Users\\greg\\Desktop\\MyFile.csv @TEST.PUBLIC.MY_STAGE";
Console.WriteLine(putCmd);
OdbcCommand cmd = new OdbcCommand(putCmd, cnn);
OdbcDataReader rs = cmd.ExecuteReader();
if (rs.HasRows)
{
while (rs.Read())
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}",
rs.GetString(0), rs.GetString(1), rs.GetString(2), rs.GetString(3));
}
}
else
{
Console.WriteLine("No rows found.");
}
rs.Close();
cnn.Close();
}
catch (Exception e)
{
Console.Write("Error: " + e.Message);
}
Console.ReadKey();
}
}
}
推荐阅读
- python-2.7 - 在 Pandas 中打印特定的行和列
- ruby-on-rails - 每当我尝试更改数据库列类型时 Heroku 上的错误
- python - 返回给定数组的可能排列
- javascript - Chrome 扩展键盘快捷键需要 2 次按下才能更改值
- scala - 将一个数据框中的单个值与另一个数据框中的值映射
- java - 试图理解Java中的继承
- jszip - jsZip - 在 Ajax 发布成功后执行 generateAsync
- php - php preg_split 在结果上添加一个空字段
- python - 从 XML 注释转换为 BRAT 格式
- python - 使用python按列排序矩阵