【发布时间】:2021-12-02 11:59:16
【问题描述】:
我有一个查询接口,用户写一个SQL查询并获取结果,我们使用的仓库是雪花来查询数据并显示查询的SQL结果。我们使用 Snowflake JDBC 建立连接,Asynchronously Queue the Query 从 snowflake 获取 Query ID(UUID) 并使用 Query ID 获取状态并获取 Result。
示例代码:
try {
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int numColumns = resultSetMetaData.getColumnCount();
for (int i = 1; i <= numColumns; i++) {
arrayNode.add(objectMapper.createObjectNode().put("name", resultSetMetaData.getColumnName(i))
.put("attribute_number", i)
.put("data_type", resultSetMetaData.getColumnTypeName(i))
.put("type_modifier", (Short) null)
.put("scale", resultSetMetaData.getScale(i)).put("precision",
resultSetMetaData.getPrecision(i)));
}
rootNode.set("metadata", arrayNode);
arrayNode = objectMapper.createArrayNode();
while (resultSet.next()) {
ObjectNode resultObjectNode = objectMapper.createObjectNode();
for (int i = 1; i <= numColumns; i++) {
String columnName = resultSetMetaData.getColumnName(i);
resultObjectNode.put(columnName, resultSet.getString(i));
}
arrayNode.add(resultObjectNode);
}
rootNode.set("results", arrayNode);
// TODO: Instead of returning the entire result string, send it in chunk to S3 utility class for upload
resultSet.close();
jsonString = objectMapper.writeValueAsString(rootNode);
}
正如您在此处看到的,我们的用例是我们需要将元数据信息(列详细信息)与结果一起发送。然后将结果集上传到 S3,并为用户提供 S3 链接以查看结果。
-
我试图弄清楚这种情况是否可以在雪花本身中处理,雪花可以为查询生成元数据并将结果集上传到用户定义的存储桶,这样雪花的消费者就不必这样做.我读过关于雪花流,从阶段复制。有人可以帮助我了解这是否可行,如果可行,如何实现?
-
有什么方法可以让我使用 QueryId 从雪花直接将查询结果上传到 S3,而无需获取并将其上传到 S3。
【问题讨论】:
标签: jdbc snowflake-cloud-data-platform