使用 COPY DATA activity 到 SQL table 与使用 CREATE EXTERNAL TABLE 有什么区别?

What is the difference between using a COPY DATA activity to a SQL table vs using CREATE EXTERNAL TABLE?

我有一堆 U-SQL 操作和转换 Azure Data Lake 中的数据的活动。由此,我得到一个包含我所有事件的 csv 文件。

接下来我将使用 Copy Data activity 将 csv 文件从数据湖直接复制到 Azure SQL Data Warehouse table。

  1. 我从存储在数据湖中的一堆 JSON 文件中提取信息并创建一个临时 .csv 文件;
  2. 我抓取暂存 .csv 文件和生产 .csv 文件并注入最新更改(并避免重复)并保存生产 .csv 文件;
  3. .csv 生产文件直接复制到仓库 table。

我意识到我的 table 包含重复的行,并且在测试了 U-SQL 脚本之后,我假设 Copy Data activity - 以某种方式 - 合并了内容csv 文件到 table。

问题

我不相信我在这里做的是对的。我是否应该将我的仓库 table 定义为一个 EXTERNAL table 并从 .csv 生产文件中获取数据?或者我应该将我的 U-SQL 更改为仅包含最新更改吗?

是否要使用外部表取决于您的用例。如果您希望将数据存储在 SQL DW 中以获得更好的性能,则必须在某些时候复制它,例如通过存储过程。例如,您随后可以从 ADF 调用存储过程。

或者,如果您不想/不能事先过滤掉数据,您还可以在 SQL DW 中实施 "Upsert" 存储过程,并 call this 插入您的数据而不是副本 activity.