Перенос данных JSON из Azure SQL DB в Cosmos DB приводит к получению строковых значений

#javascript #azure #azure-sql-database #azure-cosmosdb

#javascript #azure #azure-sql-database #azure-cosmosdb

Вопрос:

Я пытаюсь перенести данные из SQL DB с помощью инструмента миграции данных CosmosDB, и я успешно перенес данные из SQL DB, но в результате все значения являются строковыми

Хотите знать, есть ли способ преобразовать эти JSON в объект в процессе миграции?

Вот мой пример запроса

 select 
       json_value(Data, '$.timestamp') as timestamp,
       json_query(Data, '$.Product.detail') as [Product.detail],
       json_value(Data, '$.Product.price') as [Product.price]

from myTable
  

разделитель вложенности: .

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

1. Можете ли вы показать нам свои образцы данных? И чего вы ожидаете?

2. @SteveZhao Извините за поздний ответ. результатом является документ JSON в контейнере Cosmos db. Массив и объект заключены в двойные кавычки строка

3. Вы хотели бы использовать фабрику данных Azure? Это позволяет достичь этого без экспорта данных из Cosmos db.

4. @SteveZhao я попробую. Но меня беспокоит то, что мои данные, хранящиеся в SQL DB, не нормализованы. Это столбец типа nvarchar, в котором хранятся все данные JSON. Доступно ли это по-прежнему для миграции с использованием Azure data factory?

5. Я пробовал это. Данные в моей SQL DB выглядят следующим образом. И я могу получить это через фабрику данных Azure. Я бы опубликовал это, если вам нужно.

Ответ №1:

1. создайте поток данных и используйте SQL DB в качестве источника.

2.In выберите опцию источника Query :

SQL:

 select 
       json_value(Data, '$.timestamp') as timestamp,
       json_query(Data, '$.Product.detail') as [Product.detail],
       json_value(Data, '$.Product.price') as [Product.price]

from test3
  

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

3.создайте DerivedColumn и измените тип столбца.Выражение Product :

 @(detail=split(replace(replace(replace(byName('Product.detail'),'[',''),']',''),'"',''),','),
        price=toDouble(byName('Product.price')))
  

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

4. выберите Cosmos DB в качестве приемника и сопоставьте следующим образом:

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

5. создайте конвейер и добавьте поток данных, который вы создали ранее, затем нажмите кнопку отладки или добавить триггер для его выполнения. введите описание изображения здесь

6.результат:

 {
     "Product": {
        "price": 300.56,
        "detail": [
            "eee",
            "fff"
        ]
    },
    "id": "d9c66062-63ce-4b64-8bbe-95dcbdcad16d",
    "timestamp": 1600329425
}
  

Обновить:

Вы можете включить кнопку Отладки потока данных и просмотреть результат выражения в режиме предварительного просмотра данных.

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

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

1. Шаг 3 — это что-то вроде concat в js?

2. На самом деле нет. Шаг 3 изменяет строку на массив. Вы можете обратиться к этой документации .

3. Извините, но я не вижу никакого нового документа в Cosmos DB после опубликованного потока данных без каких-либо ошибок. Я что-то пропустил?

4. Возможно, вы его не выполнили. Я обновляю свой ответ, и вы можете увидеть шаг 5.

5. Спасибо. Это работает! Кстати, есть ли веб-сайт playground или какие-либо инструменты, которые могут позволить нам протестировать выражения (Шаг 3)?

Ответ №2:

Одним из вариантов является экспорт ваших данных SQL в обычный файл CSV, любое переформатирование с помощью вашего любимого инструмента и импорт очищенного файла CSV или JSON с помощью инструмента миграции Cosmos.

Например, в PowerShell процесс может быть:

  1. Экспорт данных SQL в CSV
  2. Используйте импорт-CSV PowerShell для чтения данных в виде массива пользовательских объектов
  3. Используйте PowerShell для изменения пользовательских объектов в памяти для преобразования типов, переформатирования, проверки и т. Д
  4. Экспортируйте очищенные данные обратно в CSV или JSON с помощью Export-CSV или ConvertTo-Json
  5. Импортируйте очищенный файл с помощью инструмента переноса данных Cosmos

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

1. Увеличивает ли дополнительный экспорт сборы?

2. При импорте в Cosmos будет использоваться предоставленная вами пропускная способность. Не уверен в экспорте SQL.