15、Snowflake数据保护与管理全解析

Snowflake数据保护与管理全解析

1. 数据保留期变更

若要更改数据库、模式或表的数据保留期,可使用 ALTER 命令搭配 DATA_RETENTION_TIME_IN_DAYS 关键字。例如,将 SALES 数据库的保留期更改为30天,可执行以下命令:

alter database SALES set DATA_RETENTION_TIME_IN_DAYS = 30;

当更改账户、数据库或模式的数据保留期时,除非子对象已明确设置保留期,否则对象层次结构中较低级别的所有子对象将继承该保留期。当时间旅行的数据保留期到期后,数据将被转移到故障安全(Failsafe)模式。这一过程由Snowflake通过后台进程完成,可能需要一些时间。在所有数据转移到故障安全模式之前,数据仍可能在时间旅行中可用。

当父对象和子对象定义了不同的数据保留期时,在删除对象时会影响保留期的处理。例如,删除数据库时,子对象也会被删除,无论它们的保留期设置是否不同。同样,删除模式时,表也会被删除。Snowflake建议先删除子对象,这样可以单独遵循子对象的保留期,然后再删除父对象。

2. 查询历史数据

为支持时间旅行功能,Snowflake提供了 AT | BEFORE 子句作为SQL扩展,可用于 SELECT CLONE 语句。该子句使用以下参数之一来限制查询返回的历史数据:
- TIMESTAMP
- OFFSET :由当前时间戳的秒数差值定义
- STATEMENT :由语句的查询ID定义

UNDROP 命令可用于恢复已删除的表、模式和数据库,它会从时间旅行中检索对象。

以下是具体操作示例:
1. 创建数据库和模式:

create schema SALESDATA DATA_RETENTION_TIME_IN_DAYS = 1;

可根据Snowflake版本,将 DATA_RETENTION_TIME_IN_DAYS 参数值设置为最多90天。为进行时间旅行练习,建议将该值至少设置为1天。
2. 创建表:

create table NATION as
select * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION;
  1. 查询表中法国的记录:
select * from NATION where n_name = 'FRANCE';

查询结果如下表所示:
| P_NATIONKEY | N_NAME | N_REGIONKEY | N_COMMENT |
| — | — | — | — |
| 6 | FRANCE | 3 | Fulfill final requests… |
4. 更新法国记录的注释:

update NATION
set n_comment = 'Comment for France'
where n_name = 'FRANCE';

更新后再次查询法国记录:

select * from NATION where n_name = 'FRANCE';

更新后的查询结果如下表:
| P_NATIONKEY | N_NAME | N_REGIONKEY | N_COMMENT |
| — | — | — | — |
| 6 | FRANCE | 3 | Comment for France |
5. 查询更新前的历史数据:
使用 BEFORE 选项和语句参数:

select *
from NATION before(statement => '01a7-xxxx-yyyy-a166')
where n_name = 'FRANCE';

请确保在 statement 参数中使用自己通过 Copy Query ID 选项获取的查询ID。

使用 AT 选项和偏移参数查询60秒前的表数据:

select *
from NATION at(offset => -60)
where n_name = 'FRANCE';

使用 AT 选项和时间戳参数查询指定时间的表数据:

select *
from NATION at(timestamp => '2022-04-15 11:30:00'::timestamp)
where n_name = 'FRANCE';

需注意,使用时间戳参数时,要确保正确识别时区并转换为时间戳数据类型。如果 AT | BEFORE 选项中指定的时间戳、偏移量或语句参数的值超出了表的数据保留期,查询将失败并返回错误。

3. 克隆历史对象

Snowflake的数据库、模式和表可以使用 CLONE 关键字与相应的 CREATE 语句命令进行克隆。 AT | BEFORE 子句可用于指定克隆的历史时间点。

例如,克隆 NATION 表创建 NATION_HISTORICAL 表:

create table NATION_HISTORICAL
clone NATION at(timestamp => '2022-04-15 11:30:00'::timestamp);

克隆 SALESDATA 模式创建 SALESDATA_HISTORICAL 模式:

create schema SALES.SALESDATA_HISTORICAL
clone SALES.SALESDATA at(offset => -3600);

同样,也可以使用时间旅行历史中的某个时间点克隆数据库。

