【问题标题】:Create a Table in SnowFlake dynamically (Using JSON data from the staging area)在 SnowFlake 中动态创建表(使用暂存区的 JSON 数据)
【发布时间】:2019-11-13 01:31:30
【问题描述】:

有没有办法通过使用暂存区的 JSON 文件动态创建表(带列)?

我使用了命令:'copy into TableName from @StageName;'

这会将我的 json 文件中的所有不同行放在一个列中。

但是,我想要不同的列。例如,第 1 列应为“IP”,第 2 列应为“操作系统”,依此类推。

提前谢谢你!!

【问题讨论】:

    标签: snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    我在我的项目中实现了同样的事情。

    所以这是一个两步的过程。

    第一步 - 创建一个包含变体数据类型表的阶段表并从阶段复制到表中 - 我可以看到你已经这样做了。

    第二步 - 创建一个表或一个视图(因为雪花超快,视图是这种动态提取 JSON 数据的方法),它将直接从这个变量列读取数据,像这样

    create or replace view schema.vw_tablename copy grants as  
    SELECT
    v:Duration::int Duration,
    v:Connectivity::string Connectivity
    ...
    from public.tablename
    

    如果您的 JSON 有一个结构数组,请在下面使用

    create or replace view schema.vw_tablename copy grants as  
    SELECT
    v:Duration::int Duration,
    v:Connectivity::string Connectivity,
    f.value:Time::int as Event_Time,
    from public.tablename,
    table(flatten(v:arrayname)) f
    

    【讨论】:

    • 如果是大尺寸的嵌套json文件怎么办?然后由于变体数据类型的大小限制,步骤 1 本身将无法进行。有什么解决方法吗?
    • 嵌套的 JSON 不是雪花的问题。你可以随心所欲。
    • 关于大小限制,我相信单个 json 最大支持 20 MB,如果 JSON 大于 20MB,我建议将 JSON 拆分为某种结构并使其更小!
    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2019-03-27
    • 2023-04-03
    • 1970-01-01
    • 2017-07-27
    • 2021-04-19
    • 2015-09-25
    相关资源
    最近更新 更多