我在 MySQL aurora 中有一个表,我需要迁移到 Snowflake 。表的大小为 6 TB,有 30 亿行。对于我们的应用程序,90% 的时间我们使用基于OBJ_ID返回 100 到 1000 条记录的查询。
Snowflake 中的 DDL 类似于 MySQL
create or replace table app_event (
ID varchar(36) not null primary key,
VERSION number,
ACT_TYPE varchar(255),
EVE_TYPE varchar(255),
CLI_ID varchar(36),
DETAILS variant,
OBJ_TYPE varchar(255),
DATE_TIME timestamp,
AAPP_EVENT_TO_UTC_DT timestamp,
GRO_ID varchar(36),
OBJECT_NAME varchar(255),
OBJ_ID varchar(255),
USER_NAME varchar(255),
USER_ID varchar(255),
EVENT_ID varchar(255),
FINDINGS varchar(255),
SUMMARY variant
);
我们正在从 MySQL 迁移到 Snowflake,因为我们需要执行分析和聚合查询,而 MySQL 在这方面做得很好,因此我们正在考虑为此目的迁移到 Snowflake。
很难以如此巨大的增长来维持一个 6 TB 的 MySQL,这就是为什么我们正在考虑通过分析和聚合将一些用例扩展到 Snowflake。
所以计划是将最近 2 年的数据保存到 MySQL 中,并将完整的数据子集保存到 Snowflake 中。
我们可以这样做,但对于某些用例,我们需要导出一些报告以供需要完整数据和查询的用途使用,例如
select * from table where OBJ_ID ='1234'
现在的问题是对于 6 TB 表 30 亿行,Snowflake 对此类查询表现良好吗?1 秒 - 3 秒的延迟很好。
为了获得这种性能,我需要使用聚类或搜索优化
我在 OBJ_ID 列中有按时间顺序排列的 UUID,并且该表中将有数百万个不同的 OBJ_ID。
我应该通过 OBJ_ID 创建表簇吗?
对于这种用例,我们有什么方法可以让 Snowflake 更快地工作吗?
我们可以使用散列码进行聚类并仅创建基于 NTILE 或 NTILE 的分组吗?
我们计划用 2 亿个数据做 POC,但是可以吗,还是我们需要用完整的数据集进行测试?
如果我们将雪花用于这种用例,成本会更高吗?
注意:这是一个单独的表,与任何其他表没有关系
测试一: 我们已经加载了 1.5 亿行基于 OBJ_ID 的选择,它返回 400 行需要 3 秒,当我们执行相同的查询时需要 200 毫秒。
它说分区总数 350 分区扫描 250
之后我们通过 OBJ_ID 更改表并使用集群,但结果相同。
我们不知道 CLUSTER 是否工作,但我们在这里没有获得任何性能提升
我们能让他更快吗?