Проверить схему в источнике и приемнике

Я использую следующий набор данных для тестирования потоков данных сопоставления: https://github.com/fivethirtyeight/data/tree/master/avengers.

Мой поток данных очень прост; Источник (файл с разделителями в AzureDataLakeStorageGen2), перемещающийся в приемник (паркетный файл в AzureDataLakeStorageGen2). Я использовал возможность импорта проекции, чтобы получить свою схему и установить значение «Проверить схему». Я получаю прогноз, который предполагает, что типы данных кажутся правильными. Стоит отметить, что мой набор данных, указывающий на этот источник, определяет все столбцы как строки, поэтому явно существует разрыв между схемой импорта в наборе данных и схемой преобразования потока данных источника. Смотрите это изображение. Прогноз источника потока данных

Если я попытаюсь использовать параметры проверки схемы, я столкнусь с проблемами. Первая проблема, которую я получаю, - это ошибка любого типа данных, не являющегося строкой. При использовании предварительного просмотра данных или запуске потока данных в конвейере, например Error: at Source 'AvengersHeader': Column 'Appearances has incompatible types( Found: StringType, Required: ShortType). Я предположил, что это произошло из-за строки заголовка, но исключив ее с помощью Пропустить счетчик строк со значением 1, я получил новую ошибку, например. Error: at Source 'AvengersHeader': Missing column 'URL.

В документации источника говорится

Проверить схему: если выбран вариант Проверить схему, поток данных не будет запущен, если входящие исходные данные не соответствуют определенной схеме набора данных.

Я предполагал, что это будет смотреть на типы данных, но теперь задаюсь вопросом, просто ли это предоставленные столбцы.

Для приемника документация я заявляю

Проверить схему: если выбрана проверка схемы, поток данных завершится ошибкой, если какой-либо столбец схемы входящего источника не будет найден в исходной проекции или если типы данных не совпадают. Используйте этот параметр, чтобы обеспечить соответствие исходных данных контракту вашей определенной проекции. В сценариях источника базы данных полезно сигнализировать об изменении имен или типов столбцов.

Отмечу пару вещей:

  1. Это указывает на изменения в источнике
  2. Он указывает, что тип источника не совпадает, однако, похоже, этого не происходит.

Тогда мой вопрос: может ли кто-нибудь указать на конкретную документацию, в которой подробно описывается ожидаемое поведение и использование этого? Либо официальная документация MS, либо блоги, я не привередничаю. Если кто-то захочет бросить свои 2 цента / пенни, это тоже нормально.

Глядя на это дальше, я исследовал производный столбец, за которым следует условное разбиение, но это потенциально требует довольно много времени:

`iif(
    isNull(toInteger(Appearances))==true()
||  isNull(toBoolean(case(or({Current?}=='', isNull({Current?})) == true(), 'NO',{Current?})) )== true()    
||  isNull(toShort(Year)) == true()
||  isNull( toShort({Years since joining}))== true()
||  isNull(toBoolean(case(or(Death1=='', isNull(Death1)) == true(), 'NO',Death1)) )== true()  
||  isNull(toBoolean(case(or(Return1=='', isNull(Return1)) == true(), 'NO',Return1)) )== true() 
||  isNull(toBoolean(case(or(Death2=='', isNull(Death2)) == true(), 'NO',Death2)) )== true()  
||  isNull(toBoolean(case(or(Return2=='', isNull(Return2)) == true(), 'NO',Return2)) )== true() 
||  isNull(toBoolean(case(or(Death3=='', isNull(Death3)) == true(), 'NO',Death3)) )== true()  
||  isNull(toBoolean(case(or(Return3=='', isNull(Return3)) == true(), 'NO',Return3)) )== true() 
||  isNull(toBoolean(case(or(Death4=='', isNull(Death4)) == true(), 'NO',Death4)) )== true()  
||  isNull(toBoolean(case(or(Return4=='', isNull(Return4)) == true(), 'NO',Return4)) )== true()  
||  isNull(toBoolean(case(or(Death5=='', isNull(Death5)) == true(), 'NO',Death5)) )== true()  
||  isNull(toBoolean(case(or(Return5=='', isNull(Return5)) == true(), 'NO',Return5)) )== true() 
    ,1,0
)`

Преобразование «Условное разделение» ищет строки, которые соответствуют требованиям, и записывает их, записывая искаженные строки в другом месте.
Хотя это работает, я не уверен, что сделал бы это, вместо этого фрейм данных, использующий _corrupt_record, чувствует, что это решит мою проблему намного легче. вопрос, зачем мне пытаться выполнить проверку в отображении потоков данных?


person Steve-at-sword    schedule 06.11.2020    source источник


Ответы (1)


Эта ошибка Error: at Source 'AvengersHeader': Missing column 'URL возникает из-за того, что вы пропустили 1 строку и не смогли найти столбец с именем URL. Вам необходимо установить флажок «Первая строка как заголовок» в подключении набора данных вместо того, чтобы пропускать 1 строку. введите описание изображения здесь

Параметр «Проверить схему» в источнике сравнивает «Проектирование» со схемой набора данных. Если столбец и его тип не совпадают, поток данных завершится ошибкой. введите описание изображения здесь

введите описание изображения здесь

Поэтому в вашей ситуации я предлагаю вам не проверять параметр «Проверить схему», и тогда все будет нормально.

введите описание изображения здесь

person Steve Zhao    schedule 09.11.2020
comment
Все это повторяет то, что я обнаружил в ходе собственного расследования. Интересно, в чем смысл схемы проверки, она, кажется, не добавляет ничего особенного в поток данных сопоставления. У вас есть ссылки? - person Steve-at-sword; 09.11.2020
comment
Нет, я искал документацию MS, но я не нашел ничего, кроме того, что вы упомянули. - person Steve Zhao; 10.11.2020