Я получаю эту ошибку при преобразовании значения из элемента XML в столбец MarkLogic с использованием шаблона для извлечения данных.
22/05/12 10:22:17 WARN mapreduce.ContentWriter: Batch 1009629724.0: TDE-INDEX: Error applying template /powerbi/shipment-CBE123.xml to document /powerbi/shipment/CBE00038464N/C:/Users/admin-rp/Documents/Marklogic/ML_With_PowerBI/bi-tools-master/bi-tools-master/power-bi/marklogic_powerbi_tutorial/data/CBE00038464N.xml: TDE-EVALFAILED: Eval for Column POD_ETA_Act_Arr='ns10:ASN/ns10:Schedule/ns5:TransportationUnitHeader/ns5:PrimarytUnit/ns5:TransportUnit/ns5:PortOfDischarge/ns9:ActualArrivalDate' returns XDMP-CAST: (err:FORG0001) Invalid cast: xs:untypedAtomic("") cast as xs:dateTime
Значение элемента для поля ActualArrivalDate
в файле XML выглядит так:
<ns5:PortOfDischarge>
<ns9:PortName />
<ns9:PortCode />
<ns9:ScheduledArrivalDate xsi:nil = "true" />
<ns9:ActualArrivalDate xsi:nil = "true" />
<ns9:ScheduledDepartureDate xsi:nil = "true" />
<ns9:ActualDepartureDate xsi:nil = "true" />
</ns5:PortOfDischarge>
И моя форма шаблона для этого поля выглядит так:
<column>
<name>POD_ETA_Act_Arr</name>
<scalar-type>dateTime</scalar-type><val>ns10:ASN/ns10:Schedule/ns5:TransportationUnitHeader/ns5:PrimarytUnit/ns5:TransportUnit/ns5:PortOfDischarge/ns9:ActualArrivalDate</val>
<nullable>true</nullable>
</column>
Ошибка литья:
XDMP-CAST: (err:FORG0001) Invalid cast: xs:untypedAtomic("") cast as xs:dateTime
говорит вам, что нетипизированное атомарное значение пустой строки ""
не может быть приведено к xs:dateTime.
Одним из способов избежать этого может быть настройка XPath в шаблоне, чтобы исключить те, которые не имеют значения. Например, добавление предиката, чтобы гарантировать, что значение можно привести как xs:dateTime: [. castable as xs:dateTime]
, или просто отфильтровать элементы с пустыми значениями или значениями, содержащими только пробелы [normalize-space()]
.
Я немного удивлен, что он жалуется, поскольку ваш элемент данных <ns9:ActualArrivalDate xsi:nil = "true" />
имеет @xsi:nil = "true"
, а столбец TDE имеет <nullable>true</nullable>
. Я ожидаю, что он «увидит» этот элемент как имеющий нулевое значение, а не пустую строку. Тем не менее, я думаю, вам может потребоваться загрузить ваши схемы в базу данных схем, указав, что конкретный элемент может быть нулевым, иначе он не будет воспринимать его как нулевой.
Спасибо, я пока игнорирую значение с этим - <invalid-values>reject</invalid-values> Я очень новичок в marklogic и, возможно, со временем научусь управлять ими более организованным образом. Спасибо за ваше предложение.