不确定您是否已经知道这一点,但从sps8开始(似乎与Rev。74),SAP HANA提供了在列存储表中具有标识列的选项。
这里的想法是,您可以将数据插入表中,大数据入门,并且每一行将自动获得一个新的唯一编号。
当然,这是可能的,例如,通过定义序列并使用.nextval作为插入/更新命令,但是它"内置"到表是一种整洁,可以帮助使数据加载更容易。
要创建这样一个标识列,只需使用以下语法:
创建列表(GENERATE ALWAYS AS identity);
创建列表(默认生成为IDENTITY);
注意(编辑27.06.14):上面的语法(现在划掉)实际上只正确了一半
虽然技术上可行,但并没有产生正确的结果,因为它总是会生成一个ID值,即使提供了一个。
新引入的SPS 8默认生成选项以更好的方式处理这个问题。它只在没有提供值的情况下生成值,因此应该使用默认值。这一点在迁移用例中尤其重要,在迁移用例中,必须将具有标识列现有值的现有数据插入表中。
请确保不要将标识放入任何类型的引号中!
例如:
创建列表一些
名称
(ID bigint not null主键默认生成为IDENTITY,
名称nvarchar(30));
现在我们可以这样做:
插入一些
名称(NAME)值('Huey');
插入一些
名称(NAME)值('Dewey');
插入一些
名称(NAME)值('Louie');
从一些名称中选择*;
这背后的魔力当然是由序列创造的:
从table_name='some_names'的table_columns中选择column_name,column_id
从sequence_name如'%145210%'的序列中选择*
aaaa就是这样
从其他平台迁移到SAP更加容易哈娜
给你-现在你知道了!
干杯,
拉尔斯
终于!
谢谢!
正是我要找的,谢谢你的信息拉尔斯!
是否可以手动增加这样的顺序?对于迁移来说,序列很难从1开始……
巧合的是,最近一位同事问了一个基本相同的问题。
我没有找到解决这个问题的方法,物联网竞赛,直到另一位同事(有时真的很高兴有这么多人)提出了在定义时指定序列起点的选项时间。
创建列表一些_名称
(ID bigint not null主键默认生成为IDENTITY(从xyz开始),
NAME nvarchar(30));
通过这种方式,您可以用一个最大值为xyz的ID加载现有数据,对于任何新插入的记录,序列将接管。
这应该从SPS 8开始工作。对于Rev 74,您必须亲自尝试。
它在Rev 74上也很好!!谢谢你的帮助,拉尔斯!
是的。rev74支持此功能。
问候,Ruediger
注意:
在rev74上,identity列只保留值,服务器将重新启动。如果您检查序列定义,如Lars的blog所示,有RESET BY子句。
此系统生成的序列不能修改。结果是,在服务器上,"标识"列中的"重新启动"值丢失。
还有人看到相同的行为吗?
嗯。。。任何RESET BY子句只会影响序列的当前值,而不会影响基于序列填充的列。
您可能希望为此打开一个支持事件。
我也遇到了同样的问题。
您解决了这个问题吗?
谢谢Lars,
表中的IDENTITY列是按照您的建议实现的,即"默认生成为IDENTITY"
现在,我正在编写存储过程,希望将表1的ID更新到表2中。在SQL Server中,这可以通过SCOPE\u IDENTITY()完成。
请建议如何在SAP HANA中实现这一点?
Hey Chetan
就我个人而言,我对MS SQL Server几乎没有经验,基于SCOPE\u IDENTITY(Transact-SQL),我认为SCOPE\u IDENTITY()功能目前处于试验阶段。它似乎是返回当前执行上下文中标识列的最后一个插入值。
实际上,它似乎提供了。currval将提供的值,如果您将使用序列生成ID。
由于SAP HANA的标识列基于序列,我的建议是您可以利用这一点并尝试查询表的序列。或者,您可以手动查询列的最大值。
-Lars
感谢您的快速响应,
由于我们正在从SQL Server迁移到SAP HANA,怎么做淘客推广,支持通过标识选项检索插入的ID非常关键(无顺序)。相信我们会得到这是未来的版本
此外,我们不能手动查询最大列,因为我们有并发用户。
戴夫C.
谢谢拉尔斯
谢谢拉尔斯分享这个信息。
谢谢拉尔斯的信息-后续问题:我们能把这个身份放进一个hdbtable文件吗?我在开发人员指南中没有看到任何关于在hdbtable中使用它的信息。
有没有办法把它放到我们的设计时存储库中?
我也有兴趣把它放到hdtable里。
谢谢电子人。
我真的应该考虑买一张新的头像,嗯。。。?
是的,是时候让世界知道真相了。我在想第一代终结者。
嗨,拉尔斯,
我有一个关于hana中的身份特征的问题要问你。
我已经定义了一个身份栏,正如你文章中所描述的。
我正在做的是导入而不是插入,csv文件中没有包含一个在我的文件中定义的身份栏hana表。
问题是导入试图将我的文件的第一列插入到标识列中,但失败了。
我搜索了一个又一个文档,啥叫人工智能,但没有找到任何有关如何处理此问题的信息。
非常感谢,
肖恩