CN108369587B - 创建用于交换的表 - Google Patents
创建用于交换的表 Download PDFInfo
- Publication number
- CN108369587B CN108369587B CN201680071158.5A CN201680071158A CN108369587B CN 108369587 B CN108369587 B CN 108369587B CN 201680071158 A CN201680071158 A CN 201680071158A CN 108369587 B CN108369587 B CN 108369587B
- Authority
- CN
- China
- Prior art keywords
- column
- attributes
- database table
- data
- partition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文描述了用于创建用于与另一个表的表分区进行交换操作的新数据库表的技术。数据库管理***(DBMS)被配置为接收诸如“CREATE TABLE new_table FOR EXCHANGE FROM partition_P1”之类的查询。DBMS然后识别源分区(例如,分区P1)的属性并基于识别出的属性创建新数据库表。发送查询的外部实体可能无法以其它方式直接访问这些属性中的一些属性(例如,隐藏列、数据建模框架和表统计信息)。如果在交换操作中与源分区互换,那么新创建的表具有作为另一个表的一部分的所有必要的属性。
Description
技术领域
本发明涉及数据库定义语言(DDL)操作,并且更具体地涉及用于创建用于与另一个数据库表的至少一部分进行交换的新数据库表的改进的计算机实现的技术。
背景技术
数据通常以一种格式或在一个位置中存储以用于短期存储,然后以不同格式或在不同位置中存储以用于长期存储。例如,在联机事务处理(OLTP)中,数据可以被短期存储在一个或多个区域数据库中,并且然后被压缩并传输到集中式数据仓库以进行长期存储。为了将数据从OLTP***传输到数据仓库,在数据输入到OLTP***时对数据进行组织,并且然后在资源允许时将组织后的数据的离散部分传输到数据仓库。
用于组织数据的典型方法是将数据存储在被组织成行和列的表中。这些表被进一步划分为被称为表分区的不重叠的“子表”。每个表分区可以被认为是桶(bucket),并且每条给定记录基于特定的(一个或多个)列(“(一个或多个)分区键列”)中的数据项的值被放置到表分区中。例如,销售记录可以存储在按“年季度”分区的表中。销售记录基于“销售日期”列中数据项的值被输入到四个不同表分区中的一个表分区中。在新季度开始之后,与上一季度对应的表分区被调度以进行压缩并传输到数据仓库中的最终目的地。在这种情况下,传输意味着从原始销售表中去除数据并且仅将其保留在仓库的最终目的地中。
取决于分区中记录的数量,将数据进行压缩以及从源分区传输到数据仓库可能消耗大量时间和计算资源。因此,不是立即传输源分区的数据,而是使用元数据操作将源分区的记录与表的其余部分分离(“去除”),并在以后的时间点在具有较少活动的时间窗口中执行实际传输。为了执行元数据操作,创建与源分区的表具有相同模式(列名称和数据类型)的新表。新表的元数据具有引用持久存储装置中的空表的指针数据。源分区的元数据具有引用持久存储装置中的一组记录的指针数据。当源分区的记录需要被分离(从原始表中去除)时,源分区的指针数据与新表的指针数据进行互换(swap),而不物理地移动源分区的记录。因此,通过进行纯粹的元数据操作,可以将分区的记录有效地传输到新表中。
存在用于从另一个表的模式来创建表的SQL语句。例如,具有过滤谓词“false”的create table as select(CTAS)语句基于源分区的模式创建新的空表:
CREATE TABLE new_table AS SELECT*FROM source_table WHERE 1=0;
当用于创建新表的模式与源表存储和组织持久存储装置中的数据的方式不匹配时,交换过程中出现错误。当表的属性(诸如列顺序)以与数据在持久存储装置中被组织的方式不同的方式暴露给用户时,会发生这些错误。当由CTAS语句暴露的模式与源表在内部组织数据的方式不同时,新表的指针数据和源分区的指针数据在交换后最终引用错误的列位置。当试图访问新表中的记录或在源表中创建记录时,数据库管理***访问在不正确的位置和偏移处的数据项,并且整个***出现故障。
本节中描述的方法是可以被追寻的方法,但不一定是以前已设想或追寻的方法。因此,除非另有指示,否则不应当假设本节中描述的方法中的任何方法仅仅由于它们被包括在本节中而被认为是现有技术。
附图说明
在附图中:
图1是示出被配置为执行CTFE语句的rDBMS的示例***体系架构的框图;
图2是示出用于交换过程的示例程序流程的流程图;
图3A是示出用于示例的表的逻辑描绘的框图;
图3B是示出用于示例的表的物理描绘的框图;
图3C是示出基于分区的物理属性创建的新表的物理描绘的框图;
图3D是示出在表之间交换分区之前和之后两个表的数据字典的物理描绘的框图;
图3E是示出在表之间交换分区之后两个表的逻辑描绘的框图;
图4A是示出用于示例的复合分区表的逻辑描绘的框图;
图4B是示出用于示例的复合分区表的物理描绘的框图;
图4C是示出基于复合分区表的分区的物理属性创建的新表的物理描绘的框图;
图4D是示出在表之间交换两个子分区之前和之后两个表的数据字典的物理描绘的框图;
图4E是示出在表之间交换两个子分区之后两个表的逻辑描绘的框图;
图5是示出可以用于实现本文所描述的技术的计算机***的框图。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是,将明显的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了公知的结构和设备,以便避免不必要地模糊本发明。
总体概述
本文描述了(除了基于源表的“逻辑”属性之外还)基于源表的“物理”属性为交换操作创建新表的技术。该过程由SQL语句发起,该SQL语句诸如“CREATE TABLE table_nameFOR EXCHANGE WITH TABLE source_table[PARTITION source_partition]”。由关系数据库管理***(rDBMS)接收到的用于开始交换过程的初始DDL语句在本文可以被称为创建用于交换的表(create table for exchange,CTFE)语句。FOR EXCHANGE WITH TABLE子句是可以在语句中使用以明确指定要创建的表应当与另一个表共享一个或多个物理属性的语法的示例。在实施例中,任何语法可以用于指定要创建的表应当与另一个表共享一个或多个物理属性的表达式和/或子句。
数据库对象(例如,表)的属性是关于数据结构如何组织在数据库数据的各种存储单元中。存储单元的示例包括但不限于数据块、区段(extent)、段(segment)和分区(partition)。物理属性的示例是存储在数据块中的行中的列的顺序。
与数据暴露给rDBMS外部的实体的方式有关的数据库对象(例如,表)的属性在本文中被描述为“逻辑的”或其一些缀合(conjugation)。所有非逻辑的属性可以被称为逻辑外(extra-logical)属性。
数据定义语言(DDL)语句可以使数据库服务器实例基于表中数据的组成以及甚至基于在接收DDL语句之前已对表执行的操作来以不同的方式改变表的属性。在技术上,取决于表如何被创建和修改,逻辑上看起来100%相同的两个表可以具有显著不同的物理属性。由于重新创建导致分区的属性改变的确切记录和数据库操作是不切实际的,因此本文描述的技术基于一个或多个源分区的属性来创建新表。识别源表的物理属性尤其重要,因为这些属性在交换发生之后对于表的所有分区必须相同,以便表范围的访问机制正确工作。附加的属性(逻辑外属性和逻辑属性两者)从源表的元数据被复制到新表,以防止在交换发生之后发生附加错误。特别地,可以从元数据复制逻辑外属性,以创建具有与具有子分区的分区类似的属性的分区的表。
***概述
图1是示出具有数据库实例的关系数据库管理***(rDBMS)100的示例***体系架构的框图,该数据库实例被配置为基于另一个表的物理属性来处理语句或表达式以创建表。为了说明的目的,rDBMS 100被示为执行耦合到存储在持久存储装置160中的数据库162的一个数据库服务器实例106的一个数据库服务器计算机102。在替代实施例中,rDBMS 100可以包括一个或多个数据库服务器计算机,每个数据库服务器计算机执行耦合到存储在一个或多个共享持久存储设备(例如,硬盘或闪存)上的数据库的一个或多个数据库服务器实例。例如,虽然在示出的实施例中,数据库服务器计算机102正在执行单个数据库服务器实例106,但是在替代实施例中,三个数据库服务器计算机可以执行三个相应的数据库服务器实例,其中每个数据库服务器计算机可操作地耦合到相同的共享盘。
数据库服务器实例106执行由一个或多个用户或数据库应用提交给数据库服务器计算机102的数据库命令。这些用户和数据库应用在本文可以被称为外部实体,以表示它们在rDBMS 100的内部程序和结构的外部。外部实体可以以客户端-服务器关系通过网络连接到rDBMS 100。
数据库服务器实例106还包括查询优化器120和执行引擎130。查询优化器120接收数据库语句、解析查询并确定用于执行查询的执行计划。查询优化器120为DML(数据操纵语言)语句和DDL语句(诸如CTFE语句114)两者确定执行计划。在DML语句的情况下,确定执行计划可能需要基于例如数据库统计信息来确定最佳执行计划。查询执行引擎130执行数据库语句执行计划的数据库操作。
数据库162包括表空间(包括表空间180),表空间存储数据库对象(例如,表、索引、日志和控制文件)的数据。关于这些数据库对象的元数据存储在数据字典170中。
数据字典
数据字典170是提供关于数据库162的元数据的一组表。
数据字典可以包括关于数据库162中的数据库对象的信息,诸如以下:
·数据库162中每个模式对象的表属性,包括但不限于逻辑列顺序、列名称、列数据类型、列偏移位置、列是否具有诸如隐藏或虚拟属性之类的特殊属性、列的缺省值以及完整性约束信息。
·被分区的表的分区标准,包括分区类型(例如,范围分区、散列分区、列表分区)和分区键(例如,列名)。
·每个表、其分区或其子分区到表空间结构(诸如段和区段)的映射。
·表数据结构(例如,段)的指针数据。
数据字典是数据管理的中心部分。例如,为了让数据库服务器实例访问数据库,该实例执行以下动作:
·查询执行引擎130访问数据字典170以在提供对特定表的访问以执行由DML语句引起的操作之前查找关于用户、模式对象和存储结构的信息。
·在提供对特定表的访问之前,查询执行引擎130修改数据字典170以执行由DDL语句引起的操作。
表数据结构
表数据以各种物理数据结构存储在持久存储装置或易失性存储器上的一个或多个物理地址范围中,各种物理数据结构包括:
a.数据块
b.区段
c.段
d.分区
表在非分区表的情况下由单个段组成,并且在分区表的情况下由多个段组成;段由区段组成,并且区段由数据块组成。分区表由分区组成。对于单级分区,每个分区由单个段组成。在复合分区的情况下,分区可以由一个或多个段组成。
最小的表数据结构被称为数据块。数据块是数据库服务器可以请求从在例如块模式存储设备中存储表数据的存储设备读取以及写入到该存储设备的数据的原子单位。为了从存储设备中检索行,将包含该行的数据块读入到存储器中,并进一步检查数据块以确定该行在数据块内的位置。
出于分页(paging)的目的,数据块可以被约束到离散数量的物理地址(即,离散大小)。数据块可以包括用于特定于数据块的信息(诸如数据块内的数据项的事务历史)的数据项和头部元数据。在优选实施例中,数据项对应于按以行为主格式组织到物理列中的一组逻辑连续行。例如,数据块可以包含在离散数量的连续存储器地址中的两行数据项R1C1、R1C2、R1C3、R2C1、R2C2、R2C3以及关于所述数据项的元数据。
表的下一个最大的数据结构被称为区段。区段包括一组连续的数据块(即,在地址空间内是连续的)。区段还可以包括描述区段的长度、区段中的数据块的数量、区段的结束地址或其任何组合的元数据。例如,区段可以包括两个数据块B1和B2以及将区段的长度描述为2的头部元数据。
表的下一个最大数据结构可以被称为段。段的“数据”包括一组区段。段的“头部元数据”可以包括指向段的每个区段的位置的指针数据。
表分区(或简称为“分区”)是指仅包含在特定列中具有满足某个分区标准的值的记录的特定类型的段。分区标准可以由数据库管理员使用各种分区方法来定义。例如,在列表分区中,管理员将分区标准定义为在每个分区的特定列中具有一列枚举值中的一个的记录。在范围分区中,管理员将分区标准定义为在特定列中具有落在每个分区的特定范围内的值的记录。在散列分区中,管理员将分区标准定义为散列函数并且数据库服务器实例106将分区进一步定义为仅具有在特定列中具有落在由散列函数计算出的特定范围内的值的记录。
当表具有多级分区时,该表被称为复合分区的。在复合分区表中,每个分区具有一个或多个子分区,并且子分区各自与段对应。
处理DDL语句
DDL语句112由数据库服务器实例106处理,数据库服务器实例106确定一组一个或多个数据库服务器实例的执行针对一个或多个数据库对象的查询的最佳查询执行计划。然后,该组数据库服务器实例根据计划创建、更改或去除定义该一个或多个数据库对象的元数据。DDL操作可能需要数据库服务器实例更改表空间180中的数据字典170和/或数据库对象。
例如,假设节点102接收以下DDL语句。
CREATE TABLE Table_182(C1int,C2tinyint(1),C3varchar(255));
数据库服务器实例106确定字段名称:C1、C2、C3及其相应的数据类型:int,tinyint(1)和varchar(60)。然后,数据库服务器实例106在表空间180中创建段、区段和空数据块以托管新创建的表的数据。数据库服务器实例106还在字典170中创建描述如何访问新创建的表182中的特定列的元数据。
处理DML语句
基于当数据驻留在数据库中时数据的物理布局来处理DML语句110。例如,假设节点102接收到以下DML语句。
SELECT COUNT(*)FROM table_182WHERE c3=2;
数据库服务器实例106确定来自table_182的记录需要基于过滤谓词c3=2被读取。然后,数据库服务器实例106使用查询优化器120创建查询执行计划。查询优化器120基于关于列c3中的数据在table_182上收集到的统计信息来估计以各种方式(例如,分区修剪、并行化等)过滤表182中的数据的成本。
为了解释的目的,假设查询优化器120选择其中查询执行引擎130只是读取table_182中的每条记录并且仅返回列c3中具有值2的记录的查询执行计划。为了执行读取,查询执行引擎首先读取表182的元数据以确定列C3中的数据项相对于每个数据块的开始的偏移位置。然后,通过首先读取列c3中数据项的字长处的列c3的偏移位置,查询执行引擎130继续扫描表182的所有数据块。当列c3从表182被截断时,识别出列c3中具有值2的记录,然后这些记录由数据库服务器实例106扫描并返回给发送查询的外部实体。
例如,表182的第三列位于每个数据块的偏移60、140和220字节处,并且包含8字节的信息作为字长。数据库服务器实例106通过在从每个数据块的起始地址跳跃60个字节、140个字节和220个字节之后扫描8个字节的字长来遍历如被存储时的表182。
交换过程概述
图2是示出用于交换过程的示例程序流程的流程图。在步骤202中,数据库服务器实例接收引用源分区的CTFE语句。在步骤204中,数据库服务器实例识别与源表和源分区相关联的一个或多个段的物理属性。在步骤206处,数据库服务器实例识别源分区的特定逻辑属性和逻辑外属性。通过使用在步骤204中识别出的元数据,数据库服务器实例在步骤208处为新表分配存储器,并且基于与源分区相关联的一个或多个段的物理属性来为新表创建数据结构。然后,在步骤210处,数据库服务器实例使用在步骤206处识别出的元数据来复制与源分区相关联的一个或多个段的逻辑属性和逻辑外属性。一旦步骤202至210完成,就在持久存储装置中创建了新表,并且该表基于从与源分区相关联的一个或多个段中识别出的物理属性、逻辑属性和逻辑外属性在数据字典中被引用。
在一些实施例中,直到接收到交换语句或类似的互换命令,rDMBS然后才执行动作。在这些实施例中,在步骤212处,rDBMS接收引用源分区和新表的交换语句。
取决于正在使用的rDBMS,作为创建新表的基础的源分区的元数据可以存储在不同的位置中(例如,在数据字典170中或在诸如表182之类的特定表中)。此外,在交换步骤214中互换的指针数据的位置可以位于不同的位置中。图3A-图3E描绘了在交换与表的分区对应的单个段时rDBMS和相关联的数据库的状态的示例。图4A-图4E描绘了在交换与表的分区对应的多个子分区时rDBMS和相关联的数据库的状态的示例。
处理CTFE DDL语句
在优选实施例中,数据库服务器实例106被配置为接收引用单个分区或表的创建用于交换的表(create table for exchange,CTFE)语句。假设节点102接收查询语句:
CREATE TABLE table_350FOR EXCHANGE WITH TABLE table_300;
数据库服务器实例106被配置为基于该查询语句来识别单级分区表300的逻辑属性、物理属性和逻辑外属性。图3A是示出被划分为两个分区p1和p2的表的逻辑描绘的框图。分区p1包括记录/行R1-R6,并且分区p2包括记录R7-R8。表300的逻辑属性是C1、C2、C3的逻辑列顺序。
图3B是示出用于示例的表的物理描绘的框图。表300的物理描绘既包括数据字典170中关于表300的元数据又包括包含其各种数据结构(段312、332;区段314、320、334;以及数据块316、318、322和336)的表300。表300的物理属性是物理列顺序C1、C2、C3。表300的另一个物理属性是列偏移位置。
为了识别表300的属性,表300的逻辑属性和物理属性两者都在表属性302中描述。逻辑列顺序通过模式内每个列的位置确定,并且物理列顺序通过相对于彼此的偏移位置确定(即,+52处的列C2在+40处的列C1之后,但是在+60处的列C3之前)。
数据库服务器实例106可以扫描数据字典170以确定表300的属性,诸如每列的名称和每列的数据类型/字长。数据库服务器实例106还可以针对用于确定表300的属性的元数据来扫描表300。
通过使用数据字典和/或数据结构元数据,数据库服务器实例106确定诸如列名、数据类型、加密、物理列号和逻辑列号或其任何子组合之类的属性。如表1所示,为分区p1识别出的物理列属性与逻辑列属性吻合。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C2 | 2 | 2 |
3 | C3 | 3 | 3 |
表1.表300的列属性
一旦确定了源表的物理列属性,就将这些物理属性用作用于创建新表350的数据结构的创建参数。一旦在持久存储装置中创建了新的数据结构,源分区(例如,p1)的逻辑列属性就可以被复制到新创建的表的元数据中。
图3C是示出基于源分区的物理属性创建的新表的物理描绘的框图。例如,使用表1中所示的属性在持久存储装置160中创建新表350。如图3C所示,表350的物理属性与表300的物理属性匹配。表300的列C1'、C2'和C3'与它们相应的源列C1、C2、C3位于相同的偏移处。由此得出,列C1'、C2'和C3'也以与C1、C2和C3相同的物理顺序按以行为主格式存储。表350的逻辑列属性也与表300的逻辑列属性匹配。表350具有对请求表模式的描述的任何用户可见的三个列C1'、C2'、C3',并且这些列具有与表300的C1、C2、C3相同的字段名称、顺序和数据类型。
交换表
在一些实施例中,直到接收到交换语句或类似的互换命令,rDMBS然后才执行动作。在其它实施例中,交换语句和CTFE语句可以被集成在单个查询语句中。在优选实施例中,数据库服务器实例106被配置为接收交换语句。假设节点102接收查询语句:
ALTER TABLE table_300
EXCHANGE PARTITION p1WITH TABLE table_350;
数据库服务器实例106首先从分区映射304中识别出段312与分区p1相关联。然后,从表映射354中,数据库服务器实例106识别出段362与表350相关联。在元数据操作中,数据库服务器实例106互换段312的指针数据与段362的指针数据。指针数据可以排外地位于数据字典170中或者在表空间180中的表300和350的元数据中,或者在数据字典170和表空间180中的表300、350的元数据两者中。
图3D是示出在表之间交换段之后两个表的数据字典的物理描绘的框图。在交换之前,段312的指针数据306引用地址'x32432'并且段362的指针数据356引用地址'x84563'。在交换之后,段312的段指针数据306和段362的段指针数据356被互换。段312的指针数据306引用地址'x84563',并且段362的指针数据356引用地址'x32432'。
交换过程的效果是段312中的记录不再位于表300中。图3E是示出在表之间交换段之后两个表的逻辑描绘的框图。表350现在包含先前容纳在表300中的数据记录。
复合分区
本文称为复合分区的技术涉及创建分区的分区,也称为子分区。例如,可以使用基于范围的分区方案来对表进行分区以创建一组第一级分区。然后可以将散列函数应用于第一级分区中的每个第一级分区以便为每个第一级分区创建一组第二级分区。此外,用于在一个级别创建分区的分区键可以与用于在其它级别创建分区的分区键不同。复合分区表的示例包括但不限于范围-散列(range-hash)、范围-范围(range-range)和散列-散列(hash-hash)。其它示例包括三个或更多个级别的分区,诸如范围-范围-散列(range-range-hash)。在复合分区表的情况下,子分区可以指分区的分区。
在具有复合分区的表中,记录基于它们如何满足分区标准中的每个分区标准而被存储在段中。例如,如果销售表被范围分区以将记录组织到表示年的前两个季度的两个分区中,并且被散列分区以将记录划分为两个散列桶,则该表被细分为四个子分区。图4A是示出复合分区表的框图。表400按年季度(例如Q1、Q2)在第一级被范围分区。表400在第二级被散列分区(例如,H1、H2)。因此表400具有与Q1H1、Q1H2、Q2H1和Q2H2对应的四个子分区。
交换具有子分区的分区
在实施例中,数据库服务器实例106被配置为接收引用复合分区表的分区的创建用于交换的表(create table for exchange,CTFE)语句。注意的是,如本文所述基于CTFE语句识别分区的属性对于CTAS语句是不可能的。执行CTAS语句涉及基于从一个或多个源表中选择的列来从头开始创建物理表结构。在CTFE语句中,物理表结构是基于源分区物理表结构创建的。例如,假设节点102接收查询语句:
CREATE TABLE table_450FOR EXCHANGE WITH TABLE table_400PARTITION Q1;
数据库服务器实例106被配置为基于该查询语句来识别源分区Q1的列和列属性。物理属性可以从数据字典170或表400中的数据结构的元数据确定。图4B是示出用于示例的表的物理描绘的框图。表400的物理描绘包括数据字典170中关于表400的元数据和表空间180中的表400两者。在图4B中,表400由与其相应的子分区Q1H1、Q1H2、Q2H1、Q2H2对应的四个段412、422、432、442组成。
为了识别分区Q1的属性,表400的逻辑属性和物理属性两者在表属性402中描述。逻辑列顺序由模式内的每列的位置确定,并且物理列顺序由相对于彼此的偏移位置确定。因为Q1具有子分区Q1H1和Q1H2,因此数据库服务器实例106可能还需要根据分区标准404(即,H1标准、H2标准)来确定子分区的分区标准的逻辑外属性。在图4B中描述的实施例中,散列分区(H1、H2)的分区标准独立于范围分区(Q1、Q2)的分区标准。但是,在另一个实施例中,对于各个分区,子分区信息可以不同。在该另一个实施例中,针对每个子分区Q1H1、Q1H2、Q2H1、Q2H2描述分区标准404。
一旦确定源分区Q1的属性,物理属性就用作创建参数以创建新表450的数据结构。一旦在持久存储装置中创建了新数据结构,就可以将源分区的逻辑属性和逻辑外属性复制到新创建的表的元数据中。
图4C是示出基于源分区的属性创建的新表的物理描绘的框图。如图4C所示,表450的表属性452与表400的表属性402匹配。此外,表450的分区标准454具有与表400中的Q1分区的第二级分区标准404匹配的第一级分区H1'标准和H2'分区标准。
在优选实施例中,数据库服务器实例106被配置为接收交换语句。假设节点102接收查询语句:
ALTER TABLE table_400
EXCHANGE PARTITION q1WITH TABLE table_450;
数据库服务器实例106首先从分区映射406中识别出段412、422与分区Q1相关联。其次,数据库服务器实例106从分区映射456中识别出段462、472与表450相关联。在元数据操作中,数据库服务器实例106分别将段412、422的指针数据408与段462、472的指针数据458互换。指针数据可以排外地位于数据字典170中或位于表空间180中的表400和450的元数据中,或者位于数据字典170和表空间180中的表400、450的元数据两者中。
图4D是示出在表之间交换段之后两个表的数据字典的物理描绘的框图。在交换之前,段412、422的指针数据408分别引用地址'x32432'、'x42345',并且段462、472的指针数据458分别引用地址'x84563'、'xA4563'。在交换之后,段412、422的段指针数据408和段462、472的段指针数据458被互换。段412、422的指针数据408分别引用地址'x84563'、'xA4563',并且段462、472的指针数据458分别引用地址'x32432'、'x42345'。表400仍然是具有四个子分区的复合分区表,并且新表450仍然只是具有两个分区的分区表。
交换过程的效果是段412、422中的记录不再位于表400中。图4E是示出在表之间交换段之后两个表的逻辑描绘的框图。表450现在包含先前容纳在表400中的记录。
识别影响数据如何被访问的属性
DDL通常以不对应于表的逻辑属性的方式创建或改变表的物理属性和逻辑外属性。执行CTFE操作涉及从源段中识别这些改变并创建包括这些改变的新表。逻辑外属性的示例包括但不限于:
·影响数据如何被访问的属性
a.隐藏列、未使用列、不可见列
b.虚拟列、混合列
·影响数据如何被解释的属性
a.加密
b.压缩
·影响其它***如何访问表的属性
a.查询优化器的统计信息收集属性
b.位图索引的Hakan因子
本文描述的技术对于基于一个或多个源分区来创建用于交换的表是尤其有用的,该一个或多个源分区具有与对应的逻辑属性将指示的不同的物理属性或逻辑外属性。在先前的示例中,段的物理列号和逻辑列号是相同的。但是,不要求物理列号与逻辑列号对应。例如,名为“日期”的列可能作为源表中的第一列暴露给外部实体,但实际上名为“日期”的列被存储在内部使用的“ID列”之后的块的第二列位置中,“ID列”被存储在第一位置中。如果ID列被隐藏,则外部实体不能直接访问存储在每个数据块的第一位置中的“ID列”。CTFE操作的实现提供了基于源表的属性来创建新表,该新表具有逻辑上在新表的第一位置中的“日期”列和隐藏的“ID列”。
影响访问列的方式的属性
当处理CTFE语句时,数据库服务器实例106识别使物理列不具有直接相关的逻辑列(诸如隐藏列、未使用列或不可见列)的逻辑外属性。此外,当处理CTFE语句时,数据库服务器实例106识别使得存在不具有直接相关的物理列的逻辑列(诸如混合列和虚拟列)的逻辑外属性。
A.具有隐藏列、未使用列或不可见列的CTFE
隐藏列、未使用列或不可见列不通过CTAS语句暴露给外部实体。隐藏列只能在***级访问。隐藏列的示例是由数据库服务器实例106在表184中创建的物理列,以存储在SELECT语句的结果的物化视图中返回的每一行的ID号。外部实体可能永远无法直接访问隐藏列,但是当外部实体多次请求物化视图时,数据库服务器实例106使用隐藏列以相同顺序返回相同的行。未使用列未在***级或未由外部实体使用。未使用列的示例是已从表中丢弃但未从持久存储装置中物理删除的列。不可见列是用户指定的属性,其与隐藏列类似,但是如果在SELECT语句中明确声明该列,那么用户仍然可以选择访问该列。可以使得不可见列可修改,这将在逻辑上把它作为附加列添加到表的末尾,但是物理上将该列保持在数据块内的相同偏移位置中。隐藏列、未使用列和不可见列全部物理地存在于持久存储装置中,但是不通过SELECT*语句暴露给外部实体。
具有这些逻辑外属性的列为CTFE操作提供了尤其有用的用例。例如,节点102接收使得数据库服务器实例丢弃表182的列C2的查询,
“ALTER TABLE table_182DROP'C2';”
数据库服务器实例106确定根据各种计划从表182的每个段中丢弃列C2的成本,并且然后基于最具成本效益的计划来丢弃每个特定段的列。例如,如果使用高级压缩来压缩表,则可以将ALTER TABLE DROP列语句转换为SET UNUSED列操作。
假设表182具有高级压缩,那么使得表182的元数据更改为不再引用列“C2”比从每个数据块中物理地删除列C2更具成本效益。数据库服务器实例106使得列C2未使用。
当处理针对表182的分区的CTFE语句时,确定物理和逻辑列属性。如表2所示,在使得列C2未使用之后,针对表182识别出的物理列属性与逻辑列属性不同。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C2 | 2 | 0 |
3 | C3 | 3 | 2 |
表2.在使得列C2未使用之后表182的列属性。
一旦识别出属性,就在持久存储装置中创建新表。通过使用识别出的属性,数据库服务器实例创建具有用于三个列的空间的表数据结构,并且将物理列C2描述为未使用的逻辑外属性被复制到新表。当在交换操作中互换表182和新表的段的指针数据时,将不会由于每列的位置的不正确偏移数据而发生错误。
注意的是,仅仅从头开始创建具有列名称C1、C3的新表(例如,CTAS)将不会创建具有用于与表182的段交换的正确物理属性的表。甚至创建具有列名称C1、C2、C3的新表(例如,CREATE TABLE)并且然后丢弃列C2也可能不会创建具有用于交换的正确物理属性的表,特别地,这是因为新表将不会具有使得数据库服务器实例106响应于DROP列C2语句来创建未使用列而不是物理删除列的任何数据。新表将可能具有类似于表3的属性,并且在执行交换操作时会发生错误,因为将向数据库服务器实例给出在不正确的偏移处读取列的指示。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C3 | 2 | 2 |
表3.基于CTAS语句的表182的列属性。
用于创建表2的示例专用于未使用列,但是当查询导致数据库服务器实例创建隐藏列或不可见列时,将得到相同的表。区别在于被复制的逻辑外属性。例如,以下查询也将导致数据库服务器实例106创建具有如在表2中描述的属性的新表。
ALTER TABLE table_300MODIFY'C2'INVISIBLE;
但是,与未使用列不同,可以使得“不可见”列再次可见。例如,以下查询将导致数据库服务器实例106使得列C2可见。
ALTER TABLE table_300MODIFY'C2'VISIBLE;
如果在使得列C2再次可见之后接收到CTFE语句,则表300的逻辑列顺序将与物理列顺序不同。因此,响应于接收到CTFE语句,数据库服务器实例106将创建具有如表4中所示的物理和逻辑列属性的新表。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C2 | 2 | 3 |
3 | C3 | 3 | 2 |
表4.在使得列C2不可见并且然后可见之后表182的列属性。
B.具有虚拟列和混合列的CTFE
虚拟列和混合列作为属于表的一部分的逻辑列被暴露给外部实体,但是逻辑列中使用的值并非全部作为数据项存储在持久存储装置中。虚拟列是在需要时被导出或计算出、但在其它情况下不存储在持久存储装置中的数据块的数据项部分中的列。虚拟列可以在易失性存储器或持久存储装置中的临时存储装置中(例如,缓冲区高速缓存中)存储短的时间段,并且可以在操作结束时被丢弃。虚拟列的示例是虚拟表达列,其中列的值被定义为对来自至少一个其它列的值的操作(例如,C4=C1+C2)。
混合列是具有与其相关联的一个或多个隐藏列的列,但是逻辑列中的值是从该一个或多个隐藏列导出或计算出的。混合列使用相关联的一个或多个隐藏列中的元数据和数据项两者来导出对应逻辑列的值。
具有这些逻辑外属性的列为CTFE操作提供尤其有用的用例。例如,节点102接收使数据库服务器实例将列C4添加到table_182的查询,
“ALTER TABLE table_182ADD COLUMN'C4'INT DEFAULT 5;”
数据库服务器实例106确定使用各种计划添加列C4的成本,并且然后基于最具成本效益的计划来添加列。
假设表182中已存在阈值数量的记录,因此添加隐藏列并且更改表182中的每个段的元数据以通过使具有缺省值“5”的列“C4”成为“混合列”来引用列“C4”比将具有数据项值“5”的列C4物理地添加到每个数据块更具成本效益。
不是将列C4添加到每个数据块,而是将隐藏控制列添加到每个数据块以表示C4数据项。如果控制列的值为NULL,则在将数据项显示为逻辑列时,数据库服务器实例使用值'5'而不是NULL。
如果列的值不是缺省值'5'(例如,3),则数据库服务器实例106将控制列的值从NULL改变为隐藏值列中的实际值。因此,隐藏值列中的值可以是NULL或任何其它值。
当处理针对表182的段的CTFE语句时,如表5所示导出物理和逻辑列属性。在列C4作为混合列被添加之后,针对表182识别出的物理列属性与逻辑列属性不同。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C2 | 2 | 2 |
3 | C3 | 3 | 3 |
4 | C4 | 0 | 4 |
5 | 隐藏的控制列 | 4’ | 0 |
表5.在列C4作为混合列被添加之后表182的列属性。
一旦识别出属性,就在持久存储装置中创建新表。通过使用识别出的属性,数据库服务器实例106创建创建用于三个列的数据块的新表数据结构,并且复制将列C4描述为添加到每个数据块的混合列的逻辑外属性。当在交换操作中互换段的指针数据时,将不会由于不正确的偏移信息而发生错误。
注意的是,仅仅从头开始创建具有列名C1、C2、C3、C4的新表(例如,CTAS)将不会创建具有用于与表182的段交换的正确物理属性的表。甚至创建具有列名C1、C2、C3的新表(例如,CREATE TABLE)并且然后添加列C4也可能不会创建具有用于交换的正确物理属性的表,特别地,这是因为新表将不会具有导致数据库服务器实例106响应于“添加具有缺省值'5'的列C4”语句来创建混合列而不是将列物理地添加到每个数据块的任何数据。相反,新表将可能具有如表6中描述的属性,并且当执行交换操作时会发生错误,因为数据库服务器实例106将被给出在不正确的偏移处读取列的指令。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C2 | 2 | 2 |
3 | C3 | 3 | 3 |
4 | C4 | 4 | 4 |
表6.基于CTAS语句的表182的列属性。
作为最后一项,用于创建表5的示例专用于混合列,但是当查询导致数据库服务器实例106创建虚拟列时,将得到类似的表。例如,以下查询将导致数据库服务器实例106创建类似的表。
“ALTER TABLE table_300ADD COLUMN'C4'AS C1+C2;”
与混合列不同,虚拟列没有对应的隐藏列。如果在列C4作为虚拟列被添加之后接收到CTFE语句,则表300的逻辑属性将与物理属性不同。因此,响应于接收到CTFE语句,数据库服务器实例106将创建具有如表7中所示的物理和逻辑列属性的新表。
内部列号 | 名称 | 物理列号 | 逻辑列号 |
1 | C1 | 1 | 1 |
2 | C2 | 2 | 2 |
3 | C3 | 3 | 3 |
4 | C4 | 0 | 4 |
表7.在添加虚拟列C4之后,段302的列属性。
影响数据被存储的方式的属性
在一些实施例中,rDBMS可以允许列被加密或压缩。在这些实施例中,导致数据库服务器实例在物理级别压缩或加密列的DDL语句将不改变逻辑级别的列的属性。由数据库实例接收到的DML语句通过用于将数据添加到列的附加压缩/加密步骤或用于从列中读取数据的解压缩/解密步骤被自动处理。
在处理CTFE语句时,数据库服务器实例可以针对源分区所属的表的每一列扫描这些特定属性。在一些实施例中,扫描这些属性还包括扫描与已被压缩的特定列对应的加密密钥和/或压缩/解压缩算法。取决于实施例,这些属性可以存储在数据字典170中或每个特定列的表头部元数据中。然后将这些属性添加到基于CTFE操作中源分区的数据结构创建的新表的列属性中。注意的是,加密和压缩会影响表的物理属性,因为列宽可能会基于所使用的加密或压缩而变化。加密和压缩还会影响表的逻辑外属性,因为访问表的数据库服务器还必须访问用于加密/解密或压缩/解压缩的元数据。
影响其它***访问表的方式的属性
当今的数据库***具有在基本数据库结构之上工作以用于读取和写入表的记录的许多***。这些***中的一些***使用基于表的一个或多个属性的表模型。如果在元数据操作中将表的段与另一个表的段进行交换,则表的属性必须保持一致,以便依赖这些属性的***正常工作。这些属性的两个示例包括查询优化器的成本统计信息以及用于位图索引的Hakan因子。
A.查询优化器的统计信息收集属性
在这一点上,我们已经简要地讨论了计算成本的概念以及查询优化器120如何估计各种计划的成本以确定将哪个计划发送给查询执行引擎130(或多个节点中的多个引擎)。为了估计成本,数据库服务器实例维护关于数据库中每个表的各种统计信息。这些统计信息可以维护在数据字典170中或者它们所属的表的元数据中(例如,表空间180中的元数据中)。
用于对特定列的数据进行建模的统计框架可以随着记录被添加到特定表并基于来自特定表的记录在数据库操作中如何被使用而演进。例如,首先,用于捕获列的统计信息的框架可以仅包括确定该列的不同的值的数量。如果列从未用于数据库操作(例如,对列进行过滤或联接(join)),则不会对列采集附加统计信息。当查询对于特定数据库操作首次引用列时,可以使用不同值的数量统计信息来粗略估计将数据库操作应用于该列的成本。但是,针对该列执行一个数据库操作的事实表明,在未来的成本估计中,该列的更高级模型可能更有价值。例如,如果该列仅包含三个值,则会针对出现每个值的记录的数量来维护统计信息。值的不同出现的数量可以为应用将来的过滤谓词提供更准确的估计。作为另一个示例,列可以包含许多不同的值以及这些值中的一些值的许多重复出现,查询优化器120可以确定如果表经常与其它表联接,则关于值的分布的统计信息可能是有用的。“值的分布”统计信息可以有助于对在为散列联接创建构建表时使用布隆(bloom)过滤器,而不是简单地从头开始执行散列联接或者甚至执行另一种类型的联接(例如,嵌套循环或排序合并)进行成本估计。
作为CTFE操作的一部分,基于针对源分区的列收集到的列统计信息来为新表创建要收集哪些列统计信息的属性。因此,当新表最终与源分区进行交换时,实际的列统计信息名称已经就位,以便让查询优化器120从父表的每个段请求这些相同的统计信息(例如,新交换的(一个或多个)段具有与未交换的段相同的统计信息)。
注意的是,当基于一个或多个源段创建用于交换的新表时,被复制的属性的范围存在差异。要存储的统计信息的框架是基于整个父表生成的,但是统计信息是在段级别为每个列维护的。因此,在这个实施例中,创建用于交换的表涉及基于表级属性和段级属性创建新表。
B.用于位图索引的Hakan因子
一些索引依赖于表的属性,其中它们索引该表以正确工作。位图索引具有用于列的每个离散值的位向量。当从位向量读取数据项时,数据库服务器实例依赖于数据块中的行数(即,Hakan因子)来确定在被索引的表中包含该行的数据块。例如,假设位图索引184包含用于特定列(例如,C1)的每个离散值(例如,红色、蓝色、绿色)的不同的位向量。当查询请求来自该列的特定值(例如,SELECT*FROM table_182WHERE C1='RED';)时,数据库服务器实例遍历与在位图索引184中的该值对应的位向量,而不是针对特定值遍历整个表182中的每条记录。表的每个连续行与位向量的每个连续位对应。但是,数据库服务器实例106只能通过首先搜索特定数据块来搜索行。因此,需要数据块中的行数来估计哪个数据块托管特定行。
Hakan因子估计数据块中的行数。Hakan因子可以通过以下方式计算:将行中每列的字长相加并减去安全因子,并且然后将该数字除以数据块的大小。安全因子用于考虑在定义Hakan因子之后将列添加到表的可能性。将列添加到表减少了可以存储在数据块中的行的数量。
Hakan因子用于各种数据库过程,因此一旦它已经被定义一次就不容易改变。例如,虽然表的数据块中的列的数量可能改变,但是由于Hakan因子是数据库服务器实例106基于位向量中的特定位来访问表182中的特定行的必要属性,因此一旦创建了位图索引184,就使得表的Hakan因子不可变。
因此,作为CTFE操作的一部分,源表的索引所依赖的逻辑外属性(诸如Hakan因子)基于源表的对应属性从源表复制到新表。
硬件概述
根据一个实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行所述技术,或者可以包括诸如被持久性地编程以执行所述技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)之类的数字电子设备,或者可以包括被编程为按照固件、存储器、其它存储装置或者其组合中的程序指令来执行所述技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制的编程组合来实现所述技术。专用计算设备可以是台式计算机***、便携式计算机***、手持式设备、联网设备或者结合硬连线逻辑和/或程序逻辑来实现所述技术的任何其它设备。
例如,图5是示出本发明的实施例可以在其上实现的计算机***500的框图。计算机***500包括总线502或者用于传送信息的其它通信机制,以及与总线502耦合以用于处理信息的硬件处理器504。硬件处理器504可以是例如通用微处理器。
计算机***500还包括耦合到总线502以用于存储信息和要由处理器504执行的指令的主存储器506,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器506还可以用于在要由处理器504执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器504可访问的非暂态存储介质中时,这种指令使计算机***500成为被定制为执行指令中指定的操作的专用机器。
计算机***500还包括耦合到总线502的只读存储器(ROM)508或者其它静态存储设备,用于为处理器504存储静态信息和指令。诸如磁盘、光盘或固态驱动器之类的存储设备510被提供并且耦合到总线502,用于存储信息和指令。
计算机***500可以经总线502耦合到诸如阴极射线管(CRT)之类的显示器512,用于向计算机用户显示信息。输入设备514(包括字母数字键和其它键)耦合到总线502,用于向处理器504传送信息和命令选择。另一种类型的用户输入设备是游标控制器516,诸如鼠标、轨迹球或者游标方向键,以用于向处理器504传送方向信息和命令选择以及用于控制显示器512上的游标移动。这种输入设备通常具有在两个轴(第一轴(例如,x)和第二轴(例如,y))上的两个自由度,以允许设备在平面内指定位置。
计算机***500可以利用与计算机***相结合使计算机***500成为专用机器或者把计算机***500编程为专用机器的定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术。根据一种实施例,本文的技术由计算机***500响应于处理器504执行包含在主存储器506中的一条或多条指令的一个或多个序列而被执行。这种指令可以从诸如存储设备510之类的另一存储介质读取到主存储器506中。包含在主存储器506中的指令序列的执行使处理器504执行本文所述的过程步骤。在可替代实施例中,硬连线的电路***可以代替软件指令使用或者与软件指令结合使用。
如在本文所使用的,术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非暂态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器,诸如存储设备510。易失性介质包括动态存储器,诸如主存储器506。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带、或者任何其它磁性数据存储介质、CD-ROM,任何其它光学数据存储介质、具有孔模式的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。
存储介质与传输介质不同但是可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线502的导线。传输介质还可以采取声波或光波的形式,诸如在无线电数据通信和红外数据通信中产生的声波或光波。
把一条或多条指令的一个或多个序列携带到处理器504以供执行可以涉及各种形式的介质。例如,指令最初可以在远端计算机的磁盘或固态驱动器上携带。远端计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机***500本地的调制解调器可以接收电话线上的数据并且使用红外发送器把数据转换成红外信号。红外检测器可以接收在红外信号中携带的数据并且适当的电路***可以把数据放在总线502上。总线502把数据携带到主存储器506,处理器504从主存储器506检索并执行指令。由主存储器506接收的指令可以可选地在由处理器504执行之前或之后存储在存储设备510上。
计算机***500还包括耦合到总线502的通信接口518。通信接口518提供耦合到网络链路520的双向数据通信,其中网络链路520连接到本地网络522。例如,通信接口518可以是综合业务数字网络(ISDN)卡、线缆调制解调器、卫星调制解调器、或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口518可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。无线链路还可以被实现。在任何此类实现中,通信接口518都发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。
网络链路520通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路520可以通过本地网络522提供到主机计算机524或者到由互联网服务提供商(ISP)526操作的数据装备的连接。ISP 526又通过现在通常称为“互联网”528的全球分组数据通信网络提供数据通信服务。本地网络522和互联网528都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及在网络链路520上并通过通信接口518的信号是传输介质的示例形式,其中信号把数字数据携带到计算机***500或者携带来自计算机***500的数字数据。
计算机***500可以通过(一个或多个)网络、网络链路520和通信接口518发送消息和接收数据,包括程序代码。在互联网示例中,服务器530可以通过互联网528、ISP 526、本地网络522和通信接口518发送对于应用程序的请求代码。
接收到的代码可以在它被接收时由处理器504执行,和/或被存储在存储设备510或其它非易失性存储装置中,以供以后执行。
在前面的说明书中,已经参考可以依据实施方式而不同的众多的具体细节描述了本发明的实施例。因此,说明书和附图应当被认为是说明性的而不是限制性的。本发明的范围的唯一且排他的指示、以及申请人所预期的作为本发明的范围的内容是以权利要求发布的具体形式从本申请发布的权利要求集合的书面和等价范围,包括任何后续的补正。
Claims (13)
1.一种方法,包括:
接收引用第一数据库表并指定创建具有第一数据库表的一个或多个物理属性的第二数据库表的DDL语句;
响应于接收到所述DDL语句,创建具有所述第一数据库表的一个或多个物理属性的第二数据库表;
其中所述一个或多个物理属性定义持久存储装置上存储所述第一数据库表的数据块内的数据组织;
其中所述一个或多个物理属性包括以下特定物理特性中的至少一个:
所述第一数据库表的数据块的物理列顺序,以及
从所述第一数据库表中截断的列在数据块内的位置。
2.如权利要求1所述的方法,还包括:
在接收到所述DDL语句之前,使第一数据库表中的第一列不可见;以及
响应于接收到所述DDL语句,基于第一列不可见来创建具有不可见的第二列的第二数据库表。
3.如权利要求1所述的方法,还包括:
在接收到所述DDL语句之前,使得第一数据库表中的第一列被隐藏;以及
基于第一列被隐藏,创建具有被隐藏的第二列的第二数据库表。
4.如权利要求1所述的方法,还包括:
在接收到所述DDL语句之前,使得第一数据库表中的第一列是虚拟的;以及
响应于接收到所述DDL语句,基于第一列是虚拟的来创建具有虚拟的第二列的第二数据库表。
5.如权利要求1所述的方法,还包括:
在接收到所述DDL语句之前,使得第一数据库表中的第一列被加密;以及
响应于接收到所述DDL语句,基于第一列被加密来创建具有被加密的第二列的第二数据库表。
6.如权利要求1所述的方法,其中至少一个特定物理属性与第一数据库表的对应逻辑属性不同;其中逻辑属性是暴露给访问第一数据库表的在关系数据库管理***外部的实体的表属性。
7.如权利要求6所述的方法,还包括:
在接收所述DDL语句之前,改变第一数据库表中的逻辑列顺序而不改变物理列顺序;以及
响应于接收到所述DDL语句,创建具有与第一数据库表相同的逻辑列顺序和物理列顺序的第二数据库表。
8.如权利要求6所述的方法,还包括:
在接收到所述DDL语句之前,改变给定数据块中存储的行的数量而不改变指示所述给定数据块中的行数的特定逻辑外属性;以及
响应于接收到所述DDL语句,创建具有与第一数据库表相同的逻辑外属性中的一个或多个逻辑外属性的第二数据库表,所述一个或多个逻辑外属性包括指示给定数据块中的行数的所述特定逻辑外属性。
9.如权利要求1所述的方法,其中所述DDL语句引用具有子分区的分区;并且其中所述方法还包括:创建具有与第一数据库表相同的逻辑外属性中的一个或多个逻辑外属性的第二数据库表,所述一个或多个逻辑外属性包括子分区的分区标准。
10.如权利要求1所述的方法,还包括:
确定所述第一数据库表的所述一个或多个物理属性中的物理列属性。
11.一个或多个携带指令的计算机可读介质,所述指令当由一个或多个处理器执行时使得如权利要求1-10中任一项所述的方法被执行。
12.一种***,包括一个或多个计算设备,所述***被配置为使得如权利要求1-10中任一项所述的方法被执行。
13.一种包括用于执行如权利要求1-10中任一项所述的方法的部件的装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562243346P | 2015-10-19 | 2015-10-19 | |
US62/243,346 | 2015-10-19 | ||
US15/228,831 | 2016-08-04 | ||
US15/228,831 US10657116B2 (en) | 2015-10-19 | 2016-08-04 | Create table for exchange |
PCT/US2016/057745 WO2017070234A1 (en) | 2015-10-19 | 2016-10-19 | Create table for exchange |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108369587A CN108369587A (zh) | 2018-08-03 |
CN108369587B true CN108369587B (zh) | 2023-03-14 |
Family
ID=58523923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680071158.5A Active CN108369587B (zh) | 2015-10-19 | 2016-10-19 | 创建用于交换的表 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10657116B2 (zh) |
EP (1) | EP3365812A1 (zh) |
CN (1) | CN108369587B (zh) |
WO (1) | WO2017070234A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10635674B2 (en) | 2012-09-28 | 2020-04-28 | Oracle International Corporation | Migrating a pluggable database between database server instances with minimal impact to performance |
US11048725B2 (en) * | 2017-07-25 | 2021-06-29 | Sap Se | Methods and systems for unified data sources |
US11151111B2 (en) * | 2017-11-30 | 2021-10-19 | Futurewei Technologies, Inc. | Redistributing table data in a database cluster |
CN108415994B (zh) * | 2018-02-13 | 2021-03-02 | 北京天元创新科技有限公司 | 一种网络管理***报表生成方法、装置和设备 |
US10824624B2 (en) * | 2018-07-12 | 2020-11-03 | Bank Of America Corporation | System for analyzing, optimizing, and remediating a proposed data query prior to query implementation |
US11086828B2 (en) * | 2018-10-12 | 2021-08-10 | Sap Se | Compression of column store tables |
CN111221883B (zh) * | 2018-11-27 | 2024-04-26 | 浙江宇视科技有限公司 | 数据统计方法及*** |
US11232104B2 (en) * | 2019-01-21 | 2022-01-25 | International Business Machines Corporation | Join and predicate filtering using string lengths for variable character fields |
US11176133B2 (en) * | 2019-04-04 | 2021-11-16 | Sap Se | Filter evaluation for table fragments |
CN110083617B (zh) * | 2019-05-05 | 2021-06-01 | 上海达梦数据库有限公司 | 一种ddl语句的处理方法、装置、电子设备和介质 |
CN110399354B (zh) * | 2019-07-29 | 2022-03-18 | 锐捷网络股份有限公司 | 数据库的分区交换方法及装置 |
CN110515954B (zh) * | 2019-08-29 | 2023-01-31 | 北京博睿宏远数据科技股份有限公司 | 一种数据处理方法、装置、设备和存储介质 |
US11526500B2 (en) * | 2019-12-12 | 2022-12-13 | Sap Se | System and method for initiating bulk inserts in a distributed database |
CN111597572B (zh) * | 2020-05-20 | 2023-08-29 | 贵州电网有限责任公司 | 一种变电站图档资料管理查阅方法及*** |
CN113868261A (zh) * | 2021-10-13 | 2021-12-31 | 广州海量数据库技术有限公司 | openGauss平台下二级分区表的构建方法和构建*** |
CN115687343A (zh) * | 2022-09-29 | 2023-02-03 | 阿里云计算有限公司 | 数据库***及数据库列变更方法 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7031987B2 (en) | 1997-05-30 | 2006-04-18 | Oracle International Corporation | Integrating tablespaces with different block sizes |
US9239763B2 (en) | 2012-09-28 | 2016-01-19 | Oracle International Corporation | Container database |
US7099893B2 (en) | 2002-06-28 | 2006-08-29 | Sap Aktiengesellschaft | Recording application user actions for application testing |
US7873684B2 (en) | 2003-08-14 | 2011-01-18 | Oracle International Corporation | Automatic and dynamic provisioning of databases |
US20060179116A1 (en) | 2003-10-10 | 2006-08-10 | Speeter Thomas H | Configuration management system and method of discovering configuration data |
US7624120B2 (en) | 2004-02-11 | 2009-11-24 | Microsoft Corporation | System and method for switching a data partition |
US7571173B2 (en) | 2004-05-14 | 2009-08-04 | Oracle International Corporation | Cross-platform transportable database |
US8554806B2 (en) | 2004-05-14 | 2013-10-08 | Oracle International Corporation | Cross platform transportable tablespaces |
US20060020650A1 (en) * | 2004-07-20 | 2006-01-26 | Guozhong Shen | Ripple elimination filter |
US20060123009A1 (en) * | 2004-12-07 | 2006-06-08 | Microsoft Corporation | Flexible database generators |
US8112459B2 (en) * | 2004-12-17 | 2012-02-07 | International Business Machines Corporation | Creating a logical table from multiple differently formatted physical tables having different access methods |
WO2006089092A2 (en) * | 2005-02-16 | 2006-08-24 | Ziyad Dahbour | Hierarchal data management |
US7933869B2 (en) | 2006-12-29 | 2011-04-26 | Sap Ag | Method and system for cloning a tenant database in a multi-tenant system |
US7476637B1 (en) * | 2007-07-19 | 2009-01-13 | Catalytic Distillation Technologies | Coated catalyst for aromatic alkylation |
US9418094B2 (en) * | 2008-02-13 | 2016-08-16 | Oracle International Corporation | Method and apparatus for performing multi-stage table updates |
US8473594B2 (en) | 2008-05-02 | 2013-06-25 | Skytap | Multitenant hosted virtual machine infrastructure |
US8401991B2 (en) * | 2008-08-08 | 2013-03-19 | Oracle International Corporation | Database-based inference engine for RDFS/OWL constructs |
US8793332B2 (en) * | 2009-07-21 | 2014-07-29 | Apple Inc. | Content tagging using broadcast device information |
US8386431B2 (en) | 2010-06-14 | 2013-02-26 | Sap Ag | Method and system for determining database object associated with tenant-independent or tenant-specific data, configured to store data partition, current version of the respective convertor |
US8515945B2 (en) * | 2010-11-16 | 2013-08-20 | Sybase, Inc. | Parallel partitioning index scan |
DE102011077614B4 (de) * | 2011-06-16 | 2023-08-17 | Osram Gmbh | Verfahren zur Herstellung einer Leuchtvorrichtung und Leuchtvorrichtung |
US10635674B2 (en) | 2012-09-28 | 2020-04-28 | Oracle International Corporation | Migrating a pluggable database between database server instances with minimal impact to performance |
WO2014101207A1 (en) * | 2012-12-31 | 2014-07-03 | Sybase, Inc. | Continuous change data capture without disruption of ddl |
JP2015177061A (ja) * | 2014-03-14 | 2015-10-05 | 株式会社東芝 | 半導体装置の製造方法および半導体装置 |
US9003109B1 (en) * | 2014-05-29 | 2015-04-07 | SanDisk Technologies, Inc. | System and method for distributed computing in non-volatile memory |
US9965497B2 (en) * | 2014-05-29 | 2018-05-08 | Oracle International Corporation | Moving data between partitions |
US20150363435A1 (en) * | 2014-06-13 | 2015-12-17 | Cisco Technology, Inc. | Declarative Virtual Data Model Management |
CN104615750B (zh) * | 2015-02-12 | 2017-11-03 | 中国农业银行股份有限公司 | 一种主机***下的内存数据库的实现方法 |
-
2016
- 2016-08-04 US US15/228,831 patent/US10657116B2/en active Active
- 2016-10-19 CN CN201680071158.5A patent/CN108369587B/zh active Active
- 2016-10-19 EP EP16790823.5A patent/EP3365812A1/en not_active Ceased
- 2016-10-19 WO PCT/US2016/057745 patent/WO2017070234A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN108369587A (zh) | 2018-08-03 |
US20170109386A1 (en) | 2017-04-20 |
WO2017070234A1 (en) | 2017-04-27 |
US10657116B2 (en) | 2020-05-19 |
EP3365812A1 (en) | 2018-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369587B (zh) | 创建用于交换的表 | |
US20190197026A1 (en) | Combined Row And Columnar Storage For In-Memory Databases For OLTP And Analytics Workloads | |
US9916352B2 (en) | Caching external data sources for SQL processing | |
US10311048B2 (en) | Full and partial materialization of data from an in-memory array to an on-disk page structure | |
US9779104B2 (en) | Efficient database undo / redo logging | |
US10642831B2 (en) | Static data caching for queries with a clause that requires multiple iterations to execute | |
US10725987B2 (en) | Forced ordering of a dictionary storing row identifier values | |
EP1222569B1 (en) | Method and systems for making olap hierarchies summarisable | |
US9990398B2 (en) | Inferring dimensional metadata from content of a query | |
US8712972B2 (en) | Query optimization with awareness of limited resource usage | |
US9454572B2 (en) | Out-of-place materialized view refresh | |
US9740718B2 (en) | Aggregating dimensional data using dense containers | |
US10929360B2 (en) | Filtered partition maintenance operations | |
US9836519B2 (en) | Densely grouping dimensional data | |
US10678792B2 (en) | Parallel execution of queries with a recursive clause | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
US20150088919A1 (en) | Transforming a query to reuse stored data | |
US8046352B2 (en) | Expression replacement in virtual columns | |
US20100235344A1 (en) | Mechanism for utilizing partitioning pruning techniques for xml indexes | |
US9489413B2 (en) | Asynchronous global index maintenance during partition maintenance | |
Kvet et al. | Master index access as a data tuple and block locator | |
US10366067B2 (en) | Adaptive index leaf block compression | |
US10528538B2 (en) | Leveraging SQL with user defined aggregation to efficiently merge inverted indexes stored as tables |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |