首页 > 解决方案 > 主键约束、表从本地数据库迁移到雪花、json 列的推荐数据类型?

问题描述

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

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

我创建了两个表,一个是姓名列表,第二个是姓名列表,其中包含他们做某事的日期。

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 中是否有类似的东西?

标签: snowflake-cloud-data-platform

解决方案


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

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

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

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

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

重新考虑这个表结构以展平变体列会更好吗?

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

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

是的,Snowflake 有一个Auto_increment 功能。虽然我听说这与使用 COPY INTO 语句有一些问题


推荐阅读