Ich versuche, verschachtelte XML-Daten in Hive zu laden. Beispieldaten wird wie folgt ...Laden verschachtelter XML-Daten in Hive mithilfe von SerDe
<CustomerOrders>
<Customers>
<CustID>ALFKI</CustID>
<Orders>
<OrderID>10643</OrderID>
<CustomerID>ALFKI</CustomerID>
<OrderDate>1997-08-25</OrderDate>
</Orders>
<Orders>
<OrderID>10692</OrderID>
<CustomerID>ALFKI</CustomerID>
<OrderDate>1997-10-03</OrderDate>
</Orders>
<CompanyName>Alfreds Futterkiste</CompanyName>
</Customers>
<Customers>
<CustID>ANATR</CustID>
<Orders>
<OrderID>10308</OrderID>
<CustomerID>ANATR</CustomerID>
<OrderDate>1996-09-18</OrderDate>
</Orders>
<CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
</Customers>
</CustomerOrders>
Unterhalb der Befehl, die ich verwende:
CREATE TABLE CUSTOMERORDERS(
CustID STRING,
Orders ARRAY<STRUCT<OrderID:STRING,CustomerID:STRING,OrderDate:STRING>>,
CompanyName STRING)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.CustID"="/Customers/CustID/text()",
"column.xpath.Orders"="/Customers/Orders",
"column.xpath.OrderID"="/Customers/Orders/OrderID",
"column.xpath.CustomerID"="/Customers/Orders/CustomerID",
"column.xpath.OrderDate"="/Customers/Orders/OrderDate",
"column.xpath.CompanyName"="/Customers/CompanyName/text()")
STORED AS INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
TBLPROPERTIES ("xmlinput.start"="<Customers>","xmlinput.end"= "</Customers>");
Ausgang, ich bin gettings ist:
hive> select * from customerorders;
OK
ALFKI [{"orderid":null,"customerid":null,"orderdate":null},{"orderid":null,"customerid":null,"orderdate":null}] Alfreds Futterkiste
ANATR [{"orderid":null,"customerid":null,"orderdate":null}] Ana Trujillo Emparedados y helados
Time taken: 0.039 seconds, Fetched: 2 row(s)
Ich erhalte null
Werte für OrderID
, CustomerID
und OrderDate
. Kann mir jemand bei der Lösung dieses Problems helfen?
Dank
Ich glaube, ich nicht 'OrderID' konfigurieren sollte,' CustomerID', 'OrderDate' in' SERDEPROPERTIES' weil sie keine Tabellenspalten sind. Also habe ich sie entfernt. Ich habe '/ text()' für 'Orders' ausprobiert. In diesem Fall bekomme ich "NULL". 'Bienenstock> wählen * von customerorders; OK ALFKI NULL Alfreds Futterkiste ANATR NULL Ana Trujillo Emparedados y helados Zeitaufwand: 0,037 Sekunden, abgerufen: 2 Zeile (n) ' –