使用 Impala 到 select 具有通配符模式的多个表并将它们连接起来

Using Impala to select multiple tables with wildcard pattern and concatenate them

我从 Impala SQLHadoop 开始,有一个(可能很简单的)问题。

我有一个 Hadoop 数据库,其中有大量 table 具有相同的架构和命名约定(例如 process_1process_2process_3等)。我将如何查询所有 table 并将它们连接成一个大的 table 或数据框?是否可以仅使用 Impala SQL python 中的一个数据帧 python?

类似于:

SELECT * FROM 'process_*'; 

或者我是否需要 运行 SHOW TABLES 'process_*',在 python 中使用循环并分别查询每个 table?

如果您正在寻找纯粹的 Impala 解决方案,那么一种方法是在所有 table 之上创建一个视图。内容如下:

create view process_view_all_tables as
 select * from process1
 union all
 select * from process2
 union all
 ...
 select * from processN;

这种方法的缺点如下:

  • 您需要将多个 table 合并在一起。就内存使用而言,联合是一项昂贵的操作。如果你的 tables 数量较少,比如在 2-5 tables 范围内,那么工作正常。
  • 您需要手动添加所有 table。如果您将来有一个新进程 table,则需要更改视图,然后添加新的 table。这是一个令人头疼的维护问题。
  • 该视图假定所有进程 table 都属于同一模式。

第二种方法 中,如您所说,您可以使用 SHOW TABLES LIKE 'process*' 从 Impala 查询 table 的列表并编写一个小程序,用于遍历 table 列表并创建文件。 生成文件后,您可以将文件移植回 HDFS 并在其上创建一个 table。

第二种方法的唯一缺点是每次迭代都会有 impala 数据库请求,这在多租户数据库环境中尤其不利。

在我看来,您应该尝试第二种方法。

希望这对您有所帮助:)