对一个数据库中的多个表进行SQL查询

时间:2016-10-10 14:45:15

标签: sql vertica

enter code here我有以下问题:

我在Vertica数据库中有一堆表说:

+------------+
| Tablenames |
+------------+
| a_1        |
| a_2        |
| a_34       |
| b_1        |
| b_4        |
+------------+

表格不完全相同,但大多数都是相似的条目。现在,我想对以a_开头的所有表格进行一次查询(a_1 a_2 a_34)。

有没有办法在所有表中搜索其名称中的字符串a_,输出某种列表,而不是使用for循环或连接操作生成的列表?

一旦我得到了包含所有以temp_table开头的表名的新表(让我们称之为a_),我想在所有表上运行一个查询,类似的东西(Matlab)语法):

for ii=1:length(temp_table)
Data{ii}=SELECT * FROM temp_table(ii) WHERE paste_condition_here
end

因此Data应该是一个新表,每次迭代都会附加新行。

2 个答案:

答案 0 :(得分:2)

@Nirjihar - 有 information_schema (您需要 v_catalog ),您对MySQL感到困惑。

   select TABLE_NAME from v_catalog.TABLES where TABLE_NAME like 'a_%';

这将返回所有表格,其标准为' a _%'

作为补充! 在Vertica你不会有循环!为此你必须使用UDP(用户定义的程序),这可以用你选择的语言(shell,java,R,C ++)编写。 我将继续为您发布模型:

1 - Shell过程 - 在过程文件夹中创建

    #!/bin/bash
. /home/dbadmin/.profile
/opt/vertica/bin/vsql -U $username -w $password -t -o /tmp/query.sql -c"
SELECT
    ' select * from '
    ||TABLE_SCHEMA
    ||'.'
    ||TABLE_NAME
    ||';'
FROM
 v_catalog.TABLES where TABLE_NAME like '%$1%'
 "
/opt/vertica/bin/vsql -U $username -w $password  -F $'|' -At -o /tmp/query_output.csv -f /tmp/query.sql 

2 - 更改sh文件权限

chmod 4750 query_table.sh

3 - 确保您已相应填充.profile文件

. /home/dbadmin/.profile
#!/bin/bash

username=dbadmin
password=secrectpasswd
export username
export password

注意:这是为了避免文本中的passwd并且只有一个文本点密码

4 - 使用Vertica目录注册UDP

. /home/dbadmin/.profile

admintools -t install_procedure -f /vertica/catalog//procedures/query_table.sh -d -p $ password

5 - 在数据库中创建UDP

    . /home/dbadmin/.profile
/opt/vertica/bin/vsql -U $username -w $password -c "CREATE PROCEDURE dba.query_table(table_name varchar) AS 'query_table.sh' LANGUAGE 'external' USER 'dbadmin';"

6 - 执行proc

select dba.query_table('you possible table name here');

7 - 检查结果

  • a - 您将获得一个包含查询的文件
  • b - 包含导出数据的一个文件(csv' |'分隔)。

我在这里有类似的帖子: http://www.aodba.com/create-vertica-schema-fly/

答案 1 :(得分:0)

获取从_: -

开始的所有表
select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'a_%'

然后你可以使用别名并加入列表或每个表格。