У меня есть куча действий U-SQL, которые манипулируют и преобразовывают данные в Azure Data Lake
. Из этого я получаю файл csv
, содержащий все мои события.
Затем я бы просто использовал действие Copy Data
, чтобы скопировать файл csv
из озера данных непосредственно в таблицу Azure SQL Data Warehouse
.
JSON
файлов, хранящихся в Data Lake, и создаю промежуточный .csv
файл;.csv
файл и рабочий .csv
файл, вношу последние изменения (и избегаю дубликатов) и сохраняю рабочий .csv
файл;.csv
прямо в таблицу Warehouse.Я понял, что моя таблица содержит повторяющиеся строки, и, протестировав сценарии U-SQL
, я предполагаю, что действие Copy Data
каким-то образом объединяет содержимое файла csv
в таблицу.
Вопрос
Я не уверен, что поступаю правильно. Должен ли я определить свою складскую таблицу как таблицу ВНЕШНИЙ, которая будет получать данные из производственного файла .csv
? Или мне следует изменить свой U-SQL, чтобы он включал только последние изменения?
Если вы хотите использовать внешние таблицы, зависит от вашего варианта использования. Если вы хотите, чтобы данные хранились внутри SQL DW для повышения производительности, вы должны скопировать их в какой-то момент, например. через хранимую процедуру. Затем вы можете просто вызвать хранимую процедуру, например, из ADF.
Или, если вы не хотите/не можете отфильтровать данные заранее, вы также можете реализовать хранимую процедуру «Upsert» в своем SQL DW и назовите это для вставки ваших данных вместо действия копирования.
Если, например, вы не можете (или не хотите) настраивать внешние таблицы (включая хранение ключа учетной записи хранения) или хранимые процедуры внутри хранилища данных SQL, может иметь смысл копия из фабрики данных. Но с точки зрения производительности Polybase (внешняя таблица), вероятно, лучше.
Есть ли причина, по которой я бы предпочел использовать копирование данных из озера в хранилище (с действием копирования) вместо создания внешней таблицы в хранилище и ссылки на данные из озера? Я имею в виду, один эффективнее другого?