如何解决 MarkLogic 导入中的日期时间转换错误

How to resolve the dateTime casting error in MarkLogic import

我在使用提取数据的模板将 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] 或仅过滤掉具有空值或 whitespace-only 值的元素 [normalize-space()].

我有点惊讶它会抱怨,因为你的 <ns9:ActualArrivalDate xsi:nil="true" /> 数据元素有 @xsi:nil="true" 而 TDE 列有 <nullable>true</nullable>。我希望它会“看到”该元素具有空值,而不是空字符串。但是,我认为您可能需要将模式加载到模式数据库中,以指示特定元素可以为 nillable,否则它不会将其视为 null。