什么是从具有共同前缀的多个表中选择字段的最佳方法?

时间:2013-06-11 16:23:02

标签: sql postgresql

我有来自客户的传感器数据正在进行中。每周我们都会得到一个新数据表(每个大约一百万行),每个表都有相同的前缀。我想运行一个查询并在所有这些表中选择一些列。

最好的方法是什么?

我见过一些使用dynammic sql的解决方案,我正在考虑编写一个存储过程,它将形成一个动态的sql语句并为我执行它。但我不确定这是最好的方法。

3 个答案:

答案 0 :(得分:1)

我看到你正在使用Postgresql。这是partitioning理想案例,基于日期排除约束。您创建一个没有数据的主表,并且每天添加的其他表继承自它。在您的情况下,您甚至不必担心INSERT上的触发器的麻烦;听起来除了每天批量创建新表之外,从来没有任何插入。请参阅上面的链接以获取完整的文档。

查询可以针对表运行,Postgres负责查找所有子表, plus 它足够聪明,可以跳过被排除在外的子表WHERE条件。

答案 1 :(得分:0)

你是对的,有时你必须编写动态SQL来处理这种情况。

如果加载了所有表,则可以查询存储过程中的表名。像这样:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' 

使用它来获取您需要的特定表名。

表名如何区分?按日期?一些递增的ID?

答案 2 :(得分:0)

您可以查询具有相同前缀的表的元数据。

select table_name from information_schema.tables where table_name like 'week%'

然后你可以使用union all来组合像

这样的查询
select * from week001
union all
select * from week002
[...]

但是我建议将新记录附加到一个表中,并在timestamp列上使用索引。这将特别加快跨越多周的查询等。如果您只需要处理一个表,它将大大简化您的查询。如果表变得太大,您可以按日期等进行分区。因此,不需要通过多个表来手动分区。