一个银行应用程序,每天运行,并生成一个csv文件(其中有帐户详细信息),我们将加载到数据库中的数据。第二天,将生成更多的每日文件。在此文件中,对于某些帐号,详细信息已更新/修改/删除。在将其插入数据库时,如何仅加载已更改的数据。流是csv文件->hdfs->hive/spark中的转换(如果适用)->红移
4ioopgfo1#
创建hdfs位置 /banking 将第一个csv直接加载到hadoop文件夹中 /banking/dt=20180529 . 跳过数据库,除非你真的在查询它。在上面生成一个配置单元表,按 dt STRING .第二天,将第二个csv加载到 /banking/dt=20180530 .上载文件后,使用配置单元查找当天存在的、昨天也存在的所有行,可以选择从中创建新表
/banking
/banking/dt=20180529
dt STRING
/banking/dt=20180530
-- CREATE TABLE changed_accts AS SELECT acct --, other columns FROM table WHERE dt = '20180530' AND acct IN (SELECT acct FROM table WHERE dt = '20180529')
这会过滤掉当天的新账户。我假设被删除的账户根本不会出现。您将需要额外的数据来确定仅更新(如帐户余额更改)
1条答案
按热度按时间4ioopgfo1#
创建hdfs位置
/banking
将第一个csv直接加载到hadoop文件夹中/banking/dt=20180529
. 跳过数据库,除非你真的在查询它。在上面生成一个配置单元表,按
dt STRING
.第二天,将第二个csv加载到
/banking/dt=20180530
.上载文件后,使用配置单元查找当天存在的、昨天也存在的所有行,可以选择从中创建新表
这会过滤掉当天的新账户。我假设被删除的账户根本不会出现。您将需要额外的数据来确定仅更新(如帐户余额更改)