Преобразование файла JSON из плоских в вложенные массивы в фабрике данных Azure - PullRequest
1 голос
/ 17 мая 2019

Я пытаюсь скопировать данные из моей базы данных Oracle в поисковый индекс и использую фабрику данных Azure для копирования данных из оракула в хранилище BLOB-объектов Azure. Как я могу использовать его, чтобы импортировать данные как вложенный файл JSON. В настоящее время, после запроса Oracle, я получаю такие данные:

[{"BOOKING_ID":1.0,"REFERENCES":"ABC00001","ROUTES":{"ROUTE":1.0,"DESTINATION":"Atlanta, USA","ORIGIN":"New York, USA"}}
,{"BOOKING_ID":2.0,"REFERENCES":"ABC00322","ROUTES":{"ROUTE":2.0,"DESTINATION":"Las Vegas, USA","ORIGIN":"Los Angeles, USA"}}
,{"BOOKING_ID":3.0,"REFERENCES":"ABC32322","ROUTES":{"ROUTE":3.0,"DESTINATION":"Berlin, GER","ORIGIN":"Moscow, RUS"}}
,{"BOOKING_ID":4.0,"REFERENCES":"ABC543345","ROUTES":{"ROUTE":4.0,"DESTINATION":"Rome, ITA","ORIGIN":"Bejin, CHN"}}
,{"BOOKING_ID":5.0,"REFERENCES":"ABC51145","ROUTES":{"ROUTE":5.0,"DESTINATION":"Warsaw, POL","ORIGIN":"Copenhagen, DEN"}}
,{"BOOKING_ID":5.0,"REFERENCES":"ABC51145","ROUTES":{"ROUTE":6.0,"DESTINATION":"Copenhaged, DEN","ORIGIN":"Paris, FRA"}}
,{"BOOKING_ID":5.0,"REFERENCES":"ABC51145","ROUTES":{"ROUTE":7.0,"DESTINATION":"Paris, FRA","ORIGIN":"Madrid, ESP"}}
]

но мне нужны такие данные:

[
  {
    "BOOKING_ID": 1.0,
    "REFERENCES": "ABC00001",
    "ROUTES": [
      {
        "ROUTE": 1.0,
        "DESTINATION": "Atlanta, USA",
        "ORIGIN": "New York, USA"
      }
    ]
  },
  {
    "BOOKING_ID": 2.0,
    "REFERENCES": "ABC00322",
    "ROUTES": [
      {
        "ROUTE": 2.0,
        "DESTINATION": "Las Vegas, USA",
        "ORIGIN": "Los Angeles, USA"
      }
    ]
  },
  {
    "BOOKING_ID": 3.0,
    "REFERENCES": "ABC32322",
    "ROUTES": [
      {
        "ROUTE": 3.0,
        "DESTINATION": "Berlin, GER",
        "ORIGIN": "Moscow, RUS"
      }
    ]
  },
  {
    "BOOKING_ID": 4.0,
    "REFERENCES": "ABC543345",
    "ROUTES": [
      {
        "ROUTE": 4.0,
        "DESTINATION": "Rome, ITA",
        "ORIGIN": "Bejin, CHN"
      }
    ]
  },
  {
    "BOOKING_ID": 5.0,
    "REFERENCES": "ABC51145",
    "ROUTES": [
      {
        "ROUTE": 5.0,
        "DESTINATION": "Warsaw, POL",
        "ORIGIN": "Copenhagen, DEN"
      },
      {
        "ROUTE": 6.0,
        "DESTINATION": "Copenhaged, DEN",
        "ORIGIN": "Paris, FRA"
      },
      {
        "ROUTE": 7.0,
        "DESTINATION": "Paris, FRA",
        "ORIGIN": "Madrid, ESP"
      }
    ]
  }
]

UPDATE Я использую функции Azure с lodash, но теперь я пытаюсь получить JSON из хранилища BLOB-объектов Azure. Проблема в том, что когда я пытаюсь прочитать JSON, у меня появляются такие результаты:

"type": "Buffer",
    "data": [
        239,
        187,
        191,
        91,
        123,
...

и все данные в байтовом типе.

1 Ответ

0 голосов
/ 20 мая 2019

Ваше требование группировать по BOOKING_ID, объединить объект ROUTES в один массив. Он не может быть непосредственно реализован в операции копирования.

Две идеи:

1.Использование Веб-активность + Активность функции Azure .

В веб-активности инкапсулируйте методы запросов в REST API и возвращайте плоские данные json. Передайте выходные данные веб-активности в Azure Function Activity. В методе функции Azure зациклите массив данных json на вложенные массивы в соответствии с вашими потребностями, а затем настройте вывод функции Azure как хранилище BLOB-объектов Azure (см. Эту ссылку )

2.Использование Настраиваемая активность .

Вы можете выполнять сценарии в пакетном задании Azure, полагаясь на виртуальную машину. Например, вы можете использовать пакет cx-Oracle для запроса порядка данных json по BOOKING_ID, а затем использовать код python для зацикливания результата и преобразования его в соответствии с вашими потребностями.

...