首页 > 解决方案 > Athena SQL 从可变数量的表创建表

问题描述

我想从我从 SELECT 查询中获得的多个表名中创建一个表/视图。
可以从多个已知表创建一个表,如下所示:

CREATE TABLE new_table AS
SELECT column_1, column_2
FROM clients_1, clients_2, ... clients_n;

要获取表格列表,我可以使用以下内容:

SELECT DISTINCT table_name FROM information_schema.columns WHERE table_name like '%clients_%';

返回:

     table_name
1    clients_1
2    clients_2

如何将表名结果用作 CREATE TABLE FROM 子句中的列表?

我用 WITH 尝试过这样的事情:

WITH mytable AS 
  (SELECT DISTINCT table_name FROM information_schema.columns WHERE table_name like '%clients_%')
    CREATE TABLE new_table AS
    SELECT column_1, column_2
    FROM mytable;

但它大多不起作用。
即使这样做,例如不使用 WITH 并选择 * 列 -

CREATE TABLE new_table AS
SELECT *
FROM (SELECT DISTINCT table_name FROM information_schema.columns WHERE
table_name like '%clients_%');

new_table 只是 mytable/nested 查询的副本。

想法?
谢谢!

标签: mysqlsqlparquetamazon-athena

解决方案


我最终选择了这样的视图:

CREATE OR REPLACE VIEW clients_all AS
  SELECT column_1, column_2 FROM client1
  UNION ALL
  SELECT column_1, column_2 FROM client2

缺点是每当添加新的 client_n 表时我都必须更新视图,并明确指定表的名称而不是从查询中推断它们,
但我可能不得不将它分成两个查询,即使创建一个表为原本打算的。


推荐阅读