在Apache箭头浏览器顶部的SQL?

Dav*_*542 11 javascript webassembly apache-arrow dremio

我有存储在客户端浏览器内存中的数据。例如,假设数据集如下:

"name" (string),     "age" (int32),   "isAdult" (bool)
"Tom"          ,     29               1
"Tom"          ,     14               0
"Dina"         ,     20               1
Run Code Online (Sandbox Code Playgroud)

我想在javascript中对此数据运行非平凡的SQL语句,例如:

SELECT name, GROUP_CONCAT(age ORDER BY age) ages
FROM arrowData a1 JOIN arrowData a2 USING (name)
WHERE a1.isAdult != a2.isAdult
Run Code Online (Sandbox Code Playgroud)

我会得到:

"name" (string),      "ages" (string)
"Tom"                 "14,29"
Run Code Online (Sandbox Code Playgroud)

我在javascript中拥有的数据存储为apache Arrow(也与Perspective结合使用),并且我也想对该apache Arrow数据执行SQL。作为最后的选择,我认为可以在wasm中使用sqllite,但是我希望可以有一种更简单的方法来直接查询Arrow数据,而不必将所有数据移到sqllite存储中来对它执行查询。

有什么方法可以做到这一点?

Tod*_*fee 0

你可以使用Alasql来做一些你想做的事情,但它不支持分组。

var data = [
  {
    name: 'Tom',
    age: 29,
    isAdult: 1
  },
  {
    name: 'Tom',
    age: 14,
    isAdult: 0
  },
  {
    name: 'Dina',
    age: 20,
    isAdult: 1
  }
];

var res = alasql('SELECT name, age from ? a1 JOIN ? a2 WHERE a1.isAdult != a2.isAdult AND a1.name = a2.name', [data, data]);
  
document.getElementById('result').textContent = JSON.stringify(res);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/alasql/0.2/alasql.min.js"></script> 

<span id="result"></span>
Run Code Online (Sandbox Code Playgroud)