使用 Impala 到 select 具有通配符模式的多个表并将它们连接起来
Using Impala to select multiple tables with wildcard pattern and concatenate them
我从 Impala SQL
和 Hadoop
开始,有一个(可能很简单的)问题。
我有一个 Hadoop
数据库,其中有大量 table 具有相同的架构和命名约定(例如 process_1、process_2、process_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 数据库请求,这在多租户数据库环境中尤其不利。
在我看来,您应该尝试第二种方法。
希望这对您有所帮助:)
我从 Impala SQL
和 Hadoop
开始,有一个(可能很简单的)问题。
我有一个 Hadoop
数据库,其中有大量 table 具有相同的架构和命名约定(例如 process_1、process_2、process_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 数据库请求,这在多租户数据库环境中尤其不利。
在我看来,您应该尝试第二种方法。
希望这对您有所帮助:)