在以下情况下,克隆数据库或模式会失败:
- 克隆的时间点超出了要克隆对象的数据保留时间。
- 克隆的时间点早于对象创建的时间戳。

4. 删除和恢复对象

为恢复已删除的对象,Snowflake利用时间旅行功能保留对象,数据保留期用于确定对象在时间旅行中保留的时长。

删除表、模式或数据库,可使用相应的 DROP 命令。例如,删除之前创建的 NATION 表:

drop table NATION;

使用 SHOW 命令和 HISTORY 关键字查看已删除的表、模式和数据库。例如,查看 SALES 数据库和 SALESDATA 模式中已删除的表:

show tables history in SALES.SALESDATA;

该命令将返回 SALES 数据库的 SALESDATA 模式中所有当前表以及已删除表的列表。可通过输出中的 DROPPED_ON 列判断表是否已删除,该列在表被删除时有值,否则为 NULL

查看已删除的模式或数据库,可分别使用以下命令:

show schemas history in SALES;
show databases history;

SHOW TABLES 输出类似, DROPPED_ON 列包含对象被删除的日期和时间。如果对象被多次删除,每次删除都会在输出中以单独的行显示。

当对象的保留期到期且不再在时间旅行中可用时, SHOW HISTORY 命令的输出将不再包含该对象。

使用 UNDROP 命令可恢复仍在时间旅行中可用的已删除对象。例如,恢复之前删除的 NATION 表:

undrop table NATION;

恢复模式或数据库,可分别使用以下命令:

undrop schema SALESDATA;
undrop database SALES;

恢复对象时,不能将其重命名,只能以原对象名称恢复。如果删除对象后,创建了与已删除对象同名的新对象,则无法恢复之前删除的对象,必须先删除同名的新对象,然后再恢复已删除的对象。恢复对象需要具备以下权限:
- 对象的 OWNERSHIP 权限
- 在恢复对象所在的数据库或模式中的 CREATE 权限
只能在当前数据库或模式中恢复对象。

5. 故障安全(Failsafe)

故障安全模式用于在系统故障、安全漏洞或其他意外事件发生时保护历史数据。它并非时间旅行的扩展,因为用户无法访问,只有Snowflake可在极端情况下使用它来恢复数据。

时间旅行保留期结束后,数据将被转移到故障安全模式,额外保留7天,在此期间Snowflake可恢复数据。7天的故障安全期不可由用户配置或延长。

账户管理员可通过Snowsight用户界面查看账户的数据存储总量,包括时间旅行和故障安全中的数据。操作步骤如下:
1. 确保当前角色选择为 ACCOUNTADMIN
2. 点击左侧菜单中的 Admin 选项,选择 Usage
3. 在弹出窗口中,点击 All Usage Types 下拉列表,选择 Storage

6. 时间旅行和故障安全的成本

存储在时间旅行和故障安全中的历史数据会产生存储成本,Snowflake按24小时时间段计算该成本。为减少存储量,Snowflake仅存储在时间旅行和故障安全中已更改或删除的数据。只有已删除的表会完整保留,以便在需要时恢复。

与永久表相比,临时表和临时模式表可降低时间旅行和故障安全的存储成本。临时模式表的数据保留时间设置为1天时,当天会产生与时间旅行相关的数据存储成本。临时表的数据保留期设置为1天时,仅在表存在期间产生相关存储成本。需注意,临时表和临时模式表没有故障安全期。

在管理时间旅行和故障安全成本方面,Snowflake提供了以下选择表类型的指导:
- 临时表仅在创建它们的会话中存在。删除表或会话结束后,临时表不会保留在时间旅行或故障安全中,因此无法恢复。
- 临时模式表可定义时间旅行保留期,并可在此期间从时间旅行中恢复。由于没有故障安全期,时间旅行期到期后无法恢复。用于ETL过程存储中间结果的表可定义为临时模式表。
- 用户需要的表,如数据仓库的事实表和维度表,应始终通过时间旅行和故障安全进行保护,以防意外事件,因此应创建为永久表。

7. 数据加密

当Snowflake托管在AWS的安全虚拟专用云(VPC)或Azure的虚拟网络(VNet)中时,端到端加密(E2EE)可确保数据在传输到Snowflake和从Snowflake传输时不被第三方读取。在使用外部或内部阶段加载和卸载数据时,均支持E2EE。

