Столбец JSON SQL в фабрике данных Azure

У меня есть столбец SQL типа JSON в таблице SQL, как показано ниже. Я хочу, чтобы приведенный ниже код был преобразован в отдельные столбцы, такие как лекарства в качестве имени таблицы и другой атрибут в качестве имени столбца, как я могу использовать adf или любые другие средства, пожалуйста, объясните. Приведенный ниже код представляет собой один столбец в таблице с именем report, где мне нужно преобразовать его в отдельные столбцы.

{
    "drugs": {
        "Codeine": {
            "bin": "Y",
            "name": "Codeine",
            "icons": [
                93,
                103
            ],

            "drug_id": 36,
            "pathway": {
                "code": "prodrug",
                "text": "is **inactive**, its metabolites are active."
            },

            "targets": [],
            "rxnorm_id": "2670",
            "priclasses": [
                "Analgesic/Anesthesiology"
            ],
            "references": [
                1,
                16,
                17,
                100
            ],

            "subclasses": [
                "Analgesic agent",
                "Antitussive agent",
                "Opioid agonist",
                "Phenanthrene "
            ],

            "metabolizers": [
                "CYP2D6"
            ],

            "phenotype_ids": {
                "metabolic": "5"
            },
            "relevant_genes": [
                "CYP2D6"
            ],
            "dosing_guidelines": [
                {
                    "text": "Reduced morphine formation. Use label recommended age- or weight-specific dosing. If no response, consider alternative analgesics such as morphine or a non-opioid.",
                    "source": "CPIC",
                    "guidelines_id": 1
                },
                {
                    "text": "Analgesia: select alternative drug (e.g., acetaminophen, NSAID, morphine-not tramadol or oxycodone) or be alert to symptoms of insufficient pain relief.",
                    "source": "DPWG",
                    "guidelines_id": 362
                }
            ],
            "drug_report_notes": [
                {
                    "text": "Predicted codeine metabolism is reduced.",
                    "icons_id": 58,
                    "sort_key": 58,
                    "references_id": null
                },
                {
                    "text": "Genotype suggests a possible decrease in exposure to the active metabolite(s) of codeine.",
                    "icons_id": 93,
                    "sort_key": 56,
                    "references_id": null
                },
                {
                    "text": "Professional guidelines exist for the use of codeine in patients with this genotype and/or phenotype.",
                    "icons_id": 103,
                    "sort_key": 50,
                    "references_id": null
                }
            ]
        }

Можете ли вы также предоставить ожидаемый результат для данного образца

Saideep Arikontham 15.02.2023 05:38

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

Saideep Arikontham 15.02.2023 05:45

например: Table_Name (лекарства) и столбцы, как показано ниже Кодеин, bin, имя, значки,drug_id, pathway, code, text, target, rxnorm_id priclasses, metabolizers,phenotype_ids, relevant_genes, dosing_guidelines, text as string, source as string,guidelines_id as строка,текст как строка,источник как строка,guidelines_id как строка,drug_report_no как строка,текст как строка,строка icons_idas, sort_key как строка,references_id как строка,текст как строка,icons_id как

kfb 15.02.2023 05:46

Судя по количеству многозначных элементов в JSON, вам может потребоваться разработать около дюжины различных таблиц плюс отношения внешнего ключа, чтобы сделать это правильно.

T N 15.02.2023 05:50
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку этот json уже находится в столбце SQL, вам не нужен ADF, чтобы разбить его на части. Для этого вы можете использовать функции JSON на сервере SQL.

пример нескольких первых столбцов:

    declare @json varchar(max) = '{
    "drugs": {
        "Codeine": {
            "bin": "Y",
            "name": "Codeine",
            "icons": [
                93,
                103
            ],

            "drug_id": 36,
            "pathway": {
                "code": "prodrug",
                "text": "is **inactive**, its metabolites are active."
            },

            "targets": [],
            "rxnorm_id": "2670",
            "priclasses": [
                "Analgesic/Anesthesiology"
            ],
            "references": [
                1,
                16,
                17,
                100
            ],

            "subclasses": [
                "Analgesic agent",
                "Antitussive agent",
                "Opioid agonist",
                "Phenanthrene "
            ],

            "metabolizers": [
                "CYP2D6"
            ],

            "phenotype_ids": {
                "metabolic": "5"
            },
            "relevant_genes": [
                "CYP2D6"
            ],
            "dosing_guidelines": [
                {
                    "text": "Reduced morphine formation. Use label recommended age- or weight-specific dosing. If no response, consider alternative analgesics such as morphine or a non-opioid.",
                    "source": "CPIC",
                    "guidelines_id": 1
                },
                {
                    "text": "Analgesia: select alternative drug (e.g., acetaminophen, NSAID, morphine-not tramadol or oxycodone) or be alert to symptoms of insufficient pain relief.",
                    "source": "DPWG",
                    "guidelines_id": 362
                }
            ],
            "drug_report_notes": [
                {
                    "text": "Predicted codeine metabolism is reduced.",
                    "icons_id": 58,
                    "sort_key": 58,
                    "references_id": null
                },
                {
                    "text": "Genotype suggests a possible decrease in exposure to the active metabolite(s) of codeine.",
                    "icons_id": 93,
                    "sort_key": 56,
                    "references_id": null
                },
                {
                    "text": "Professional guidelines exist for the use of codeine in patients with this genotype and/or phenotype.",
                    "icons_id": 103,
                    "sort_key": 50,
                    "references_id": null
                }
            ]
        }
    }
}


select JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.bin') as bin,
       JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.name') as name,
       JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.drug_id') as drug_id,
       JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.icons[0]') as icon_1
'

Вам нужно решить, как обращаться с массивами, такими как значки, в которых есть несколько значений внутри одного и того же элемента.

Использованная литература:

Функция JSON_QUERY

Функция JSON_VALUE

спасибо Чен, как мы можем воспроизвести то же самое для других данных, так как когда я запускаю это, я вижу только одну запись. Как мы можем расширить это, чтобы показать все данные

kfb 15.02.2023 16:12

используйте что-то вроде этого: выберите JSON_VALUE(JSON_QUERY(json_column,'$.drugs.Codeine'),'$.bin'‌​) as bin из table_with_json, где table_with_json — это имя вашей таблицы, а json_column — это имя столбец в таблице, содержащий json

Chen Hirsh 15.02.2023 16:46

Другие вопросы по теме