Параметры сортировки OPENJSON в Azure Synapse вызывают ошибку конфликта параметров сортировки

#azure-synapse #open-json

Вопрос:

У меня есть команда OPENJSON, которая берет проанализированный JSON и присоединяет его к существующей таблице.

Когда я добавляю ЛЕВОЕ СОЕДИНЕНИЕ, я получаю ошибку:

конфликт параметров сортировки между «Latin1_General_BIN2» и «SQL_Latin1_General_CP1_CI_AS»

Таблица имеет те же параметры сортировки для всех строковых столбцов, что и: SQL_Latin1_General_CP1_CI_AS

Я попытался добавить СОПОСТАВЛЕНИЕ DATABASE_DEFAULT в ЛЕВОЕ СОЕДИНЕНИЕ, но без каких-либо улучшений.

Запрос, который я использую, примерно такой:

 DECLARE @json NVARCHAR(MAX) = '
{
    "ExampleJson": {
        "stuff": [
            {
                "_program_id": "hello",
                "work_date": "2021-03-23 00:00:00"
            }
        ]
    }
}';

SELECT *
FROM 
OPENJSON
(
    (
        @json
    ), '$.ExampleJson.stuff'
) 
 
WITH ( 
     [program_id] NVARCHAR(255) '$."program_id"'
     ,[work_date] DATETIME '$."work_date"'
) [json_data] 
  
 
LEFT JOIN 
    [existing_db_data]
    ON [existing_db_data].[program_id] = [json_data].[program_id] 
 

Ответ №1:

Интересная проблема, которую я не могу воспроизвести, но вы должны быть в состоянии решить, поместив правильные параметры сортировки либо в предложение WITH, либо после соединения, например

 WITH ( 
     [program_id] NVARCHAR(255) COLLATE SQL_Latin1_General_CP1_CI_AS '$."_program_id"' 
     ,[work_date] DATETIME '$."work_date"'
) [json_data] 
    LEFT JOIN [existing_db_data] d ON d.[program_id] = [json_data].[program_id] COLLATE SQL_Latin1_General_CP1_CI_AS
 

Одного должно быть достаточно, вам не нужно и то, и другое.

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

1. Спасибо за предложение, к сожалению, ни то, ни другое не работает.

2. Ах, если я сделаю это наоборот, я получу лучшие результаты, т. Е. Latin1_General_BIN2 в столбце existing_db_data

3. Интересный. Каковы параметры сортировки вашего выделенного пула SQL?

4. То же, что и столбцы: SQL_Latin1_General_CP1_CI_AS

5. Я попробовал еще раз с SQL_Latin1_General_CP1_CI_AS, но все равно не повезло. Сопоставление BIN2 левой таблицы, однако, в порядке, так что продолжим с этим спасибо.