加载数据时的情况如下:
- 从外部阶段加载:Snowflake建议使用客户端加密对云存储提供商的云存储中的数据文件进行加密。如果数据未加密,Snowflake会在将其加载到表之前对其进行加密。
- 从内部阶段加载:数据文件在加载到内部阶段之前会由Snowflake客户端自动加密,加载到阶段后也会保持加密状态。

卸载数据时的情况如下:
- 卸载到外部阶段:结果可选择使用客户端加密。
- 卸载到内部阶段:结果会由Snowflake自动加密。

8. 客户端加密

客户端加密意味着数据在加载到云存储之前就已加密。加密数据文件时,用户将用于加密的主密钥与Snowflake共享,然后用随机加密密钥对云存储中的每个文件进行加密,该随机密钥再用主密钥加密。加密文件和加密随机密钥都会上传到云存储。由于数据始终处于加密状态,云存储服务或其他第三方无法查看实际数据。

从对象存储加载客户端加密数据时,创建外部阶段时使用 MASTER_KEY 参数。该参数需要一个128位或256位的高级加密标准(AES)密钥,以Base64编码。例如,创建指向AWS存储位置并使用客户端加密的外部阶段:

create stage ENCRYPTED_EXTERNAL_STAGE
url = 's3://bucket/datafiles/'
credentials = (aws_key_id = 'xxx' aws_secret_key = 'xxx')
encryption = (master_key = 'xxx... = ');

在实际使用时,需替换为自己的AWS凭证和主密钥信息。创建外部阶段后,可使用 COPY 命令将数据加载到Snowflake表中。卸载数据时,数据文件会复制到外部阶段,并使用阶段中定义的主密钥进行加密,用户可使用支持客户端加密的客户端下载加密数据文件。

9. 密钥轮换

Snowflake中存储的所有数据默认使用强加密标准进行加密。用于加密数据的密钥会定期轮换,数据也会定期重新加密。

Snowflake以分层模型管理每个账户的密钥,该模型由四个级别组成:
- 根密钥
- 账户主密钥
- 表主密钥
- 文件密钥
这种分层密钥模型限制了每个密钥保护的数据量和使用时间。在该模型中,表主密钥加密单个表,文件密钥加密单个文件。密钥轮换确保密钥仅在有限时间内有效。

Snowflake会轮换超过30天的密钥,将其停用并创建新密钥。密钥激活时用于加密数据,停用后仅用于解密数据。当不再需要解密数据时,停用的密钥将被销毁。

10. 定期重新密钥

定期重新密钥功能仅在Snowflake企业版或更高版本中可用。与密钥轮换不同,密钥轮换中停用的密钥仍用于解密数据,而定期重新密钥可确保密钥定期销毁,所有由被销毁密钥加密的数据将使用新密钥重新加密。

在账户中启用定期重新密钥时,Snowflake会为超过1年的每个密钥创建新的加密密钥,重新加密之前密钥保护的数据,并销毁之前的密钥。由于数据使用新密钥重新加密,后续将使用该新密钥解密数据。

具有 ACCOUNTADMIN 角色的用户可使用 ALTER ACCOUNT 命令和 PERIODIC_DATA_REKEYING 关键字启用重新密钥功能:

alter account set PERIODIC_DATA_REKEYING = true;

定期重新密钥是Snowflake的后台进程,不会影响任何用户工作负载,即使在数据重新密钥时也是如此。

11. 客户管理密钥

Snowflake客户可在其Snowflake账户所在的云提供商中管理自己的客户管理密钥。每个云提供商都提供了自己的密钥管理服务:
- AWS:AWS密钥管理服务(KMS)
- Google Cloud:云密钥管理服务(Cloud KMS)
- Microsoft Azure:Azure密钥保管库

Snowflake提供了名为Tri-Secret Secure的功能,可通过将客户管理密钥与Snowflake管理的密钥组合创建复合主密钥。

客户选择维护客户管理密钥的原因包括:
- 访问控制:客户对其主密钥拥有完全控制权,如果密钥不与Snowflake共享,则无法访问数据。
- 禁用访问:客户可随时禁用对其主密钥的访问,从而禁用对Snowflake中数据的访问。这在安全事件发生时,需要立即禁用数据访问时特别有用。

