首页 > 解决方案 > 是否可以选择在雪花表上强制分区

问题描述

我想看看在雪花表上创建分区并强制最终用户在查询中使用它们。目的是防止对大表进行意外的大查询

那可能吗?

标签: snowflake-cloud-data-platform

解决方案


不,您不能在 Snowflake 中手动创建分区,Snowflake 中的微分区是根据数据到达的时间而不是数据包含的内容自动创建的。但是,您可以使用集群键对微分区内和跨微分区的数据进行排序,这将有助于在执行查询时删除分区。

您可以通过使用 BI 工具或通过使用 SQL 变量参数化您的(安全?)视图并限制对基础表的访问来强制用户对其查询进行谓词。显然,这意味着您的用户需要以某种方式正确设置他们的会话变量,在我看来可能有点过于严格,但这里有一个例子:

-- Set variable before creating the view
set predicate_var = 'Mid Atlantic';

-- Create view using parameter in the where condition
create or replace view test_db.public.parameterised_view as 
select 
    * 
from "SAMPLE_DATA"."TPCDS_SF100TCL"."CALL_CENTER" 
where CC_NAME = $predicate_var;

-- Select from the view. Only records with 'Mid Atlantic' are returned
select CC_CALL_CENTER_SK, CC_NAME from test_db.public.parameterised_view;
--Results:
--|-------------------+--------------|
--| CC_CALL_CENTER_SK | CC_NAME      |
--|-------------------+--------------|
--|                 2 | Mid Atlantic |
--|                 3 | Mid Atlantic |
--|-------------------+--------------|

-- Change the var to something different to prove it works
set predicate_var = 'NY Metro';

-- Select from the view to show that the predicate has changed
select CC_CALL_CENTER_SK, CC_NAME from test_db.public.parameterised_view;
--Results:
--|-------------------+----------|
--| CC_CALL_CENTER_SK | CC_NAME  |
--|-------------------+----------|
--|                 1 | NY Metro |
--|-------------------+----------|


推荐阅读