几乎如标题所述:CREATE TABLE
和CREATE COLUMN TABLE
有什么区别?
两个似乎都创建了一个表,有什么区别?
SAP HANA支持将数据存储在列存储或行存储中的表。
这些指的是数据库(HANA)如何管理表中存储的数据的不同方式。它们不影响如何在SQL语句中使用数据。
从技术上讲,HANA中CREATE TABLE
的语法已扩展为包括一种选择应创建两种表类型中的一种的方法:
CREATE [COLUMN|ROW] TABLE <table_name> ...
这意味着可以(可能应该)在任何CREATE TABLE
命令中包括所需的表类型,但也可以选择不这样做(即,保持与标准SQL的兼容性)。
现在,当not指定表类型时将获得哪种表类型取决于indexserver.ini
配置文件中的HANA参数。如果参数[sql] - [default_table_type]
设置为row
,则不指定表类型将得到存储在行存储中的表。如果我没有记错的话,这也是参数直到HANA 2 SPS 03为止的默认值。
使用HANA 2 SPS 04,参数的默认值最终更改为column
。
这很重要:在SAP HANA中,几乎在所有情况下,您想要表类型为COLUMN。
行存储表具有非常不同的性能和内存需求特征,实际上仅用于非常特定数据访问和修改模式。这些模式例如:
UPDATE
s在记录上的频率很高(想想每秒更新同一条记录数千次)。 对于绝大多数 CREATE COLUMN TABLE
是SAP HANA中的右选择。列存储表支持压缩,分区,内存移位以及行存储表不可用的许多其他技术。
然而,两种表类型的外观和感觉都与任何SQL命令相同。打个比方,其他DBMS支持“ cluster”或“ heap”等不同的表类型,这会影响数据在内部存储的方式,而无论使用哪种类型,都可以使用这些表。列存储或行存储的HANA设置与内部存储类似。
[所有(还有更多)当然都记录在案(例如here),并在许多不同的地方进行了解释(例如我的书SAP HANA Administration)。
请注意,在列存储还是行存储之间进行选择与该表是temporary还是permanent表无关。两种表类型都可以像预期那样永久保留数据。
[当然,人们总是可以使用CREATE TEMPORARY TABLE
,它也提供了一系列的选择... CREATE TEMPORARY { ROW | COLUMN } TABLE | LOCAL TEMPORARY { ROW | COLUMN } TABLE
,但是对于这个答案,我们假装我们没有想到要保存我们的理智。
了解HANA具有内存表的这两种根本不同的实现非常重要。确保您不会意外地(通过使用默认值)为海量数据分析或真正为大多数用例创建行存储表。每当您不确定表类型时,请从column存储表开始,看看是否适用于您的用例。如果您确实有一个用例,行存储是更好的选择,则可以(几乎)始终通过ALTER TABLE
命令将表从一种存储类型转换为另一种存储类型。