Snowflake建议不要定期轮换客户管理密钥,因为密钥更改时可能无法解密数据。使用客户管理密钥时,必须根据与机密性、完整性和可用性相关的最佳实践保护密钥。如果客户管理密钥因任何原因对Snowflake无效或不可用,所有数据操作将暂停,直到密钥再次可用。Snowflake允许因常见问题(如网络通信故障)导致的最长10分钟的临时密钥不可用情况。10分钟后,Snowflake认为密钥不可用并停止数据操作,提供密钥后操作将恢复。

12. Tri-Secret Secure

Tri-Secret Secure功能在Snowflake业务关键版及更高版本中可用。其目的是通过将Snowflake维护的密钥与客户管理的密钥组合创建复合主密钥,保护Snowflake中的数据。该密钥位于密钥层次结构的顶层,不用于加密数据。

Tri-Secret Secure确保只有当客户管理密钥对Snowflake可用时,才能解密数据。要在账户中启用Snowflake Tri-Secret Secure,必须联系Snowflake支持。

13. 克隆

Snowflake的零复制克隆功能允许创建对象的副本,而无需实际创建对象的物理副本,因为两个对象最初共享相同的底层存储。

克隆表时,克隆表与原始表共享所有微分区,这意味着克隆表不会产生额外的存储成本。初始克隆后,原始表和克隆表遵循不同的数据生命周期,可独立在克隆表或原始表中插入、删除或更新数据。克隆表中的数据发生更改时,会创建仅由克隆表拥有的新微分区,这些新微分区会产生额外成本,因为它们不与原始表共享。

克隆可以无限次进行,没有创建克隆的数量或迭代次数限制。克隆主要用于创建数据库、模式和表的零复制克隆,也可用于创建克隆对象中包含的其他模式对象,如外部阶段、文件格式和序列的克隆。

克隆数据库或模式时,授予的权限继承规则如下:
- 克隆对象继承源对象中所有子对象克隆上授予的所有权限。
- 数据库或模式本身的克隆不继承源数据库或模式上授予的权限。

克隆命令不会将源对象上的授予权限复制到克隆对象,但支持 COPY GRANTS 子句的 CREATE 命令(如 CREATE TABLE CREATE VIEW )允许将授予权限复制到对象克隆。例如,克隆 NATION 表并复制授予权限创建 NATION_CLONED 表:

create table NATION_CLONED clone NATION COPY GRANTS;

克隆父容器时,关于克隆容器内子对象类型的一些注意事项如下:
- 对象参数:克隆对象继承源对象上设置的对象参数。
- 默认序列:克隆使用序列生成唯一值的表列时,如果包含表和序列的数据库或模式被克隆,克隆表将引用克隆的序列,否则引用源序列。
- 外键约束:克隆具有引用另一个表中主键的外键约束的表时,如果包含两个表的数据库或模式被克隆,具有外键的克隆表将引用克隆表中的主键,否则引用原始表中的主键。
- 聚类键:克隆具有聚类键的表时,新表将使用相同的聚类键创建。克隆后自动聚类将暂停,需要手动恢复。
- 外部阶段:外部命名阶段可以克隆。
- 内部阶段:内部命名阶段不能克隆。
- 管道:引用内部阶段的管道不能克隆。引用外部阶段的管道会被克隆,但克隆后需要手动恢复。

Snowflake数据保护与管理全解析

14. 总结与操作建议

