2017-05-25 2 views
1

J'essaie de charger des données XML imbriquées dans Hive. Les données de l'échantillon est la suivante ...Chargement de données XML imbriquées dans Hive en utilisant 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> 

Voici la commande que j'utilise:

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>"); 

sortie que je suis Gettings est:

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) 

Je reçois null valeurs pour OrderID, CustomerID et OrderDate. Quelqu'un peut-il m'aider à résoudre ce problème?

Merci

+0

Je pense que je ne devrais pas configurer 'OrderID',' CustomerID', '' OrderDate' dans SERDEPROPERTIES' , car ce ne sont pas des colonnes de table. Donc, je les ai enlevés. J'ai essayé '/ text()' pour 'Orders'. Dans ce cas, je reçois 'NULL'. 'ruche> sélectionnez * parmi les commandes du client; OK ALFKI NULL Alfreds Futterkiste ANATR NULL Ana Trujillo Empededados y helados Temps pris: 0.037 secondes, Récupérée: 2 rangée (s) ' –

Répondre

1
create external table customerorders 
(
    custid  string 
    ,orders  array<struct<Orders: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.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>" 
); 

-

select * from customerorders 
; 

-

+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------+ 
| custid |                   orders                   |   companyname    | 
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------+ 
| ALFKI | [{"orders":{"orderid":"10643","customerid":"ALFKI","orderdate":"1997-08-25"}},{"orders":{"orderid":"10692","customerid":"ALFKI","orderdate":"1997-10-03"}}] | Alfreds Futterkiste    | 
| ANATR | [{"orders":{"orderid":"10308","customerid":"ANATR","orderdate":"1996-09-18"}}]                    | Ana Trujillo Emparedados y helados | 
+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------+   
+0

Merci beaucoup pour la solution –