在Hive中,如何组合多个表以产生包含对象数组的单行?

时间:2019-05-11 07:54:42

标签: hive hiveql

我有两个表,如下所示:

users table
==========================  
| user_id   name     age |  
|=========================  
|  1        pete      20 |  
|  2        sam       21 |  
|  3        nash      22 |  
==========================

hobbies table
======================================
| user_id   hobby         time_spent |
|=====================================
|  1        football          2      |
|  1        running           1      |
|  1        basketball        3      |
======================================

第一个问题:我想进行一个Hive查询,该查询可以返回以下格式的行:

{ "user_id":1, "name":"pete", "hobbies":[ {hobby: "football", "time_spent": 2}, {"hobby": "running", "time_spent": 1}, {"hobby": "basketball", "time_spent": 3} ] }

第二个问题:嗜好表是否如下:

========================================
| user_id   hobby             scores   |
|=======================================
|  1        football          2,3,1    |
|  1        running           1,1,2,5  |
|  1        basketball        3,6,7    |
========================================

是否有可能获得行输出,其中scores是输出中的列表,如下所示:

{ "user_id":1, "name":"pete", "hobbies":[ {hobby: "football", "scores": [2, 3, 1]}, {"hobby": "running", "scores": [1, 1, 2, 5]}, {"hobby": "basketball", "scores": [3, 6, 7]} ] }

1 个答案:

答案 0 :(得分:0)

我能够找到第一个问题的答案

<html>
  <body>
    getting video stream from camera into screen
    <video autoplay></video>

    getting virtual objects into screen
    <canvas id="glcanvas" width="640" height="480"></canvas>
  </body>
  // webgl codes that draws a rotating colored cube on html canvas webgl context
  <script src="gl-matrix.js"></script>
  <script src="webgl-demo.js"></script>

  <script>
    // getting video stream from camera into screen
    const video = document.querySelector("video"); 

    navigator.mediaDevices.getUserMedia({video: true})
      .then(stream => {
        let canv = document.querySelector("#glcanvas");
        let canvstrm = canv.captureStream();
        // get track from the canvas stream and add to the user media stream
        let canvstrmtrack = canvstrm.getTracks()[0]
        stream.addTrack(canvstrmtrack);
        video.srcObject = stream;
    })
  </script>


</html>