SAP HANA 中的 CREATE TABLE 和 CREATE COLUMN TABLE 有什么区别

What is the difference between CREATE TABLE and CREATE COLUMN TABLE in SAP HANA

正如标题所说:CREATE TABLECREATE COLUMN TABLE 有什么区别?

两者貌似都创建了一个table,那么有什么区别呢?

SAP HANA 支持 tables 将数据存储在 列存储行存储.

这些指的是数据库 (HANA) 如何管理存储在 table 中的数据的不同方式。
它们 不会 影响数据在 SQL 语句中的使用方式。

从技术上讲,HANA 中 CREATE TABLE 的语法已扩展为包括一种选择应创建两种 table 类型中的哪一种的方法:

CREATE [COLUMN|ROW] TABLE <table_name> ...

这意味着可以(并且可能应该)在任何 CREATE TABLE 命令中包含所需的 table 类型,但也可以选择不这样做(即保持与标准 SQL).

默认设置

现在,当 不是 指定 table 类型时,您得到的 table 类型取决于 indexserver.ini 配置文件中的 HANA 参数. 如果参数 [sql] - [default_table_type] 设置为 row,则不指定 table 类型将获得存储在行存储中的 table。如果我没记错的话,这也是 HANA 2 SPS 03 之前参数的默认值。

在 HANA 2 SPS 04 中,参数的默认值最终更改为 column

你应该使用什么

这很重要:对于 SAP HANA,您希望 table 类型在几乎所有情况下都是 COLUMN

行存储 table 具有非常不同的性能和内存需求特征,实际上仅服务于非常具体的 数据访问和修改模式。 这些模式例如:

  • 始终 通过选择完整的主键进行全行访问。
  • 记录中 UPDATE 的高频率(想想每秒更新同一条记录数千次)。
  • 在 every/most column/s 中几乎完全不同的记录,绝对需要始终保存在内存中。

对于所有用例和数据类型的绝大多数CREATE COLUMN TABLE是SAP HANA中正确的选择。 列存储 tables 支持压缩、分区、内存置换和行存储 tables 不可用的许多其他技术。

它对您的程序的影响

然而,table 类型的“外观和感觉”与任何 SQL 命令相同。 打个比方,其他 DBMS 支持不同的 table 类型,如“集群”或“堆”,它们会影响数据在内部的存储方式,而 table 可以使用而不管选择的类型如何。
列存储或行存储的 HANA 设置与内部存储的选择类似。

所有这些(以及更多)当然都记录在案(例如 here) and explained in many different places (e.g. my book SAP HANA Administration)。

什么列和行存储不是关于

请注意,选择列存储还是行存储与table是临时还是永久[=88=无关] table。两种 table 类型都会像人们期望的那样永久保留数据。

当然,人们总是可以使用 CREATE TEMPORARY TABLE,它也有一系列的选择... CREATE TEMPORARY { ROW | COLUMN } TABLE | LOCAL TEMPORARY { ROW | COLUMN } TABLE 但是对于这个答案,让我们假装我们没有看到它来挽救我们的理智.

带走

理解 HANA 具有内存中 table 的这两种根本不同的实现是非常重要的。
确保您不会意外地(使用默认设置)为您的海量数据分析或大多数用例创建行存储 tables。
每当您不确定 table 类型时,请从 存储 table 开始,看看它是否适用于您的用例。如果您确实有一个用例,其中行存储是更好的选择,您可以(几乎)总是通过 ALTER TABLE 命令将 table 从一种存储类型转换为另一种存储类型。