Oracle vs HANA char数据类型处理

时间:2018-12-23 19:27:13

标签: oracle hana informatica-powercenter

我们将Oracle作为源,将HANA 1.0 sps12作为目标。我们正在通过实时复制将Oracle通过Informatica CDC镜像到HANA。在Oracle中,对于许多列,我们的数据类型为CHAR,即固定长度数据类型。由于HANA官方不支持CHAR数据类型,因此我们使用的是NVARCHAR数据类型,而不是相同的数据类型。我们面临的问题是-由于Oracle CHAR数据类型的长度固定,并且每当实际字符串的长度小于数据类型的长度时都附加空格,因此此类列的目标HANA数据库中会有很多额外的空间。

例如如果col1列的数据类型

  

CHAR(5)

,其值为'A',在HANA中被复制为'A ',即'A',后面附加四个空格,在查询和数据解释中引起很多问题

是否可以在HANA中实现类似CHAR的数据类型?

2 个答案:

答案 0 :(得分:0)

我不知道HANA,这不是评论,而是答案,但是我选择将其放在此处,因为有些代码我希望您看到。

这是一个表,其列的数据类型为 DOMDisplay.prototype.scrollPlayerIntoView = function(state) { let width = this.dom.clientWidth; let height = this.dom.clientHeight; let margin = width / 3; // The viewport let left = this.dom.scrollLeft, right = left + width; let top = this.dom.scrollTop, bottom = top + height; let player = state.player; let center = player.pos.plus(player.size.times(0.5)) .times(scale); if (center.x < left + margin) { // <---i stuck from here cant understand the logic this.dom.scrollLeft = center.x - margin; } else if (center.x > right - margin) { this.dom.scrollLeft = center.x + margin - width; } if (center.y < top + margin) { this.dom.scrollTop = center.y - margin; } else if (center.y > bottom - margin) { this.dom.scrollTop = center.y + margin - height; } };

CHAR

列的长度为10(您已经知道):

SQL> create table test (col char(10));

Table created.

SQL> insert into test values ('abc');

1 row created.

但是,如果您 TRIM ,您会得到一个更好的结果,那就是您想要的:

SQL> select length(col) from test;

LENGTH(COL)
-----------
         10

因此:如果您可以说服镜像过程以将SQL> select length( TRIM (col)) from test; LENGTH(TRIM(COL)) ----------------- 3 SQL> 函数应用于这些列,则可能会得到所需的内容。


[在看到Lars的评论并重新阅读问题后进行编辑]

正确;这个问题似乎与我最初理解的相反。如果那是重点,也许TRIM会有所帮助。这是一个示例:

RPAD

答案 1 :(得分:0)

You can use RPAD function in Informatica while transferring data to Hana. Just make sure if Hana doesn't trim automatically.

So, for the CHAR(5) source column you should use:

out_Column = RPAD(input_Column, 5)

Pretty much exactly, as the documentation says: enter image description here