【问题标题】:How to insert a row into snowflake table that have a field with a type VARIANT?如何将行插入到具有 VARIANT 类型字段的雪花表中?
【发布时间】:2020-11-18 08:42:09
【问题描述】:

我正在尝试将一行插入到具有以下结构的雪花表中:

CREATE TABLE dataSources  (
  dataSources_id integer,   
  sourceName varchar (100),
  sourceData VARIANT, 
  created_at timestamp
);

我需要在 sourceData 字段中插入一个 json 文件以及有关源本身的其他信息:

INSERT INTO dataSources (dataSources_id, sourceName, sourceData, created_at)
VALUES (1, 'Source 1', ..., '2020-11-18 00:00:00')

sourceData 字段是一个变体,我需要在其中放入一个 JSON 文件以与其他数据一起上传。

我尝试使用:

PUT C://path/file.json @internal_stage

我有一个错误:

PUT 无法识别

我尝试将其直接添加到查询中:

INSERT INTO dataSources (dataSources_id, sourceName, sourceData, created_at)
VALUES (1, 'Source 1', PUT C://path/file.json @internal_stage, '2020-11-18 00:00:00')

但由于 SQL 语法错误,它无法正常工作。

【问题讨论】:

    标签: sql cloud snowflake-cloud-data-platform variant


    【解决方案1】:

    PUT 是一个 SnowSQL 命令,您还不能通过 Web UI 运行它:

    https://docs.snowflake.com/en/user-guide/snowsql-use.html

    将文件放入@internal_stage后,可以使用COPY命令:

    COPY INTO dataSources (dataSources_id, sourceName, sourceData, created_at) 
    FROM (SELECT 1, 'Source 1', $1, '2020-11-18 00:00:00'
    FROM @internal_stage ) FILE_FORMAT=(TYPE=JSON);
    

    https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html

    如果 JSON 内容不在文件中,您也可以使用此查询插入该行:

    INSERT INTO dataSources (dataSources_id, sourceName, sourceData, created_at) 
    SELECT 1, 'Source 1', parse_json('{ "name":"test","age":20 }'), '2020-11-18 00:00:00'; 
    

    【讨论】:

    • 问题是我无法将 JSON 文件放入舞台
    • 您需要使用 SnowSQL 将文件放入(上传)到 stage。我分享了 snowsql 的链接——它是一个可以在您自己的笔记本电脑上运行的 CLI 工具。请尝试一下
    • 还有一件事,我正在尝试使用 snowsql.exe -a myaccount -u myuser -p mypassword 运行 snowSQL,但它返回 -p 未正确定义
    • 不熟悉windows版本,但我看到,-p表示端口,它已被弃用docs.snowflake.com/en/user-guide/…
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2021-05-27
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多