外表的数据既然从外部数据源获取,那PARTITION_NAME是代表什么,还会给外表分配一个分区吗?

OceanBase 外表 PARTITION_NAME 解答

截图视图:DBA_OB_EXTERNAL_TABLE_FILES,记录外表和外部文件的映射关系OceanBase。

1. PARTITION_NAME 是什么?

  • 非分区外表(普通外表,没有写PARTITION BY:系统会默认填充固定值 P0
    这个P0只是逻辑占位分区名不是真实存储分区,外表本身不会在 OB 内部生成 SSTable 物理分区,外表数据全部存在外部文件(CSV/Parquet 等),OB 本地不存表数据OceanBase。
  • 分区外表(建表带PARTITION BY:这里显示真实的分区名称(P0/P1 或者用户自定义分区名),每一个逻辑分区对应一批外部文件,可以支持分区裁剪。

截图里所有记录 PARTITION_NAME 全部是 P0,说明示例里全部是普通非分区外表

2. 还会给外表分配一个分区吗?

  1. 普通外表(无 PARTITION BY)
    :white_check_mark:视图显示 P0,但不会分配真实物理分区。OB 本地没有存储该表的数据,没有 SSTable,P0 只是视图层面的占位标记,仅用于视图字段对齐。
  2. 分区外表(建表写了 PARTITION BY)
    才会产生真正逻辑分区,视图中出现多个不同 PARTITION_NAME,支持分区裁剪,但是依然不会在 OB 存储写入真实分区数据,数据还是外部文件。
1 个赞