如何解决 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。
我在使用提取数据的模板将 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。