繁体   English   中英

Google BigTable 上的范围过滤器

[英]Range filters on Google BigTable

我目前正在测试 BigTable,看看我们是否会使用它。 我们目前将 CloudSql 与 Postgres 9.6 一起使用,当前架构为;

id, sensor_id, time, value

我们的大多数查询都是在一个范围内查询数据,就像这样

SELECT
  *
FROM
  readings
WHERE
 sensor_id IN(7297,7298,7299,7300)
 AND time BETWEEN '2018-07-15 00:00:00' AND '2019-07-15 00:00:00'
ORDER BY
 time, sensor_id

每个传感器每 10 分钟左右就有一次读数,所以这是相当多的数据。 最后一查,我们有20亿条记录,每天都在增加很多。

对于 BigTable,我正在使用readings#timestamp#sensorId的行键导入,所以像这样的readings#20180715000000#7297

到目前为止看起来很好。

要查询范围(使用节点),我正在这样做

const fromDate = '20180715000000'
const toDate = '20190715000000'

const ranges = sensorIds.map(sensorId => {
  return {
    start: `readings#${fromDate}#${sensorId}`,
    end: `readings#${toDate}#${sensorId}`,
  }
});

const results = [];

await table.createReadStream({
  column: {
    cellLimit: 1,
  },
  ranges
})
.on('error', err => {
  console.log(err);
})
.on('data', row => {
  results.push({
    id: row.id,
    data: row.data
  })
})
.on('end', async () => {
  console.log(` ${results.length} Rows`)
})

我对此的理解是,结果类似于上面的 sql 查询,但它似乎返回了日期范围内的所有传感器 ID,而不是查询中指定的传感器 ID。

我的问题;

  1. 这是我们应该用于此类查询的正确行键吗
  2. 如果这是正确的,我们可以按范围过滤吗? 或者是否有一个我们必须使用的过滤器来只返回给定日期范围和 sensorId 范围的值?

预先感谢您的建议。

问题是您以错误的方式设置了ranges变量,因此 Big Table 丢失了,请尝试执行以下操作:

const fromDate = '20180715000000'
const toDate = '20190715000000'
const sensorId = sensorIds[0]

const filter = {
    column: {
       cellLimit: 1,
    },
    value: {
        start: `readings#${fromDate}#${sensorId}`,
        end: `readings#${toDate}#${sensorId}`,
    }
};

const results = [];

await table.createReadStream({
    filter
})
.on('error', err => {
    console.log(err);
})
.on('data', row => {
    results.push({
      id: row.id,
      data: row.data
    })
})
.on('end', async () => {
    console.log(` ${results.length} Rows`)
})

**注意:我得到第一个 position 的sensorIds ,我假设它是所有 ID 的列表,但你可以 select 其中任何一个。 此外,这一切都未经测试,但对您来说应该是一个很好的起点。

您可以在这个Github Repo 上找到有关 BigTable 的 Node.js Client 用法的片段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM