主键约束,将表从本地数据库迁移到雪花,为JSON列推荐数据类型?

时间:2020-01-11 00:04:24

标签: snowflake-cloud-data-platform

我可以按照什么顺序将数据复制到两个不同的表中,以符合我在本地创建的表约束?

我从文档中创建了一个示例,但希望获得有关如何通过选择正确的类型来优化存储数据的建议。

我创建了两个表,一个表是名称列表,第二个表是名称列表,上面列出了他们做某事的日期。

create or replace table name_key (
    id integer not null,
    id_sub integer not null,
    constraint pkey_1 primary key (id, id_sub) not enforced,
    name varchar
    );
create or replace table recipts (
    col_a integer not null,
    col_b integer not null,
    constraint fkey_1 foreign key (col_a, col_b) references name_key (id, id_sub) not enforced,
    recipt_date datetime,
    did_stuff variant
    );

Insert into name_key values (0, 0, 'Geinie'), (1, 1, 'Greg'), (2,2, 'Alex'), (3,3, 'Willow'); 
Insert into recipts values(0,0, Current_date()), (1,1, Current_date()), (2,2, Current_date()), (3,3, Current_date());

Select * from name_key;
Select * from recipts;

Select * from name_key
join recipts on name_key.id = recipts.col_a
where id = 0 or col_b = 2;

我读到:https://docs.snowflake.net/manuals/user-guide/table-considerations.html#storing-semi-structured-data-in-a-variant-column-vs-flattening-the-nested-structure,建议将时间戳从字符串更改为变体。我没有包括第四列,我将其留空以备将来使用。本质上,它以json格式捕获数据,因此我将其制成了变体。重新考虑此表结构以平整变量列会更好吗?

我也想将密钥更改为AUTO_INCRDEMENT,Snowflake中是否有类似的东西?

1 个答案:

答案 0 :(得分:2)

我可以按照什么顺序将数据复制到两个不同的表中,以符合我在本地创建的表约束?

您需要提供有关约束的更多上下文,但是您可以控制复制语句的顺序。对于外键,通常要在执行引用的表之前加载被引用的表。

建议将时间戳从字符串更改为变体。

我认为您误读了该文档。建议将值从变量列提取到自己的单独列(在本例中为时间戳列),尤其是如果这些列是字符串中的日期和时间,数组和数字。

将时间戳列转换为变体正是我们所建议的。

重新考虑此表结构以平整变量列会更好吗?

仔细考虑一下正在使用半结构化数据的情况并进行性能测试绝对是一件好事,但是如果没有有关特定情况和数据的更多信息,这很难说。

我也想将密钥更改为AUTO_INCRDEMENT,雪花中有类似的东西吗?

是的,雪花有一个Auto_increment feature。尽管我听说working with COPY INTO Statements

有问题