表

表定义数据的结构。

可以将新数据加载到表中,也可以引用现有位置中的数据。您可以通过创建表权限来定义对表的细粒度访问控制权限。

表可以是外部表,也可以是管理表。

外部表

外部表为存储在不受 Oracle AI Data Platform 管理的位置中的数据定义结构。在 AI Data Platform 中创建外部表时,元数据生命周期由 AI Data Platform 管理。删除外部表时,仅删除表定义。外部表参考的数据不会被删除。

确保您的用户具有创建外部表所需的以下 IAM 策略:

allow group <GroupName> to read buckets in compartment id <external-data-CompartmentId>
allow group <GroupName> to inspect objects in compartment id <external-data-CompartmentId>

外部表需要其他 IAM 策略。有关详细信息,请参阅 Oracle AI Data Platform 的 IAM 策略。

受管表

托管表为存储在 AI Data Platform 中的数据定义结构,并且只能由 AI Data Platform 用户访问。

删除托管表时,将删除表定义和表数据。

支持的表格式

表可以使用基于文件的格式,例如 CSV、JSON、Avro、Parquet 和 ORC,或者使用 Delta 和 Apache Iceberg 等事务处理表格式。Iceberg 表使用 Hadoop 目录实施来管理 Oracle Cloud Infrastructure Object Storage 中的表元数据。

格式化 说明 用途
逗号分隔值 (Comma-separated-values,CSV) 数据以文本文件形式存储,该文件具有指定的基于行的文件格式来构建数据。通常,文件中的第一行是包含数据列名的标题行。 用于在系统之间交换表格式数据。文件中的每一行都是表中的一行。
JavaScript 对象表示法 (JSON) 数据以基于文本的标准格式存储,用于表示基于 JavaScript 对象语法的结构化数据。JSON 支持对象或分层结构的列表。 用于流应用程序。JSON 简化了将复杂关系存储在单个文档中的相关数据的存储,并避免了混沌列表转换为关系数据模型。请注意,JSON 不可拆分。
Avro 数据以基于行的二进制格式存储,而模式以 JSON 格式存储,以最大限度地减小文件大小并提高效率。Avro 通过管理添加、缺失和更改的字段,为模式进化提供了可靠的支持。这使得旧软件可以读取新数据,而新软件可以读取旧数据。也称为数据序列化系统。 用于数据存储,因为 avro 文件是可拆分和可压缩的。基于行的序列化存储非常适合大量写入事务,例如将数据插入 AI 数据平台。当模式演化在高速写入期间至关重要时,Avro 也是一个不错的选择。
Parquet 数据以列式数据格式存储,具有高度可压缩性和可拆分性。Parquet 针对范式 "Write Once Read Many (WORM)" 进行了优化。它的写入速度很慢,但读取速度非常快,特别是当您仅访问部分列时。 用于解决大数据问题,因为压缩算法可以更好地处理列式数据格式。您可以以各种格式存储大数据,例如图像、视频、文档和结构化数据表。对于读取部分数据时繁重的工作负载,Parquet 是一个不错的选择。例如,当数据集具有多个列,但您仅希望访问部分列。如果您依赖 Spark 或者希望多个服务访问对象存储中存储的相同数据,则更理想。
优化行列 (ORC) 数据以列格式存储在单个文件中的行集合中。 用于跨群集并行处理行集合。当读取事务多于写入事务或压缩为优先级时是理想选择。
差值 数据以列格式存储,该格式使用基于 JSON 文件的事务处理日志扩展 Parquet 数据文件,以用于 ACID 事务处理和可伸缩元数据处理。 用于事务处理支持。
Iceberg 一种开放表格式,用于通过版本化的元数据、清单和快照管理 Parquet 数据文件。AI Data Platform 使用 Iceberg Hadoop 目录实施。 用于 ACID 事务、并发读取和写入、模式和分区演化、时间旅行查询、行级别更新、更新和快照管理。

支持的数据类型

数据类型 说明
字节类型 表示 1 字节带符号的整数。数字的范围是从 -128 到 127。
短类型 表示 2 字节带符号的整数。数字的范围是从 -32768 到 32767。
整数类型 表示 4 字节带符号的整数。数字的范围是从 -2147483648 到 2147483647。
长类型 表示 8 字节带符号的整数。数字的范围是从 -9223372036854775808 到 9223372036854775807。
浮点类型 表示 4 字节单精度浮点数。
双类型 表示 8 字节双精度浮点数。
小数类型 表示任意精度的带符号小数。由 java.math.BigDecimal 内部支持。BigDecimal 由任意精度未缩放的整数和 32 位整数小数组成。
字符串类型 表示字符串值。
VarcharType(长度) StringType 的一个变体,具有长度限制。如果输入字符串超过长度限制,则写入数据将失败。
字符类型(长度) 固定长度的 VarcharType(length) 的变体。CharType(n) 类型的读取列始终返回长度为 n 的字符串值。Char 类型列比较会将短列填充到较长的长度。
二进制类型 表示字节序列值。
布尔类型 表示布尔值。
日期类型 表示包含字段“年”、“月”和“日”的值,不含时区。
时间戳类型 带有本地时区和 (TIMESTAMP_LTZ) 的时间戳。它表示包含字段“年”、“月”、“日”、“小时”、“分钟”和“秒”的值以及会话本地时区。时间戳值表示绝对时间点。
时间戳 NTZ 类型 不带时区的时间戳 (TIMESTAMP_NTZ)。它表示包含字段“年”、“月”、“日”、“小时”、“分钟”和“秒”的值。所有操作都是在不考虑任何时区的情况下执行的。
YearMonthIntervalType(startField, endField) 表示由连续的 MONTH 子集、年份 [0..11] 和年份 [0..11] 中的月份以及范围 [0..178956970] 中的年份组成的年间隔。
DayTimeIntervalType(startField、endField) 表示日时间间隔,该时间间隔由连续的 SECOND 子集组成,分钟内秒数,可能为秒数 [0..59.999999]、MINUTE、小时内分钟 [0..59]、小时内、天内小时 [0..23] 和 DAY 以及范围 [0..106751991] 中的天数组成。
ArrayType(elementType, containsNull) 表示由类型为 elementType 的一系列元素组成的值。containNull 用于指示 ArrayType 值中的元素是否可以具有 NULL 值。
MapType(keyType, valueType, valueContainsNull) 表示由一组键 - 值对组成的值。keyType 描述关键字的数据类型,valueType 描述值的数据类型。对于 MapType 值,不允许键具有空值。valueContainsNull 用于指示 MapType 值的值是否可以具有空值。
结构类型(字段) 表示具有一系列 StructFields(字段)描述的结构的值。
StructField(名称,数据类型,可为空) 表示 StructType 中的字段。字段的名称由名称指示。字段的数据类型由 dataType 指示。nullable 用于指示这些字段的值是否可以具有 null 值。

