Код фазы замены ODI KM после отправки становится неправильным - PullRequest
2 голосов
/ 18 апреля 2019

Я пишу КМ в ODI 12.2.1.У меня следующая проблема:
после того, как я закончу писать код в задаче и нажимаю «ОК», некоторые строки кода изменены (неправильные): пример правильного кода:

INSERT INTO TABLE <?=tempTblNmDt?>
SELECT
<%=odiRef.getAllTargetColList("", "cast([COL_NAME] as [DEST_CRE_DT]) as [COL_NAME]", ",\n\t", "","") %>
FROM
(
SELECT
<%=odiRef.getColList("", "<? if ( (\u0022[DEST_CRE_DT]\u0022==\u0022TIMESTAMP\u0022) && (\u0022[DATA_FORMAT]\u0022!=\u0022N/A\u0022) ) {?> from_unixtime(unix_timestamp( [EXPRESSION], 'yyyy-MM-dd HH:mm:ss')) AS [COL_NAME]  <? } else { ?> cast([EXPRESSION] as [DEST_CRE_DT]) as [COL_NAME] <? }?>", ",\n\t", "","(INS and UPD)") %>
--TECHNICAL COLUMNS
,<?=vT_DL_CTI?> as T_DL_CTI
,from_unixtime(unix_timestamp()) as T_DL_INS_DT
,'<?=partDate?>' T_DL_COB_DT
FROM <?=tempTblNmStr?> <$=tableAlias$>
) SUBSELECT

После нажатия кнопки Применить> OK:

INSERT INTO TABLE <?=tempTblNmDt?>
SELECT
<%=odiRef.getAllTargetColList("", "cast([COL_NAME] as [DEST_CRE_DT]) as [COL_NAME]", ",\n\t", "","") %>
FROM
(
SELECT
<%=odiRef.getColList("", "<? if ( (\u0022[DEST_CRE_DT]\u0022==\u0022TIMESTAMP\u0022) && (\u0022[DATA_FORMAT]\u0022!=\u0022N/A\u0022) ) {?> from_unixtime(unix_timestamp( [EXPRESSION], 'yyyy-MM-dd HH:mm:ss')) AS [COL_NAME]  <? } else { ?> cast([EXPRESSION] as [DEST_CRE_DT]) as [COL_NAME] <? }?>", ",\n\t", "","(INS and UPD)") %>
--TECHNICAL COLUMNS
,<?=vT_DL_CTI?> as T_DL_CTI
,from_unixtime(unix_timestamp()) as T_DL_INS_DT
,'<?=partDate?>' T_DL_COB_DT
FROM <?=tempTblNmStr?> <$=tableAlias$>T
) SUBSELECT

Пример 2: До:

<$ if (KM_ALL_DELIVERY_TYPE.equals("INTRA_DAY_DELTA")) 
{
$>
<@
  intraDayPartitionLocation = "#location";
@>
<$
}
$>

После:

<$ if (KM_ALL_DELIVERY_TYPE.equals("INTRA_DAY_DELTA")) 
{
$>
<@
  intraDayPartitionLocation = "#location";
@>
<
}
$>

Пример 3 До:

<$ if (KM_ALL_DELIVERY_TYPE.equals("INTRA_DAY_DELTA")) 
{
$>
    SELECT
      ifnull(substring(location,instr(location,'datalake')),'N/A') location
    FROM
      hive.DBS
    LEFT JOIN hive.TBLS
    ON
      (
        DBS.DB_ID       = TBLS.DB_ID
      AND upper(TBLS.tbl_name) = '<$=tableShortNm$>_RAW'
      )
    LEFT JOIN hive.PARTITIONS
    ON
      (
        TBLS.TBL_ID = PARTITIONS.TBL_ID
      AND PARTITIONS.PART_NAME LIKE '%<$=partDate$>%'
      )
    LEFT JOIN hive.SDS
    ON
      (
        PARTITIONS.SD_ID = SDS.SD_ID
      )
    WHERE
      upper(DBS.name)='<$=rawSchema$>'
<$
}
$>

После:

<$ if (KM_ALL_DELIVERY_TYPE.equals("INTRA_DAY_DELTA")) 
{
$>
    SELECT
      ifnull(substring(location,instr(location,'datalake')),'N/A') location
    FROM
      hive.DBS
    LEFT JOIN hive.TBLS
    ON
      (
        DBS.DB_ID       = TBLS.DB_ID
      AND upper(TBLS.tbl_name) = '<$=tableShortNm$>_RAW'
      )
    LEFT JOIN hive.PARTITIONS
    ON
      (
        TBLS.TBL_ID = PARTITIONS.TBL_ID
      AND PARTITIONS.PART_NAME LIKE '%<$=partDate$>%'
      )
    LEFT JOIN hive.SDS
    ON
      (
        PARTITIONS.SD_ID = SDS.SD_ID
      )
    WHERE
      upper(DBS.name>='<$=rawSchema$>'
<$
}
$>

Этот «неработающий код» не всегда одинаков.Иногда переменные подстановки нарушаются.При необходимости я могу предоставить больше примеров.

Обходное решение состоит в том, чтобы написать свой код во внешнем приложении (например, в блокноте), а затем скопировать и вставить код в разделе Команда из задачи свойств (не взадание напрямую).

Кто-нибудь знает в чем причина проблемы?Это не происходит на каждой задаче.

...