Обработка типов данных Oracle и HANA - PullRequest
0 голосов
/ 23 декабря 2018

У нас Oracle в качестве источника и HANA 1.0 sps12 в качестве цели.Мы копируем Oracle в HANA с помощью Informatica CDC посредством репликации в реальном времени.В Oracle для многих столбцов у нас есть тип данных как CHAR, то есть тип данных фиксированной длины.Поскольку HANA официально не поддерживает тип данных CHAR, мы используем тип данных NVARCHAR вместо того же самого.Проблема, с которой мы сталкиваемся, заключается в том, что в Oracle CHAR тип данных имеет фиксированную длину и дополняет пробелы всякий раз, когда фактическая строка имеет меньшую длину, чем тип данных, у нас есть много лишних пробелов в целевой базе данных HANA для таких столбцов.

Например,,Если столбец col1 имеет тип данных

CHAR (5)

и значение как 'A', он реплицируется в HANA как 'A ', т. Е. 'A' с добавлениемчетыре лишних пробела, вызывающие много проблем в запросах и интерпретации данных

Возможно ли реализовать тип данных CHAR в HANA?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы можете использовать функцию RPAD в Informatica при передаче данных в Hana.Просто убедитесь, что Hana не обрезается автоматически.

Итак, для исходного столбца CHAR (5) вы должны использовать:

out_Column = RPAD(input_Column, 5)

Практически точно, как сказано в документации: enter image description here

0 голосов
/ 24 декабря 2018

Я не знаю HANA, и это больше комментарий, чем ответ, но я решил разместить его здесь, так как есть некоторый код, который я хотел бы, чтобы вы увидели.

Вот таблица, столбец которойCHAR тип данных:

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

Table created.

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

1 row created.

Длина столбца равна 10 (что вы уже знаете):

SQL> select length(col) from test;

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

Но, если вы TRIM это, вы, выполучить лучший результат, тот, который вы ищете:

SQL> select length(  TRIM  (col)) from test;

LENGTH(TRIM(COL))
-----------------
                3

SQL>

Итак: если вы можете убедить процесс зеркалирования, чтобы применить функцию TRIM к этим столбцам, вы можете получитьчто вы хотите.


[ПРАВИТЬ, увидев комментарий Ларса и перечитав вопрос]

Вправо;проблема, кажется, прямо противоположна тому, что я изначально понял.Если в этом суть, может быть, RPAD поможет.Вот пример:

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

Table created.

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

1 row created.

SQL> select length(col) from test;

LENGTH(COL)
-----------
          3

SQL> insert into test values (rpad('def', 10, ' '));

1 row created.

SQL> select col, length(col) len from test;

COL               LEN
---------- ----------
abc                 3
def                10

SQL>
...