使用插入模式,由Sqoop导出的记录将追加到目标表的末尾。 Sqoop还提供了一个更新模式,您可以通过提供-update-key命令行参数来使用它。此操作会导致Sqoop生成SQL UPDATE语句以在RDBMS或数据仓库上运行。
假设您想要使用存储在HDFS文件/ user / my-hdfs-file中的数据更新三列表。该文件包含这些数据:
<!以下简写的Sqoop export命令会在数据库系统上生成相应的SQL UPDATE语句:$ sqoop export(通用参数) - table target-relational -table --update-key column1 --export-dir / user / my-hdfs-file … Generate => UPDATE target-relational-table SET column2 = 1000,column3 = 2000 WHERE column1 = 100;
使用前面的导出命令,如果RDBMS或数据仓库系统上的目标关系表没有列1中匹配值的记录,则目标关系表中没有任何更改。
<!但是,如果找不到匹配的记录,还可能包含另一个参数,用于将数据插入或附加到目标表。这样想:如果存在UPDATE else INSERT。
<! - 1 - >
这种技术通常在数据库本地语言中被称为upsert
或在其他实现中被称为MERGE。 upsert模式的参数是-update-mode,其中updateonly是默认值,allowinsert激活upsert模式。检查数据库文档或咨询您的供应商,以确定Apache Sqoop是否支持upsert模式。