В чем разница между использованием операции КОПИРОВАНИЯ ДАННЫХ в таблицу SQL и использованием CREATE EXTERNAL TABLE?

#azure #azure-data-factory #azure-data-lake #u-sql #azure-sqldw

#azure #azure-data-factory #azure-data-lake #u-sql #azure-sqldw

Вопрос:

У меня есть куча операций U-SQL, которые обрабатывают и преобразуют данные в Azure Data Lake . Из этого я получаю csv файл, содержащий все мои события.

Затем я бы просто использовал Copy Data действие для копирования csv файла из озера данных непосредственно в Azure SQL Data Warehouse таблицу.

Извлечение-Преобразование-Слияние-Загрузка

  1. Я извлекаю информацию из множества JSON файлов, хранящихся в озере данных, и создаю промежуточный .csv файл;
  2. Я беру промежуточный .csv файл и рабочий .csv файл, внедряю последние изменения (и избегаю дубликатов) и сохраняю рабочий .csv файл;
  3. Скопируйте .csv производственный файл непосредственно в таблицу хранилища.

Я понял, что моя таблица содержит дублированные строки, и, после тестирования U-SQL сценариев, я предполагаю, что Copy Data действие каким-то образом объединяет содержимое csv файла в таблицу.

Вопрос

Я не уверен, что здесь я поступаю правильно. Должен ли я определить свою складскую таблицу как ВНЕШНЮЮ таблицу, которая будет получать свои данные из .csv производственного файла? Или я должен изменить свой U-SQL, чтобы включать только последние изменения?

Ответ №1:

Если вы хотите использовать внешние таблицы, зависит от вашего варианта использования. Если вы хотите, чтобы данные хранились внутри SQL DW для повышения производительности, вы должны скопировать их в какой-то момент, например, с помощью хранимой процедуры. Затем вы могли бы просто вызвать хранимую процедуру, например, из ADF.

Или, если вы не хотите / не можете предварительно отфильтровать данные, вы также можете реализовать хранимую процедуру «Upsert» в вашем SQL DW и вызвать ее для вставки ваших данных вместо операции копирования.

Комментарии:

1. Есть ли причина, по которой я предпочел бы использовать копирование данных из озера в хранилище (с помощью операции копирования) вместо создания внешней таблицы в хранилище и ссылки на данные из озера? Я имею в виду, является ли одно более эффективным, чем другое?

2. Если, например, вы не можете (или не хотите) настраивать внешние таблицы (включая хранение ключа учетной записи хранилища) или хранимые процедуры внутри вашего SQL DW, копирование с фабрики данных может иметь смысл. Но с точки зрения производительности Polybase (внешняя таблица), вероятно, лучше.