Я пишу КМ в 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$>'
<$
}
$>
Этот «неработающий код» не всегда одинаков.Иногда переменные подстановки нарушаются.При необходимости я могу предоставить больше примеров.
Обходное решение состоит в том, чтобы написать свой код во внешнем приложении (например, в блокноте), а затем скопировать и вставить код в разделе Команда из задачи свойств (не взадание напрямую).
Кто-нибудь знает в чем причина проблемы?Это не происходит на каждой задаче.