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
应该是一个新表,每次迭代都会附加新行。
答案 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 - 检查结果
我在这里有类似的帖子: http://www.aodba.com/create-vertica-schema-fly/
答案 1 :(得分:0)
获取从_: -
开始的所有表select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'a_%'
然后你可以使用别名并加入列表或每个表格。