#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 процесс может быть:
- Экспорт данных SQL в CSV
- Используйте импорт-CSV PowerShell для чтения данных в виде массива пользовательских объектов
- Используйте PowerShell для изменения пользовательских объектов в памяти для преобразования типов, переформатирования, проверки и т. Д
- Экспортируйте очищенные данные обратно в CSV или JSON с помощью Export-CSV или ConvertTo-Json
- Импортируйте очищенный файл с помощью инструмента переноса данных Cosmos
Комментарии:
1. Увеличивает ли дополнительный экспорт сборы?
2. При импорте в Cosmos будет использоваться предоставленная вами пропускная способность. Не уверен в экспорте SQL.