Ceph Snowflake 集成

Daniel Parkes, Anthony D'Atri (IBM)

Ceph Snowflake 集成

云和本地环境下的数据挑战

企业集成来自多个来源的数据集,以获得宝贵的业务洞察。传统的分析基础设施通常依赖于专用硬件,这可能导致数据孤岛、缺乏可扩展性以及随着时间的推移成本不断上升。

公共云端 SaaS 环境中现代分析架构的兴起有助于克服许多限制,从而实现高效运营并能够动态适应不断变化的工作负载需求,而不会影响性能。

然而,尽管取得了这些进展,并非所有组织都能切实完全迁移到云环境。存在多个关键原因需要保留本地数据,例如法规遵从性、安全问题、延迟和成本考虑因素。

因此,许多组织正在探索混合云架构的优势,使他们来自本地对象式数据湖环境的数据集可用于云 SaaS 数据平台,包括 Snowflake。

Snowflake 和 Ceph 的混合云解决方案

Snowflake 是一种基于云的数据平台,它通过允许对大量数据进行受管访问以进行协作和分析来增强数据驱动的洞察。凭借其对 S3 API 的原生支持,它可以统一各种数据源并与包括 Ceph 在内的本地解决方案无缝集成。这种集成使 Snowflake 能够利用 Ceph 强大且可扩展的存储能力,有效地将云数据仓库功能引入本地环境,同时确保全面的数据控制和安全性。

Ceph 是开源的、软件定义的,运行在行业标准硬件上,并且在对象存储的通用语言 AWS S3 API 方面拥有最佳的覆盖范围。Ceph 从一开始就被设计为对象存储,与将 S3 API 服务器添加到分布式文件系统的方法形成对比。使用 Ceph,数据放置是通过算法而不是通过查找来完成的。这使得 Ceph 即使在适度大小的集群上也能很好地扩展到数十亿个对象。存储在 Ceph 中的数据使用高效的擦除编码、飞行中和静态校验和、加密以及周密集成的企业身份系统进行保护。Ceph 是建立安全优先的混合云数据湖环境的 Snowflake 的完美补充。

Ceph 是 Snowflake 支持的 S3 兼容存储解决方案。使用 Ceph 的 S3 兼容 API,企业可以配置 Snowflake 以通过外部 S3 阶段或外部 S3 表访问存储在 Ceph 上的数据,从而实现高效查询,而无需将数据迁移到云端或从云端迁移数据。

Ceph 对象存储:数据湖的理想平台

Ceph 对象存储是创建数据湖或湖仓的理想平台,具有关键优势

  • 成本效益:Ceph 使用商品硬件和开源软件来降低初始基础设施成本,并能够随着时间的推移进行增量和演进式升级和扩展,而无需进行大规模改造或停机时间。

  • 高可扩展性:Ceph 允许水平扩展以适应数据湖或湖仓中不断增长的大量数据。

  • 高灵活性:Ceph 可以处理各种数据类型,包括结构化、半结构化和非结构化数据,包括文本、图像、视频和传感器数据,使其用途广泛且适合数据湖。

  • 高可用性:Ceph 旨在为存储在数据湖或湖仓中的信息提供持久性和可靠性。即使在硬件故障或网络中断的情况下,数据始终可用。Ceph 在多个地理位置提供数据复制,从而提供冗余和容错能力,以防止数据丢失。

  • 高性能:Ceph 通过与数据分析框架集成,实现并行数据访问和处理,从而为数据湖或湖仓中的数据摄取和处理提供高吞吐量和低延迟。Ceph 对象还提供缓存数据加速器 (D3N) 和使用 S3 Select 进行查询下推。

  • 数据治理:Ceph 提供高效的元数据管理,以执行数据治理策略、跟踪数据血缘、监控数据使用情况,并提供有关存储在数据湖中的数据的宝贵信息,包括格式和数据源。

  • 安全性:Ceph 具有广泛的安全功能:静态加密和传输中加密、外部身份集成、安全令牌服务、IAM 角色/策略、每个对象的细粒度授权、对象锁定、版本控制和 MFA 删除。

将驻留在本地 Ceph 上的 S3 上的数据连接到 Snowflake 的示例

从 Snowflake 访问外部 S3 对象存储的最常见方法是创建一个 外部阶段,然后使用该阶段将数据复制到 Snowflake 或使用 n 外部表直接访问它。

接下来,我们将提供两个简单的示例供参考,使用本地 Ceph 集群:

我们的 Ceph 集群配置了一个 S3 对象网关,地址为 s3.cephlabs.blue,并且我们有一个名为 ecommtrans 的存储桶,其中包含一个名为 transactions 的 CSV 格式的文件。