限制

以下限制适用于 AI Data Platform 中的表:

  • 不能在卷内/卷上的任何数据文件或目录上定义外部表。
  • 不能在存储桶和/或其目录上定义已用于其他外部表或外部卷的外部表
  • 无法在主目录中查看/列出视图。

方案演化

Oracle AI Data Platform 中的模式演变允许具有所需权限的用户使用记事本中的 SQL 更新托管表。

当表定义随时间变化以支持新列、删除的列、重命名列、分区更改或表重命名而无需从头重新创建数据集时,此功能非常有用。支持的格式包括 Parquet、Avro 和 Delta。

支持的工序

针对托管表分析了以下方案演化操作:
  • 重命名表:Delta、Parquet、Avro 和 Iceberg 支持
  • 添加列:Delta、Parquet、Avro 和 Iceberg 支持
  • 删除列:Delta 和 Iceberg 支持;Parquet 和 Avro 不支持
  • 更改或重命名列:Delta 和 Iceberg 支持;Parquet 和 Avro 不支持
  • 替换列:Delta 和 Iceberg 支持
  • 添加分区:Parquet 和 Avro 通过 DDL 支持。对于 Delta 和 Iceberg,在写入数据时会自动创建分区。单个分区不通过 DDL 添加。Iceberg 支持使用 ALTER TABLE ... ADD PARTITION FIELD 向分区规范中添加字段。
  • 删除分区:Parquet 和 Avro 通过 DDL 支持。对于 Delta,删除相关数据并运行 VACUUM。Iceberg 不支持通过 DDL 删除单个分区;而是删除相关行。Iceberg 支持使用 ALTER TABLE ... DROP PARTITION FIELD 从分区规范中删除字段。
  • 更改数据类型:Parquet 或 Avro 不支持。差值可能需要 CTAS 或覆盖方案解决方法。Iceberg 仅支持兼容的类型提升,例如 INT 到 BIGINT、FLOAT to DOUBLE,以及通过 ALTER TABLE 提高小数精度。不支持缩小转换范围或不兼容的转换。

创建托管表

您可以为所管理的方案创建表。

  1. 导航到要为其创建表的方案。
  2. 选择表选项卡。
  3. 单击 “Create Table(创建表)”图标 创建表。

    创建选择了表类型的表托盘

  4. 为表类型选择托管。
  5. 从托管表格式中选择表的格式。
  6. 拖放包含表数据的文件,或单击以浏览到文件位置。
  7. 请为表提供名称和说明。
  8. 可选:要添加分区,请展开分区键(可选)。单击添加分区并选择数据列。
  9. 可选:要向数据目录的元数据添加表属性,请展开表属性(可选)。单击添加属性并提供属性及其值。
  10. 单击创建。

创建外部表格

您可以在 OCI Object Storage 中创建包含数据的外部表。

  1. 导航到要为其创建表的方案。
  2. 选择表选项卡。
  3. 单击 “Create Table(创建表)”图标 创建表。

    创建表页打开时选择了表类型“外部”

  4. 为表类型选择外部。
  5. 从 OCI Object Storage 中选择存储数据的区间、存储桶和文件夹。您可以选择的对象基于登录用户的 IAM 权限。
  6. 请为您的表提供名称和说明。
  7. 可选:要向数据目录的元数据添加表属性,请展开表属性(可选)。单击添加属性并提供属性及其值。
  8. 单击创建。

编辑表格

可以修改所管理的表的详细信息。

注意:

对 Oracle AI Data Platform 中创建的外部目录表的编辑不会推送到远程目录。
  1. 导航到您的方案。
  2. 选择表选项卡。
  3. 在要编辑的表旁边,单击 “操作三个点”图标 操作。
    • 单击重命名以更改表的名称。输入新名称并按 Enter 。
    • 单击编辑说明以更改表的说明。提供新说明,然后单击保存。

查看表详细资料

您可以查看方案中的表的详细信息。

  1. 导航到您的方案。单击表选项卡。
  2. 单击要查看其详细信息的卷的名称。您还可以单击卷旁边的 “操作三个点”图标 操作,然后单击查看。
  3. 单击详细信息选项卡。

删除表

可以从所管理的方案中删除表。

  1. 导航到要从中删除表的方案。
  2. 单击表选项卡。
  3. 在要删除的表旁边,单击 “操作三个点”图标 操作,然后单击删除。
  4. 单击删除。