【问题标题】:Update name in Snowflake variant column更新雪花变体列中的名称
【发布时间】:2021-12-08 00:57:04
【问题描述】:

我已将一些 json 文件从舞台复制到 Snowflake 中,并且我有一个包含连字符的属性名称。

当我尝试查询此属性名称时(如下所示),我收到此错误。

select my_variant:test-id from mytable; 

SQL compilation error: error line 1 at position 44 invalid identifier 'ID'. 

我认为它不喜欢连字符。有什么方法可以在我的变体列中重命名这个连字符的名称,这样我就不会收到错误消息?

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    您只需要在变体中引用列名:

    select my_variant:"test-id" from mytable; 
    

    如果您想更新它,请参见下文。它假定您每行都有一个键,以便我们可以将其聚合回来以在行级别重建变体。

    设置测试表:

    create or replace table test (k int, a variant);
    
    insert into test 
    select 1, parse_json('{"test-id": 1, "test-id2": "2"}')
    union all
    select 2, parse_json('{"test-1": 1, "test-2": "2"}');
    
    select * from test;
    
    +---+-------------------+
    | K | A                 |
    |---+-------------------|
    | 1 | {                 |
    |   |   "test_id": 1,   |
    |   |   "test_id2": "2" |
    |   | }                 |
    | 2 | {                 |
    |   |   "test_1": 1,    |
    |   |   "test_2": "2"   |
    |   | }                 |
    +---+-------------------+
    

    更新表格:

    update test t
    set t.a = b.value
    from (
        with t as (
            select
                k,
                replace(f.key, '-', '_') as key,
                f.value as value
            from test,
            lateral flatten(a) f
        )
        select 
            k, object_agg(key, value) as value
        from t
        group by k
    ) b
    where t.k = b.k
    ;
    
    select * from test;
    
    +---+-------------------+
    | K | A                 |
    |---+-------------------|
    | 1 | {                 |
    |   |   "test_id": 1,   |
    |   |   "test_id2": "2" |
    |   | }                 |
    | 2 | {                 |
    |   |   "test_1": 1,    |
    |   |   "test_2": "2"   |
    |   | }                 |
    +---+-------------------+
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2021-07-17
    • 2020-08-27
    • 2021-06-04
    • 1970-01-01
    • 2022-06-19
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多