首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ETL选择,构建一个直接处理SQL查询引擎(impala)或本机数据库的ETL?

ETL选择,构建一个直接处理SQL查询引擎(impala)或本机数据库的ETL?
EN

Stack Overflow用户
提问于 2021-04-16 22:52:04
回答 1查看 109关注 0票数 0

我正在尝试构建一个ETL,它将源表映射到一个维度的星型模式模型。

我们的数据仓库基本上是库都数据库上的Impala。

我的问题是,我是否应该:

构建一个直接使用Python (链接)处理kudu表的ETL。

B-或在黑斑羚中创建UDF(等效于SQL中的存储过程),执行插入/联接等操作,将源表映射到星型模式模型,并使用Nifi或任何调度程序(如气流等)对其进行调度。

在我看来,我认为最好是处理本地数据库,而不是在其之上处理SQL引擎。但这只是一个假设。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-17 04:46:18

为什么不接近C,:)两者兼而有之。

两者都有利与弊。

  • 使用python构建ETL -更好的控制,灵活的做任何你想要的逻辑。缺点--您必须在python中编写代码,在sql中编写代码。如果有什么事情失败了,那么做RCA将是一场噩梦。与之相比,维护可能更困难。-就性能而言,如果数据量很大,这种方法就会更差。
  • B-使用SQL直接获取数据-优点-更快的性能。少编码。缺点--难以实现复杂的逻辑。维护代码和时间表可能很困难。

此外,请考虑一下,您/团队对python/SQL和未来的可维护性感到满意。

目前,我们正在我的cloudera项目中使用方法B。我们创建视图,然后使用insert直接加载最终表。我们几乎不需要任何UDF。

现在,我的建议,请使用方法B和方法A只在你真的不能创造复杂的逻辑。

编辑:让我们说,我们必须加载订单表。因此,我们执行以下块来加载订单和依赖的org、cust、prod表。

代码语言:javascript
复制
Load customer   |
load org        | --> Load Orders final.
load product    |
load order stage|

Load customer块是脚本的集合,如-

代码语言:javascript
复制
insert overwrite cust_stg select * from cust_stg_vw; -- This loads into stage table
insert overwrite cust select * from cust_vw; -- This loads into cust table

类似地,还编写了其他块。将它们放置在块中可以使我们灵活地将它们按任何顺序/任何我们想要提高性能的位置放置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67133038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档