为了更清晰地展示Snowflake数据保护与管理的关键要点,以下是一个总结表格:
| 功能 | 描述 | 操作命令示例 | 注意事项 |
| — | — | — | — |
| 数据保留期变更 | 更改数据库、模式或表的数据保留期 | alter database SALES set DATA_RETENTION_TIME_IN_DAYS = 30; | 子对象可能继承保留期,删除对象时建议先删子对象 |
| 查询历史数据 | 使用 AT | BEFORE 子句查询历史数据 | select * from NATION before(statement => '01a7-xxxx-yyyy-a166') where n_name = 'FRANCE'; | 注意参数值不能超出数据保留期 |
| 克隆历史对象 | 使用 CLONE 关键字克隆对象 | create table NATION_HISTORICAL clone NATION at(timestamp => '2022-04-15 11:30:00'::timestamp); | 克隆时间点有要求,可能失败 |
| 删除和恢复对象 | 使用 DROP 删除对象, UNDROP 恢复对象 | drop table NATION; undrop table NATION; | 恢复时不能重命名,需特定权限 |
| 故障安全(Failsafe) | 保护历史数据,用户不可访问 | 无直接操作命令,数据自动转移 | 7天保留期不可配置 |
| 时间旅行和故障安全成本 | 存储历史数据产生成本 | 无直接操作命令,按24小时计算 | 可选择合适表类型降低成本 |
| 数据加密 | 端到端加密确保数据安全 | 无直接操作命令,加载卸载自动处理 | 不同阶段加密方式不同 |
| 客户端加密 | 数据加载前加密 | create stage ENCRYPTED_EXTERNAL_STAGE url = 's3://bucket/datafiles/' credentials = (aws_key_id = 'xxx' aws_secret_key = 'xxx') encryption = (master_key = 'xxx... = '); | 需提供正确主密钥 |
| 密钥轮换 | 定期轮换加密密钥 | 无直接操作命令,Snowflake自动处理 | 超过30天的密钥会轮换 |
| 定期重新密钥 | 仅企业版及以上可用,定期销毁密钥 | alter account set PERIODIC_DATA_REKEYING = true; | 后台进程不影响用户工作负载 |
| 客户管理密钥 | 客户管理自己的密钥 | 无直接操作命令,使用云提供商服务 | 建议不常轮换,确保密钥可用性 |
| Tri - Secret Secure | 组合密钥保护数据 | 联系Snowflake支持启用 | 仅业务关键版及以上可用 |
| 克隆 | 零复制克隆对象 | create table NATION_CLONED clone NATION COPY GRANTS; | 权限继承有规则,子对象克隆有注意事项 |

以下是一个mermaid格式的流程图,展示了数据从创建到可能的删除、恢复以及加密保护的整个生命周期:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(创建对象):::process --> B(数据操作):::process
    B --> C{是否删除对象}:::process
    C -->|是| D(对象进入时间旅行):::process
    D --> E{时间旅行保留期结束}:::process
    E -->|是| F(数据进入故障安全):::process
    F --> G(故障安全7天结束):::process
    G --> H(数据永久删除):::process
    C -->|否| I(继续数据操作):::process
    D --> J{是否恢复对象}:::process
    J -->|是| K(使用UNDROP恢复):::process
    K --> B
    A --> L(数据加密):::process
    L --> M(端到端加密):::process
    M --> N(客户端加密):::process
    M --> O(密钥轮换):::process
    M --> P(定期重新密钥):::process
    O --> Q(分层密钥管理):::process

操作建议

  • 数据保留期管理 :根据业务需求合理设置数据保留期,对于重要数据可适当延长保留期。删除对象时,按照先子后父的顺序操作,避免数据意外丢失。
  • 历史数据查询 :在进行历史数据查询时,准确记录查询ID和时间戳,确保查询参数在数据保留期内。
  • 克隆操作 :克隆对象前,确认克隆时间点符合要求,避免克隆失败。对于需要保留权限的对象,使用 COPY GRANTS 子句。
  • 成本控制 :根据数据的重要性和使用频率,选择合适的表类型(临时表、临时模式表或永久表)来降低存储成本。
  • 加密与密钥管理 :遵循最佳实践保护客户管理密钥,确保其可用性。对于企业版及以上用户,可考虑启用定期重新密钥功能,增强数据安全性。

通过以上对Snowflake数据保护与管理的全面解析,我们可以更好地利用Snowflake的各项功能,保障数据的安全性、可用性和可管理性,同时有效控制成本。在实际应用中,根据具体业务场景灵活运用这些功能和操作建议,将有助于提升数据管理的效率和质量。

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化训练,到执行分类及结果优化的完整流程,并介绍了精度评价通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置结果后处理环节,充分利用ENVI Modeler进行自动化建模参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的渠道策略效果评估体系,涵盖当前企业传播面临的预算、资源、内容效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理舆情应对的流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放GEO优化,提升品牌在AI搜索中的权威性可见性;④通过数据驱动评估体系量化品牌影响力销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析工具指南进行系统学习,重点关注媒体适配性策略GEO评估指标,在实际发稿中分阶段试点“AI+渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值