$ aws s3 ls s3://ecommtrans/transactions/                                       
2024-06-04 11:33:54   13096729 transaction_data_20240604112945.csv

CSV 文件格式如下

client_id,transaction_id,item_id,transaction_date,country,customer_type,item_description,category,quantity,total_amount,marketing_campaign,returned
799315,f47b56a5-2392-4d7c-a3fe-fad18c8b0901,a06210e5-217f-4c3d-8ab9-06e1d8f605e2,2024-03-17 20:35:26,DK,Returning,Smartwatch,Electronics,3,1790.2,,False
858067,9351638c-9d23-4d32-9218-69bbba6b258d,858aa970-9a95-4c99-8b64-d783129dd5cb,2024-02-13 16:18:42,ES,New,Dress,Clothing,4,196.96,,False
528665,7cc494c8-a19d-4771-9686-989d7dfa4c96,0bb7529b-59e8-4d15-adb8-c224b7d7d5b9,2024-03-04 

示例 1. 从 Ceph 提供的 S3 外部阶段复制数据

在 Snowflake UI 中,我们打开一个新的 SQL 工作表并运行以下 SQL 代码

CREATE OR REPLACE TABLE onprem_database_ingest.raw.transactions
(
  client_id VARCHAR(16777216),
  transaction_id VARCHAR(16777216),
  item_id VARCHAR(16777216),
  transaction_date TIMESTAMP_NTZ(9),
  country VARCHAR(16777216),
  customer_type VARCHAR(16777216),
  item_description VARCHAR(16777216),
  category VARCHAR(16777216),
  quantity NUMBER(38,0),
  total_amount NUMBER(38,0),
  marketing_campaign VARCHAR(16777216),
  returned BOOLEAN
);

LIST @CEPH_INGEST_STAGE/transactions/;

---> copy the Menu file into the Menu table

COPY INTO onprem_database_ingest.raw.transactions
FROM @CEPH_INGEST_STAGE/transactions/;

-- Sample query to verify the setup

SELECT * FROM onprem_database_ingest.raw.transactions
LIMIT 10;~

示例 2. 从 Ceph 提供的 S3 外部阶段创建外部表

在 Snowflake UI 中,我们打开一个新的 SQL 工作表并运行以下 SQL 代码

transactions/;

-- Create the External Table with defining expressions for each column

CREATE OR REPLACE EXTERNAL TABLE onprem_database_ingest_trans.raw.trans_external
(
  client_id STRING AS (VALUE:"c1"::STRING),
  transaction_id STRING AS (VALUE:"c2"::STRING),
  item_id STRING AS (VALUE:"c3"::STRING),
  transaction_date TIMESTAMP AS (VALUE:"c4"::TIMESTAMP),
  country STRING AS (VALUE:"c5"::STRING),
  customer_type STRING AS (VALUE:"c6"::STRING),
  item_description STRING AS (VALUE:"c7"::STRING),
  category STRING AS (VALUE:"c8"::STRING),
  quantity NUMBER AS (VALUE:"c9"::NUMBER),
  total_amount NUMBER AS (VALUE:"c10"::NUMBER),
  marketing_campaign STRING AS (VALUE:"c11"::STRING),
  returned BOOLEAN AS (VALUE:"c12"::BOOLEAN)
)

LOCATION = @CEPH_INGEST_STAGE_TRANS/transactions/
FILE_FORMAT = (TYPE = 'CSV' FIELD_OPTIONALLY_ENCLOSED_BY = '"' SKIP_HEADER = 1 FIELD_DELIMITER = ',' NULL_IF = (''))
REFRESH_ON_CREATE = FALSE
AUTO_REFRESH = FALSE
PATTERN = '.*.csv';

-- Refresh the metadata for the external table

ALTER EXTERNAL TABLE onprem_database_ingest_trans.raw.trans_external REFRESH;

-- Sample query to verify the setup

SELECT * FROM onprem_database_ingest_trans.raw.trans_external

LIMIT 10;~

结束语

混合云架构越来越受欢迎,它结合了包括 Ceph 在内的本地解决方案和包括 Snowflake 在内的基于云的 SaaS 平台。Ceph 现在得到 Snowflake 的支持,作为 S3 兼容的存储,可以访问本地数据湖数据集,从而增强 Snowflake 的数据仓库功能。这种集成建立了一个安全、可扩展、经济高效的混合数据湖环境。

作者感谢 IBM 对社区的支持,为我们提供时间来创建这些帖子。