sql - 将数据从舞台发送到雪花中的多列表
问题描述
我有一个内部命名阶段,其中存储 json 文件,我想从那里将它们存储在雪花表中。目标表的结构如下,
file_name (string)
load_date (timestamp)
data (variant)
我正在使用以下查询将数据从阶段移动到表
copy into tableName (data) from @stagename/filename.json;
但是上面的查询只是填充数据列,我想要的也是插入时间戳和文件名。知道我需要在查询中进行哪些更改吗?谢谢
解决方案
您需要在此处COPY
使用带有转换文档的语句。当您使用该方法时,您可以查询文件的元数据以获取文件名、行号等 -此处的文档。
filename.json
上传到名为的内部阶段的示例文件stagename
:
[{"name": "simon"},{"name": "jason"}, {"name": "jessica"}]
Sql 加载创建和加载表:
-- Create example table first with 3 columns
create or replace transient table test_table
(
file_name varchar,
load_date timestamp,
data variant
);
-- Load with transformation:
copy into test_table (file_name, load_date, data) from (
select
metadata$filename,
current_timestamp,
f.$1
from @stagename/filename.json f
)
file_format = (
type = json
strip_outer_array = true
)
force=true
;
结果:
+-------------+-----------------------------+-----------------------+
|FILE_NAME |LOAD_DATE |DATA |
+-------------+-----------------------------+-----------------------+
|filename.json|2021-07-16 08:56:24.075000000|{"name": "simon"} |
|filename.json|2021-07-16 08:56:24.075000000|{"name": "jason"} |
|filename.json|2021-07-16 08:56:24.075000000|{"name": "jessica"} |
+-------------+-----------------------------+-----------------------+
推荐阅读
- html - 我想为此在 html 电子邮件中附加图像,我使用的是 base64 编码图像,但问题是图像未显示在 Outlook 应用程序中
- reactjs - 使用 redux-saga 重定向反应路由器
- c# - 如何将 IEnumerable 转换为一个对象
- jasmine - 总是有一些测试用例得到 jasmine.DEFAULT_TIMEOUT_INTERVAL
- javascript - vue.js - 无法通过 css 更改 svg 的样式,并且在 dom 中它应用 element.style 而不是类名
- java - Jooq:如何将 Record 映射到具有相同列名的 Pojo 类?
- swift4 - 使用活动指示器(Swift4)在 UICollectionView 调用 API 中从滚动到最后一个单元格加载数据
- sql-server - 无法使用 FreeTDS 从 Linux VM 连接到 MSSQL Server
- flutter - 在平台/android-29 中找不到 Flutter 医生 -android sdk 文件
- jquery - 使用 Bootstrap 3 模式自动完成输入字段