Directory Table
自 v1.5.3 版本起,Apache Cloudberry 引入了 Directory Table,用于统一纳管对象存储上的非结构化数据。
在大模型 AI 快速发展的背景下,AI 应用催生出了管理非结构化多模态语料数据的需求。需要持续准备大量非结构化的高质量精选语料、数据 迭代训练大模型,以及归纳丰富的知识库。因此,在结构化语料数据管理与语料加工方面,面临技术挑战。
面对这些技术挑战,Apache Cloudberry 定义了一种 Directory Table 表,用于纳管多种类型的非结构化数据。开发者用户只需使用简单的 SQL 语句就能调用各种计算引擎的能力,实现一站式数据加工和应用开发。
Directory Table 定位于存储、管理和分析非结构化数据对象。Directory Table 位于表空间中,将非结构化数据文件导入 Directory Table 后,会在 Directory Table 上创建一条记录,即该文件的元数据信息,而文件本身则加载进对象存储中。表上的元数据与对象存储上的对应文件相关联。
使用说明
创建 Directory Table
你可以在本地存储的表空间中创建 Directory Table,也可以在外部存储(如对象存储服务或 HDFS 等分布式文件系统)的表空间中创建 Directory Table。
在本地存储中创建
在本地存储创建 Directory Table 的语法如下。你需要将 <table_name>
和 <tablespace_name>
替换为实际的表名和表空间名。
-- 方法一:不指定表空间,即在已有的默认表空间中创建 Directory Table。
CREATE DIRECTORY TABLE <table_name>;
-- 方法二:先创建表空间,再在表空间中创建 Directory Table。
CREATE TABLESPACE <tablespace_name>
LOCATION '<tablespace_path>';
CREATE DIRECTORY TABLE <table_name>
TABLESPACE <tablespace_name>;
在外部存储中创建
要在外部存储中创建 Directory Table,你需要先在外部存储中创建表空间。你需要提供访问外部存储服务器所需要的连接信息,包括服务器的 IP 地址、协议、访问密钥等。以下示例展示如何在青云对象存储和 HDFS 上创建 Directory Table。
-
创建服务器对象,并定义外部数据源的连接方式。Apache Cloudberry 支持多种存储的协议,包括 S3 对象存储 和 HDFS。以下示例分别在青云和 HDFS 上创建了名为
oss_server
和hdfs_server
的服务器对象。-
青云:
CREATE STORAGE SERVER oss_server OPTIONS(protocol 'qingstor', prefix '<路径前缀>', endpoint '<终端地址>', https 'true', virtual_host 'false');
-
HDFS:
CREATE STORAGE SERVER hdfs_server OPTIONS(protocol 'hdfs', namenode '<HDFS 节点 IP:端口>', https 'false');
以上命令中涉及的参数如下:
protocol
:用于连接外部数据源的协议。在上面示例中,'qingstor'
表示使用青云对象存储服务的协议,'hdfs'
表示使用 HDFS 存储服务协议。prefix
:设置访问对象存储时的路径前缀。设置了该前缀,表明所有操作都将限定在这个特定的路径下,例如prefix '/rose-oss-test4/usf1'
。这通常用于组织和隔离存储在同一存储桶中的数据。endpoint
:指定外部对象存储服务的网络地址。例如,'pek3b.qingstor.com'
是青云服务的一个特定区域节点。通过这个端点,Apache Cloudberry 可以访问外部数据。https
:指定是否通过 HTTPS 协议连接到对象存储服务。在此命令中,'false'
表示使用非加密的 HTTP 连接。这个设置可能受到数据传输安全要求的影响,通常推荐使用 HTTPS 来确保数据安全。virtual_host
:确定是否使用虚拟主机方式访问存储桶。'false'
意味着不使用虚拟主机样式的桶访问(即,URL 中不包括存储桶名称)。这个选项通常取决于存储服务提供商的 URL 格式支持。namenode
:表示 HDFS 节点的 IP。你需要将<HDFS 节点 IP:端口>
替换为实际的 IP 地址和端口号,例如'192.168.51.106:8020'
。
-
-
创建用户映射,为当前用户提供访问这些外部服务器所需的认证信息。
-
青云:
CREATE STORAGE USER MAPPING FOR CURRENT_USER STORAGE SERVER oss_server OPTIONS (accesskey '<青云的 accesskey 密钥>', secretkey '<青云的 secretkey 密钥>');
-
HDFS:
CREATE STORAGE USER MAPPING FOR CURRENT_USER STORAGE SERVER hdfs_server OPTIONS (auth_method 'simple');
以上命令中涉及的参数如下:
accesskey
和secretkey
:这两个参数提供必要的认证 信息。'accesskey'
和'secretkey'
类似于用户名和密码,用于访问对象存储服务。auth_method
:表示访问 HDFS 的认证模式。simple
表示简单认证模式,kerberos
表示使用 Kerberos 认证模式。
-
-
在外部服务器上创建表空间。这些表空间特定地链接到了前面定义的外部服务器,表空间的
location
选项指向了外部存储上的特定路径。以下示例分别在青云和 HDFS 上创建表空间dir_oss
和dir_hdfs
。-
青云:
CREATE TABLESPACE dir_oss location '<对象存储上的表空间路径>' SERVER oss_server HANDLER '$libdir/dfs_tablespace, remote_file_handler';
-- 你需要将 <对象存储上 的表空间路径> 替换为实际的路径,例如 /tbs-49560-0-mgq-multi/oss-server-01-17。 -
HDFS:
CREATE TABLESPACE dir_hdfs location '<对象存储上的表空间路径>' SERVER hdfs_server HANDLER '$libdir/dfs_tablespace, remote_file_handler';
-- 你需要将 <对象存储上的表空间路径> 替换为实际的路径,例如 /tbs-49560-0-mgq-multi/oss-server-01-17。
-
-
在表空间中创建 Directory Table。以下语句分别在表空间
dir_oss
和dir_hdfs
中创建了 Directory Tabledir_table_oss
和dir_table_hdfs
。CREATE DIRECTORY TABLE dir_table_oss TABLESPACE dir_oss;
CREATE DIRECTORY TABLE dir_table_hdfs TABLESPACE dir_hdfs;提示如果你在创建表空间时,遇到
directory ... does not exist
的报错,你需要为集群配置shared_preload_libraries
并导入到对象存储。例如先执行gpconfig -c shared_preload_libraries -v 'dfs_tablespace'
,再执行gpstop -ra
重启集群。