DuckDB:Catalog、Schema、Table 数据组织结构简介

在这里插入图片描述

在 DuckDB 中,数据的组织结构遵循传统的数据库层次结构,包括 Catalog(目录)、Schema(模式)和 Table(表)。以下是对这些概念的详细解释,以及如何在 DuckDB 中使用它们。


1.Catalog(目录)

在 DuckDB 中,Catalog通常指的是一个数据库文件。每个数据库文件(如default.duckdb)就是一个独立的 Catalog,可以包含多个 Schema 和表。

• 作用:

• 组织数据:将不同的数据对象(如表、视图、函数等)分组到不同的 Catalog 中,便于管理和访问。

• 隔离数据:不同 Catalog 中的数据是隔离的,一个 Catalog 中的数据不会影响到另一个 Catalog。

• 提供命名空间:每个 Catalog 有自己的命名空间,避免了名称冲突。

• 查看当前 Catalog:

  SELECT current_database();

• 查看所有 Catalog:

  SELECT * FROM duckdb_databases();

2.Schema(模式)

在 DuckDB 中,Schema是一个逻辑分组,用于组织和分类数据库对象,如表、视图、函数等。每个 Catalog 默认包含以下 Schema:

main:默认的用户定义对象存储位置。

system:包含系统表和视图。

temp:用于存储临时对象。

• 作用:

• 组织数据:将不同的数据对象分组到不同的 Schema 中,便于管理和访问。

• 隔离数据:不同 Schema 中的数据是隔离的,一个 Schema 中的数据不会影响到另一个 Schema。

• 提供命名空间:每个 Schema 有自己的命名空间,避免了名称冲突。

• 查看当前 Schema:

  SELECT current_schema();

• 查看所有 Schema:

  SELECT * FROM duckdb_schemas();

• 切换 Schema:

  SET search_path TO 'schema_name';

3.Table(表)

在 DuckDB 中,Table是实际存储数据的地方。每个 Schema 可以包含多个表,每个表有自己的列。

• 作用:

• 存储数据:表是数据存储的基本单位。

• 定义数据结构:表定义了数据的结构,包括列名、数据类型等。

• 查看表:

  SELECT * FROM information_schema.tables WHERE table_schema = 'main';

• 创建表:

  CREATE TABLE main.your_table_name (
      column1 INT,
      column2 VARCHAR
  );

• 插入数据:

  INSERT INTO main.your_table_name VALUES (1, 'Alice'), (2, 'Bob');

• 查询数据:

  SELECT * FROM main.your_table_name;

4.Column(列)

在 DuckDB 中,Column是表中的字段,定义了表中存储的数据的属性。每个表可以有多个列。

• 作用:

• 定义数据属性:列定义了表中存储的数据的属性,包括数据类型、默认值等。

• 存储数据:列是表中存储数据的基本单位。

• 查看列:

  SELECT * FROM information_schema.columns WHERE table_name = 'your_table_name';

5.示例

以下是一个简单的示例,展示如何在 DuckDB 中使用 Catalog、Schema 和 Table:

创建一个新的 Catalog

duckdb my_database.db

创建一个新的 Schema

CREATE SCHEMA my_schema;

在新的 Schema 中创建表

CREATE TABLE my_schema.my_table (
    id INT,
    name VARCHAR
);

插入数据

INSERT INTO my_schema.my_table VALUES (1, 'Alice'), (2, 'Bob');

查询数据

SELECT * FROM my_schema.my_table;

6.系统视图

DuckDB 提供了一些系统视图,用于查看数据库的元数据:

information_schema.tables:查看表的元数据。

  SELECT table_name
  FROM information_schema.tables
  WHERE table_schema = 'main';

information_schema.columns:查看列的元数据。

  SELECT column_name, data_type
  FROM information_schema.columns
  WHERE table_name = 'your_table_name';

duckdb_tables:查看表的元数据。

  SELECT * FROM duckdb_tables();

duckdb_columns:查看列的元数据。

  SELECT * FROM duckdb_columns();

7.总结

DuckDB 的 Catalog、Schema 和 Table 提供了一种强大的数据组织和管理机制。通过合理使用 Catalog 和 Schema,可以有效地隔离和管理数据,提高数据的可维护性和可访问性。希望这些内容能帮助你更好地理解和使用 DuckDB 的 Catalog、Schema 和 Table。

如果你有更多问题,可以参考 DuckDB 的官方文档或加入 DuckDB 的社区获取更多帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值