2016-01-27 122 views
1

我想創建一個新的記錄類型列和非記錄類型列表。 該表將由查詢填充。創建一個表與記錄類型列

這是查詢:

select country, Count(*) CNT_Events,item,currency,sum(amount) as SUM_amount, count(transactionID) as CNT_transactionID 
from 
(select "US" country, "USD" currency, "book" item, 20 amount, 1 transactionID), 
(select "Spain" Country,"EUR" currency, "book" item, 10 amount, 2 transactionID), 
(select "US" Country,"USD" currency, "cup" item, 5 amount, 3 transactionID), 
(select "Spain" Country,"EUR" currency, "notebook" item, 15 amount, 4 transactionID), 
(select "Spain" Country,"EUR" currency, "notebook" item, 13 amount, 5 transactionID), 
(select "US" Country, "null" currency, "null" item, null amount, null transactionID) 
GROUP BY country, item, currency 

模式:

[ 
    {'name': 'country', 'type': 'STRING'}, 
    {'name': 'CNT_Events', 'type': 'INTEGER'}, 
    {'name': 'Purchases', 'type': 'RECORD', 
    'mode': 'REPEATED', 
    'fields': [ 
     {'name': 'item', 'type': 'STRING'}, 
     {'name': 'currency', 'type': 'STRING'}, 
     {'name': 'SUM_amount', 'type': 'integer'}, 
     {'name': 'CNT_transactionID', 'type': 'integer'} 
     ]  
     }, 

    ] 

,結果:

Country CNT_Events Purchases.item Purchases.currency Purchases.SUM_amount Purchases.CNT_transactionID 
US 3 cup USD 5 1  book USD 20 1 
Spain 3 book EUR 10 1  notebook EUR 28 2 

我該怎麼辦呢? 謝謝!

回答

2

下面應該工作

SELECT country, CNT_Events, Purchases.item, Purchases.currency, Purchases.SUM_amount, Purchases.CNT_transactionID 
FROM JS( 
    (// input table 
    SELECT country, SUM(CNT_Events) AS CNT_Events, NEST(CONCAT(item, ',', currency, ',', STRING(SUM_amount) , ',', STRING(CNT_transactionID))) AS Purchases 
    FROM ( 
     SELECT country, COUNT(1) CNT_Events, item, currency, SUM(amount) AS SUM_amount, COUNT(transactionID) AS CNT_transactionID 
     FROM 
     (SELECT "US" country, "USD" currency, "book" item, 20 amount, 1 transactionID), 
     (SELECT "Spain" Country,"EUR" currency, "book" item, 10 amount, 2 transactionID), 
     (SELECT "US" Country,"USD" currency, "cup" item, 5 amount, 3 transactionID), 
     (SELECT "Spain" Country,"EUR" currency, "notebook" item, 15 amount, 4 transactionID), 
     (SELECT "Spain" Country,"EUR" currency, "notebook" item, 13 amount, 5 transactionID), 
     (SELECT "US" Country, "null" currency, "null" item, NULL amount, NULL transactionID) 
     GROUP BY country, item, currency 
    ) GROUP BY country 
), 
    country, CNT_Events, Purchases, // input columns 
    "[ // output schema 
    {'name': 'country', 'type': 'STRING'}, 
    {'name': 'CNT_Events', 'type': 'INTEGER'}, 
    {'name': 'Purchases', 'type': 'RECORD', 
    'mode': 'REPEATED', 
    'fields': [ 
     {'name': 'item', 'type': 'STRING'}, 
     {'name': 'currency', 'type': 'STRING'}, 
     {'name': 'SUM_amount', 'type': 'integer'}, 
     {'name': 'CNT_transactionID', 'type': 'integer'} 
     ]  
    } 
    ]", 
    "function(row, emit) { // function 
    var c = []; 
    for (var i = 0; i < row.Purchases.length; i++) { 
     x = row.Purchases[i].split(','); 
     t = {item:x[0], 
      currency:x[1], 
      SUM_amount:parseInt(x[2]), 
      CNT_transactionID:parseInt(x[3])} ; 
     c.push(t); 
    }; 
    emit({country: row.country, CNT_Events: row.CNT_Events, Purchases: c}); 
    }" 
) 

我想輸出爲預期:

[ 
    { 
    "country": "US", 
    "CNT_Events": "3", 
    "Purchases": [ 
     { 
     "item": "book", 
     "currency": "USD", 
     "SUM_amount": "20", 
     "CNT_transactionID": "1" 
     }, 
     { 
     "item": "cup", 
     "currency": "USD", 
     "SUM_amount": "5", 
     "CNT_transactionID": "1" 
     } 
    ] 
    }, 
    { 
    "country": "Spain", 
    "CNT_Events": "3", 
    "Purchases": [ 
     { 
     "item": "notebook", 
     "currency": "EUR", 
     "SUM_amount": "28", 
     "CNT_transactionID": "2" 
     }, 
     { 
     "item": "book", 
     "currency": "EUR", 
     "SUM_amount": "10", 
     "CNT_transactionID": "1" 
     } 
    ] 
    } 
] 
+0

的感謝!這就是我一直在尋找的! –