使用 Impala 选择具有通配符模式的多个表并将它们连接起来
Posted
技术标签:
【中文标题】使用 Impala 选择具有通配符模式的多个表并将它们连接起来【英文标题】:Using Impala to select multiple tables with wildcard pattern and concatenate them 【发布时间】:2020-06-26 10:23:03 【问题描述】:我从Impala SQL
和Hadoop
开始,有一个(可能很简单)问题。
我有一个 Hadoop
数据库,其中包含数百个具有相同架构和命名约定的表(例如 process_1、process_2、process_3 和很快)。我将如何查询所有表并将它们连接到一个大表或数据框中?是否可以通过仅使用Impala
SQL 来做到这一点,它在python
中返回一个数据帧?
类似:
SELECT * FROM 'process_*';
或者我需要运行SHOW TABLES 'process_*'
,在python中使用循环并分别查询每个表吗?
【问题讨论】:
【参考方案1】:如果您正在寻找纯粹的 Impala 解决方案,那么一种方法是在所有表格的顶部创建一个视图。如下:
create view process_view_all_tables as
select * from process1
union all
select * from process2
union all
...
select * from processN;
这种方法的缺点如下:
您需要将多个表联合在一起。就内存利用率而言,联合是一项昂贵的操作。如果您的表格数量较少(例如 2-5 个表格),则可以正常工作。 您需要手动添加所有表。如果您将来有一个新的进程表,则需要 ALTER 视图然后添加新表。这是一个令人头疼的维护问题。 视图假定所有 PROCESS 表都具有相同的架构。在第二种方法中,正如您所说,您可以使用SHOW TABLES LIKE 'process*'
从 Impala 查询表列表,然后编写一个小程序来遍历表列表并创建文件。
生成文件后,您可以将文件移植回 HDFS 并在其上创建一个表。
第二种方法的唯一缺点是每次迭代都会有 impala 数据库请求,这在多租户数据库环境中尤其不利。
在我看来,你应该尝试第二种方法。
希望这会有所帮助:)
【讨论】:
好的,我希望在 Impala 中找到类似于 Google 的 BigQuery 中的内容,您可以在 FROM 语句中使用通配符(另请参见此处:cloud.google.com/bigquery/docs/querying-wildcard-tables)。尽管如此,我还是尝试了第二种基于 python 的方法,它工作得很好。我想我只能忍受它:-)以上是关于使用 Impala 选择具有通配符模式的多个表并将它们连接起来的主要内容,如果未能解决你的问题,请参考以下文章